diff --git a/api/database_cluster.go b/api/database_cluster.go index e18ef74cb..61a3d64a9 100644 --- a/api/database_cluster.go +++ b/api/database_cluster.go @@ -170,7 +170,7 @@ func (e *EverestServer) GetDatabaseClusterComponents(ctx echo.Context, namespace } var started *string - if !pod.Status.StartTime.Time.IsZero() { + if startTime := pod.Status.StartTime; startTime != nil && !startTime.Time.IsZero() { started = pointer.ToString(pod.Status.StartTime.Time.Format(time.RFC3339)) } res = append(res, DatabaseClusterComponent{ diff --git a/api/everest-server.gen.go b/api/everest-server.gen.go index 9317ddfca..a9ae296a6 100644 --- a/api/everest-server.gen.go +++ b/api/everest-server.gen.go @@ -2518,173 +2518,174 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/api/everest.go b/api/everest.go index afcee313b..43d005dc5 100644 --- a/api/everest.go +++ b/api/everest.go @@ -209,8 +209,12 @@ func (e *EverestServer) rbacMiddleware(ctx context.Context, basePath string) (ec } e.rbacEnforcer = enforcer + skipper, err := rbac.NewSkipper(basePath) + if err != nil { + return nil, errors.Join(err, errors.New("could not create RBAC skipper")) + } return casbinmiddleware.MiddlewareWithConfig(casbinmiddleware.Config{ - Skipper: rbac.Skipper, + Skipper: skipper, UserGetter: rbac.GetUser, EnforceHandler: rbac.NewEnforceHandler(basePath, enforcer), }), nil diff --git a/api/rbac/rbac.go b/api/rbac/rbac.go index 62ae230d2..9e0605edd 100644 --- a/api/rbac/rbac.go +++ b/api/rbac/rbac.go @@ -32,6 +32,7 @@ import ( "k8s.io/apimachinery/pkg/types" configmapadapter "github.com/percona/everest/api/rbac/configmap-adapter" + everestclient "github.com/percona/everest/client" "github.com/percona/everest/data" "github.com/percona/everest/pkg/common" "github.com/percona/everest/pkg/kubernetes" @@ -121,28 +122,44 @@ func GetUser(c echo.Context) (string, error) { return subject, nil } +// buildPathResourceMap builds a map of paths to resources and a list of resources. +// Returns: (resourceMap, skipPaths, error) . +func buildPathResourceMap(basePath string) (map[string]string, []string, error) { + swg, err := everestclient.GetSwagger() + if err != nil { + return nil, nil, errors.Join(err, errors.New("failed to get swagger")) + } + + // parseEndpoint replaces the curly braces in the endpoint with colons. + // example: '/{namespace}/clusters' -> '/:namespace/clusters' + parseEndpoint := func(ep string) string { + parsed := strings.ReplaceAll(ep, "{", ":") + parsed = strings.ReplaceAll(parsed, "}", "") + return basePath + parsed + } + + resourceMap := make(map[string]string) + skipPaths := []string{} + for path, pathItem := range swg.Paths.Map() { + parsedPath := parseEndpoint(path) + if val, ok := pathItem.Extensions[common.EverestAPIExtnResourceName]; ok { + if resourceName, ok := val.(string); ok { + resourceMap[parsedPath] = resourceName + } + continue + } + skipPaths = append(skipPaths, parsedPath) + } + return resourceMap, skipPaths, nil +} + // NewEnforceHandler returns a function that checks if a user is allowed to access a resource. func NewEnforceHandler(basePath string, enforcer *casbin.Enforcer) func(c echo.Context, user string) (bool, error) { + pathResourceMap, _, err := buildPathResourceMap(basePath) + if err != nil { + panic("failed to build path resource map: " + err.Error()) + } return func(c echo.Context, user string) (bool, error) { - pathResourceMap := map[string]string{ - basePath + "/backup-storages": "backup-storages", - basePath + "/backup-storages/:name": "backup-storages", - basePath + "/monitoring-instances": "monitoring-instances", - basePath + "/monitoring-instances/:name": "monitoring-instances", - basePath + "/namespaces/:namespace/database-engines": "database-engines", - basePath + "/namespaces/:namespace/database-engines/:name": "database-engines", - basePath + "/namespaces/:namespace/database-clusters": "database-clusters", - basePath + "/namespaces/:namespace/database-clusters/:name": "database-clusters", - basePath + "/namespaces/:namespace/database-clusters/:name/backups": "database-clusters", - basePath + "/namespaces/:namespace/database-clusters/:name/credentials": "database-clusters", - basePath + "/namespaces/:namespace/database-clusters/:name/pitr": "database-clusters", - basePath + "/namespaces/:namespace/database-clusters/:name/restores": "database-clusters", - basePath + "/namespaces/:namespace/database-clusters/:name/components": "database-clusters", - basePath + "/namespaces/:namespace/database-cluster-backups": "database-cluster-backups", - basePath + "/namespaces/:namespace/database-cluster-backups/:name": "database-cluster-backups", - basePath + "/namespaces/:namespace/database-cluster-restores": "database-cluster-restores", - basePath + "/namespaces/:namespace/database-cluster-restores/:name": "database-cluster-restores", - } actionMethodMap := map[string]string{ "GET": "read", "POST": "create", @@ -176,17 +193,14 @@ func NewEnforceHandler(basePath string, enforcer *casbin.Enforcer) func(c echo.C } } -// Skipper is called by the RBAC middleware to decide if a path must be skipped from RBAC. -func Skipper(c echo.Context) bool { - skipPaths := []string{ - "/session", - "/version", - "/cluster-info", - "/resources", - "/namespaces", - "/settings", - "/permissions", - } - path := strings.TrimPrefix(c.Request().URL.Path, "/v1") - return slices.Contains(skipPaths, path) +// NewSkipper returns a new function that checks if a given request should be skipped +// from RBAC checks. +func NewSkipper(basePath string) (func(echo.Context) bool, error) { + _, skipPaths, err := buildPathResourceMap(basePath) + if err != nil { + return nil, err + } + return func(c echo.Context) bool { + return slices.Contains(skipPaths, c.Request().URL.Path) + }, nil } diff --git a/client/everest-client.gen.go b/client/everest-client.gen.go index b4813fd4b..42bb5005f 100644 --- a/client/everest-client.gen.go +++ b/client/everest-client.gen.go @@ -7189,173 +7189,174 @@ func ParseVersionInfoResponse(rsp *http.Response) (*VersionInfoResponse, error) // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "H4sIAAAAAAAC/+x9e3PbuLX4V8Fo70yTVJKd7G7n1v90HCfd+u5m47Gd3vk1yq+GyCMJNQlwAdCONs13", - "v4MDgE9QomQ5sRu1MxuLBPE4OO9zgPNpEIk0Exy4VoOjTwMVLSCl+OdLGl3n2YUWks7BPKBxzDQTnCZn", - "UmQgNQM1OJrRRMFwEIOKJMvM+8GR+5Yo+zFhfCZkSvHlcJBVvv40oEkibiH+laagMhrZh/XefmFKEzEj", - "vGhD3FdEC5IrIHrBFJnWBh0MB0xDit3pZQaDo4HSkvH54PPQP6BS0qX5Pc2ja9BmDsHmtekE3s+EjOCM", - "6sWFXiZgFzCjeaIL8LhPpkIkQLn5hncNJmEeHGc4+Diai5F5OFLXLBuJzO7GKBOMa5CDIy1zKFb3aQA8", - "TwdH7wfq+8FwQH/PJQw+DNsD5jIJTuQGJJstL3+5qC3IjNFeD877t5xJiM2IuLgaWN0nw8B+l3MS039B", - "pM3YNeRTBgHMJIoN/S8Js8HR4LuDEnsPHOoe1PE2sNknEqiGWrMzKqnteXskz0wfoEGqNo5HESj1MyyD", - "cH6AFFAf/XIBJEpEHhdrta0PIsE1ZRwk4ZU9/lKUU5/ksQGDJDHMGAczUzMEzssATi+gwo3w56tfL+xr", - "y5vIQutMHR0cXOdTkBw0qDETB7GIlFlnBJlWB+IG5A2D24NbIa8Zn49umV6MLNqqA9ydg+9irkYJnUIy", - "wgeD4QA+0jRLEN63ahTDTQhUd6d7BZEE3YVmD5MrlKRRnf+G3OIV1XRKFZwkuUKANJGj0YAwhShwgSzD", - "IAD+jF2ryLZS5PjsdNwm5oz9HaRye9VAwrNT984hoh3nxj4zaGlHRIxkikjIJCjgGmWjeUw5sesaT/gF", - "SPMlUQuRJzGJBL8BqYmESMw5+73oThkmYMZJqAalCWIFpwm5oUkOQ0J5POEpXRIJpmeS80oX2EaNJ/yN", - "kFZSHxWkMGd6fP3fSAeRSNOcM71Eopdsmmsh1UEMN5AcKDYfURktmIZI5xIOaMZGOF1u1qXGafydBCVy", - "GSE9tJDqmvG4Dc2fGY/NVlFPzTjXEmjmkVn2+euLS+L7t4C1MCybqgo4DSQYn4G0TWdSpNgN8BgpCn9E", - "CQOuicqnKdNmo37LQWkD6fGEn1DOhSZTIHkWUw3xeMJPOTmhKSQnVMH9Q9NAUI0M2ILwTEFTg80VCi6p", - "RWUQrSWRiwyiGg7HoAwdE6WpRpba+GAc1uzecUVncCL4jM1zSXWYbDpakhmDJDaMHeUccJVLs8HU7hEy", - "/IhyEqFENwRSfqtIzmdMI3FnUsR5hD3mCsaDkFSxsrM9NyflHcfwEjaDiM1YFFZpgdNpAgGEfm1fWJye", - "JXRuV2Ueup5VcG4Z0wGmdnZ6ee7nVVu6F3gWm424Yykg27gBuWxNd1rVhMIawMtmEz9uVb7WGpHbBeBe", - "AfHz9GAJ4OtWEDP9BsGVZ4mg8anhgjc0uQhh+7tmE8LzdArSrEVBJHisyBT0LYBVFqaMJ2KuiO26skuG", - "185BtmSdX1FIXBmuHedJSNG78K/sihOn93m0Kz6sqHbBnXINm2jrH9fQZfyFMOLk3JJuhatMuFfKElEQ", - "026wAzU+t95BfzWyayntrqqam7as+URkLLSr5/UGRf8Fyrn9iexrLYgEo1gPUEFOqbaI9v2LAN6V6NSN", - "TQWXkIKvWEkDhdtYUG7F0CtzRW8hRK8bGRtQiJFdFyjOw4LKviswiaLqRpwCYDj+VAittKSZ0REo4XBL", - "nFbXhewdo72svG1Sk9M3zG4ZNAZUJb4QMaFMxJVauTEOIWZG9SIgN6he+AFMC689umXNWAIHMZMQaSGX", - "463QBAcObuzUqQt2NWFwvHrZahQCyKuXfk/91Ntb0QbJWlGKUnPE+KgmNesss7XJRgsMomox83eXJwZL", - "Hb5gp0aZJMa4NkZQpu2GplQfkcngxeHhn0aHz0eHLy6f/3h0+MPR4Y//mAyCu+wNu8IYs7Npuisul1kx", - "GfOJAaNf3RhJ29qF7mNrSwRMw8+tbf0c2Gjgc8YhxLLNcz8Pb3ER23yNXmW3oN2n1Rl9n66r5n61wBbJ", - "TjPu5Nxbcayu/DpDzmOgkWjW/XLLDB0ZgZbzGGSyNHzHzJ1qIY11MCM5d6uDeEjgBgymjnwTcsuSxDly", - "gCiD5X4saqdQ6cz8/9e3l6+PyDtjflgziCnioLUkmUArUGmaJFYjNDZPAhTVaIpEQqX2y4hKDT4g27KE", - "RTQo1OybtjRzO1B8GpBiKeMsNfj2PCTRSlsxMKp7RahTLwvDL2FoqhmmCDRaNKZhN8GYbQr0sPWV6c28", - "ZGkmFAq4Bu5lOdo0fPl2Njh6/6k965av5EOTAk/O3nlgmT+LKThumqITHpmnsd8HR4P//2Qy+eO/R0//", - "8uTJ+8PRnz/88clkMsa/nj39y9N/F7/++PTpkyfvf37z0+XZ6w/s6b/f8zy9tr/+/eQ9vP7Qv5+nT//y", - "X+hyKt1gI8MPhRy5dXlvUwqpkMs7A+UNduPhYjt93KAJsUNVhlEaKpp3StaYl9eKVwudKKEqQCIn5rHv", - "sOgJHzpu5R1emWExyuim5EYkeYrNWFBuKvY73HmvL9jvxUpNh4Wh2jmPx7LhVYUIQdWtDn9aIZfd9jvn", - "p5fI2cfIgEIoPZegfkvMD5XG07DfVoG8QEeqCmtX7+oNgsYOvibOve/dbOhusa+CTqebLnHaEKZukb75", - "Ov2yjGZguxBgU8GZFnZHmoO/Kd4VPKZ8spq+yoZWwwjD802gVROolDT7IifnHfK2h+jzdk9diDm3lyfu", - "csRxiHOwNMw6WKrQ7VAuQFlN0Q0+LEIsjKO+Nvav7MfDCUcr3whUNFKmS6udFMEip8FcmofGcueEJtmC", - "Omcf5bHn+s5l5PBvwl8tOU1Z5OFwnHinAZkB1bkEMqcaqt3bLs04aZprY2+OyalGn6HgyZJMDa5bH2Ex", - "PTSlOrwr59WlEgkzkMDNjghu8FobQcbJmYgvDGBqrVV7F1Z4INJcaZJSHS1qeFQbJhPxOLABRMzMFoCZ", - "RuGFq8LC7AqCIaXX6IahusQkekNZYgA14YwrFgOhlZ1bS6y4pLWugAZPNeg2Smk2uoalqvbSbuW6SWlm", - "OrW6W3fYdmNx9UhUr2ZwGDVY+3Dq3PUp/WgUbEJTkXPU9CORZrku9eUihByOVqwKg9bY5kFKOZ3DqOh3", - "VJLSwSCACj6W8q3v27mPKTV2zppGK3fOk5w1aoqOmCIiZdp5EqqUOyQMHa80TzCIRRzSsJmlf6YIfDR2", - "EtPJkpSG6oQLvQB5yxQ6Lig3BlKC+jhu/sgLAwzNjcupRDZEBh8jgNiN9mURrZ+fIqOGHYacZCi8ap5l", - "pUVWNZjDsRopPi4D/ZnHhYsJf9ScHWNStU6NTMyMsJCMapjwwAfWYzAF0zBhbsdN53N2A9wpWWNyPOGR", - "SFMb+SIRddq/Al36DQrJoAVijBSJFbjw0QWSbZTeOwoLr03UFfrr56mxq1rrqIGPxiQPuJLweb0z23aN", - "XsecP/ec8nlI0To9q773A/hYzOmZ9/xK+/7Jyemrc7N3ONrTCTeEYlirB9tMirS+vxrFMlOEi6ru1q14", - "1KZUCWub2dA4lqCUmSkntbkQdCzphcg1OsF1StX1Ch9imQ7U9in6pIKVfkUHfvP1ELWsKZTZCEISj1AV", - "46bSb/G2j9NxO9eUxZKv7ZmqzWLvmNo7pr6eY2q9T8Iia8MlkQo+F2bhC2oFnhN8zjsxn4qcRyD7hg/q", - "cUGMHAQD55rqXK3PXcFmtewVMVUgbzZLX4k0u4GLLsfdcfV109tmdQdexKeeoL8Gbc6nd41FFEtpByNw", - "WB+KIKFIRGjwhVA6bIr+zb3xQ/uWleQOv0LH7KXhb+EcjxSUCkLyjX1hdVAtaTVdnNCpEV5BpasS1BNS", - "B1QuIXUZ1JO6z6x7hNsl0HgZYv80XrYFDrY2prrq27tR14DHEBc7Hxqs3cqPXemhM15lZY5XRcxzDhCj", - "glcmtVl1j6milynMjPqeZ3NJY+8VbAW5Kp0a7TmxEHApW4HJjVe5m7v9x1pomlQle28Qd3ERxzYKUsZf", - "9RDZYMtoaIPZvOzINQs265es6tIAvm7KKtlhxipZk7BK/sPzVcmu0lVJO1uV1JJVyWPPVXWZMZtmrNrP", - "xg8pYadIj1mTGFMdUkg2Z4Z2mmY5Tma7/J36PO6ginkYbK6Qde1OJNIsAR3y2Zz4V4WMYFZXsTmc/xJT", - "cksVKXoYV+WFoQxM+QnrZ0DDQ9oX1QGVpmnmcSDPlJZAU7frf1A2V9mJvX6Dx6A04x2p06/Kl34SszxJ", - "AoldQYSb0yywiT/RTBEWGxqeYb7izHksKMZYMrOVhuCtklvk+CZiHs5fxj0OC9wCjf32F6eqqO6BvDj/", - "D9vLYH+yrAcS4xksG69y3Bo9p84HWfcRWV8IU8jyW3RZ4QB7OX2vcrrwpvU6ORjW0gLesb34/yLivwcV", - "n/hdPPGhANNPOMwairVrKnX1gGTdTJCO57fNk0L69fBTdk05wHhLpCQSEpQsCJsKJrcc7S4Csi2WByAY", - "wPgVMHTW8JeAbumuWgf26qFJO/fObQgtt9lWAgpDmrS3rPS5kWLs+h5lVKlbIXGt5UlQKYQedOTveGiv", - "a90D23oJuJ2Jtr1Me+AybS/NHrI0OwseTug4kNAQEI0jiFQmDJR+5RTvkpO8OHzx/ej5i9H3zy9ffH/0", - "45+PfvzzP3qbImFzgfGYRYaY6oZCxrREm6BhMtCZ9vvvzm0Yq0zTa+BB68HSaf3ASGtmttFOl9tjw87t", - "aZO1DNa16+fKc0dY9r68vS/v2/PlOUrZ2JnnvhuHTmbd7SihJcfVJ2X3hwf3hwf3hwd3dnhwIzd4lUtU", - "Pd+VDV2PhxUusUPvt2dmW7i/O/lZzf/dT2urRN6DtjYEk5n8zGvpZsV0G1xxF1FRN2Yvi7XSdjc+Wa90", - "7RWuh23Aeo17b8c+RDv2dcep7/r7NWaQTQDbmz978+cbMn8sZaDZY8Fu/rKHOBqXJIy7rlB1uF9nrRtk", - "erevaUCtT2nK4/JYocqzTEjveKrMS43JOZsvNOHiljD9B2WP2GUfI6QBzIAck7+JW7hx51Fc9l2mhiSb", - "YyPKlwQPnDj7aL3i1nkmdJ2K5gC+iWr2ugv+/sxcdQeCR2CNAiXzGnWUJ+48o8Kks+bNGKVk7DJCVx2n", - "audJYF+lolRNuXS6UucMxgVAyOvGK7+ljW+H5QObTWxwSYhEEZbaq1P1IqDpSqZZRKvXUFa8gvjl36ha", - "BLEc3545C/Zu4bsVV5vswf0FwF0cqOo8K7jfhfvfhfYDs5T9tjysbQk18Qna7zBtOyDr39Yb1K3nehp0", - "cV2RzQGHcXmMX4G2At/GgMiVu+JonIGMBKfjSKQH7rPi2qORFlcEdboig83JxfYWuPuMzhLKz4252Doi", - "V3tvtajihL5X0iuNvKLqcvsKBae1xk3O7Ts4uXH15idee90wjf9M+OXbV2+PyHEcO50pVzDLE3ucU41J", - "aSoNiVFZhyRn8V96OGsaR4lSmvlz91SLlEXrfErZgobOazr8OjNvqwoQ+k3xYReWBU8I2ASSY93fD6ap", - "nIPuNB8vq6+9jerPPmhBbhfMXcdQTNAZh1N/KMLmlPYgZN9DZTJtMAKPGZ83yLOu3m9AyeFTNeuxfU93", - "D4nuHhAONy3JLourtLTCrmQn0xknlFz/t1pxHd1mbmU77mp3ctnmbm5kbwLv/VUP03vsHJN7r/HD9Ro3", - "hNdWJVleNeyEpkxZVaRlHWfdgpHWSn8cjp+/GB+ud2jVphHybL2WUgTC0PjY4GImuIL2ZWadCltoa34u", - "xJCLu5zymViZ/OoDaQb5AveN4cvLcPZucT0i3lyItT5qSVzvB/PsxWA4mGffG4D09W02AFudQ2jED33A", - "cN59/0MAFlVG1uEyDKR0Z/kbliSsukR7zLWa1Tw4GuSM6z/9gPFypq4v3InZfl/Y6wxeLjX0HqZPjnUB", - "nuNifZ+Hg4hmNGJ6+R+61hO/vBbG+RfDyn6H0Ky8QhD1ZG5ziWiSuNsrVkm49rcvqYL/ZXqB2QuBey0q", - "FyK6LxoF2lr+dVsNKFSNx50M+BBcxMugGbh+/PsqEJe2R96oRlazglKWpu0Ul/7lmlyFpZTxX4DP9aJ6", - "5czGnTXKMjViD/aVd9OUpVQuf7k4uLj4heDX/iaqQbCQUw+krSHeHREYr2jpY/49jrpfWZqOKji3iz1v", - "78kWpN5jV+0R14o6thO2NNz087M3b3qu0FUDuh+eZqbREmOGEbQe0oy5UmyV8m8Zu8byZrsh+vDJouLp", - "HViTsgfpKjOPU8YHO8PVgDw9e/OmDe6LDKK+7Acvw98Rot4rglrbrYagwQVtVvcyoEQEZFiB562+14q/", - "t6evTk46LvZ7bZ39xLQhmRQ3LAa59vpyY+ieBqxv7AXvNXR3Hbqmr4IOAaVykO/Of+nop5iNpffV1lcx", - "p2q/IZWtaa1KmCVsvtAbGqxvWwaq74hEC4iujQmRJ7ptQES5lMBXm6uuTWmhdl65bSvuGMu5v2ulCwJ/", - "FdKb4UGbrDcoqx3dD1QbCTYb2MzDHs7oZo5pMKPc+vgvqboOJJbbl0RTdd3Kkqv06vVRexZ3OOBCn7s/", - "3SFcI+0sKF43b1db5QV4245SbLML3m3yWDDaTeHETHdrbO7qZBcw9IirGJ8n8B+EvxZZ+yHnhb3CVnUL", - "o3kipjTxd922MU6wOCoF2krMKEVfU2JUOgnJCauU7ItNP8xi0+1Ujq4qzGvLK/eql9zHrn6nqhcOBO58", - "qGr9K68P6EFEZrAzkClTReJiY7D6y3b0pafXZBXL7GT5npA98wv6lmd5kpyINGX6LrWzMynMdMLnizdy", - "w6g7VfFucJfqtMreh9VFh7gOExjyoRlLabQwRLMcZ9dz80CNU9B0fPN8bOj8DdhoTZsDmDeVm+l9aMdG", - "RtWS6wVoFlXupMeSFQt6A0PCeJTkyPptJRHKY3JDJRO5KhKKrO9kTI7L8FlKl9iBzSMSHCXRp7fY0kxn", - "SPzEPgevHNeM5xC6VMW+wf5dxQ+XpORK2mgstZoyTQRv3N+JeE4k6FxyiG14tDzvXpQixpRhSRZUkVRI", - "K+XKzF57UM+GEJkiIqO/5VBEWqdQVDhGm4NQe+m+D/35gG0lSmi2wCYpIyvG2LStGioZ3Ng7Tjl81DYr", - "a1bJMS7gfmKhYutjRoL7AkzYl5mWCzRmQilmvmSz6krrBYfNuqMF5XOIiZAWBHpBOaFkBrckZTw34MLN", - "NewLYgsSv/U+DG5vovfQtle35aq4qL7YSQtKfwO+vaksoomHlIO03csZk0oXcbEhyXkCSpGlyO18JETA", - "ClBqcQ3cRmYpJ4AxNadGddTrSW2JpFMN6YnIeSDZoN2mfU+syqfKbLd5hyjnZo/bYYONxU3gSF3+7jW/", - "/X6BeNF88aVHIS88Y4IeSrNJFtYKEjyrq/DSVt66vdbN3E9KkZxfc3HLEXsteE03fisSmGl7CSw28NUo", - "4hw9IAokown7vax4UEyUlffykSfAEP+nEFGjbjBtr8o31lvOr/FC4/KtdgmINqdBuUZPy/W46yi4sHjZ", - "XJNdSFEGYauV+AC/SGIM7lNObp6Pn/9IYuFvdq+MYXHfcH28BzdXlfylEKY8A6VZioUen9VqpxnCTcz+", - "4SRO0HdRZICYcSUgI+3q2173izxCuh/wkUZ63LhI908/DFZdht8pvy+sM95WGCmvEyzZyB9UJf+keldx", - "mUdhM3FsKq+vJxW5lWqBt4rIlHF3z6Njb5ayHUcak78jP0ABNQWiXeIZLThxpUs8qoIciuQ8FTGWQUFd", - "1zMXO/MxORNZbm9gwQpXQNRSaUjHxNjeIyPC7j0dIxLcWsTRcuQKd4woj0cFO4+WwdRJSGa/MB6w2Pwb", - "m/ry7vyXZsZLsS+91j/hE/7q9dn565Pjy9evSBlNt1SG9VSMFKdz2qpGwsnz8YtDg8FgrMU6u2GKZAnl", - "3EpNvME7FTfgP3vuP+uZydZLXbJHhU4Mz+m6Oxpfeoej0wTaaZdY3IW5/siMsiSXNaUposqAyOBzmiea", - "ZQlYSWSrQQCPDPWCtJl6DW3YwCdsVVnQFZymyFmi2spvW/EG9wBHGxoKMbYE7jDTivzPxdtfm6zvDeY0", - "oUQisbDMMhNKz9jHsg6JMf45KKQ6bTEdjO5nbAK7qN9BihHjMXw0BEv+irmUqIfQLANa1SmEDWMhHE0H", - "WCLJTF6ROMeMU5uJaZiAAWcDhmPy1qneiJ+vbYhDHU04IRN0i0wGZFRBtuKhY6TeCeVBaD9EYfL+8MO4", - "Rw9WJbGTL8q5uS4mg40uzz8mizylfCSBxqjgVV4Xl5fTiohBIIwJqdTHc0qoI3TkjCNbDYji/fWdpYGp", - "CqY1EkdFG0/q1LH+QlOGNNPLWrWcGjkV+vXOyfwVaMoS9c+bF1207lq4JEGnZhf+HFJSpaWwN8f/z8ta", - "zy6tIq2FZxjVzwNco6LhGWo+R+iXRE3JRdWyKjJKb7EYY0F0hX6jQJcqA4pGNud4+YklHpy1U1/KQoQ+", - "zO7vAMFyNkXv1jxy+gdVKk8df6F8Wbby+Iaba/jeDU1YPDQ6CJas8IMEbDyk8jB3O7EcwBKVY0jeGHNb", - "RZUSEUORVRTJsEDzwLS8eEx+NYwsSWpvLTfye2X7hNhxnlrNyFWexI1FTcCjMpciVD3AQAFfVUDd5PYh", - "EDiLvLrWcf+T4mZU82YHg5K3nCiR+pRK5mEes9kMZJku64waiMshfmY8/trZr7zTn4npJneGD3lyW1o0", - "lu1Y/78ryWJsRH/mzflt4qcdnFvL5fFMYyFgYZbTPtUxq1QBLC9TZ5wo+4mvBlKmwBpeVebAWl9EPCYX", - "Zked+mIToK33pJrsjPxH02uw1WDRItBAKFo2ZOSCB0IVHem69Cr6XIhbkgiO5fpuKdPFLOm1T9ludj/u", - "VzUkZwHkf3f6qrmb485tKva7a6ua+BtOSsoVyNE8ZzEcFDaVVN/lLISVdxSDK+SfP+ijc8mdwMYyujRJ", - "CuHB/6B9C+vR8t6n/TGJ+z4mEYnQUc+LfD63nPNvl5dnfm9MW0dizDtoh+SQsKIsXU8acYJ2hzKwooft", - "z2rs+KzGHSyK6qlgdGhD51Vg9VMhd0aLImhxJwPkdrFszByLhFvrbDL4q9UDJwO30DtYJuTYa+pRQqX1", - "f1Fuyc9BEclvmhuGCdbNKW5ASqNlMt119nVVBavaMVpmFSujdRyRyeAix/CwsUVldaX3jo5Gm0DnlJt8", - "v8N9CqJcMr3Eq6KsqHgJVII8zu15ekQejKni47Jbs4bBZ9MHCx5d+Y6YLmzgwDya8OMkqVIw8dHH47NT", - "X+6RXJmPhHTejyNiJ0Mm+eHh9xHGDvBPuCILNJytQkcJmjguuMA4yRLK+EjDRz22terBvXNKgZg6b/10", - "6eIf/jh9pBPX1HAsfeWUCfzhC6OZt+iGkcwYd6yIIKlIAvDxBPNlmMbEzjN7PL9YraXGSrDxaPB8fDg+", - "dKeWOc3Y4Gjw/fhw/MLd1Ym7cmDTAUYuaI/P5qBD+jDDq718aNBYo7VMAtQOCtw9jV08spZCoWxqE5rD", - "ONSLw0MfBAQbgqmkDx78y7EJt7Y1fKg+EuZJIh41RSkS0ixPSkIzMPphhzOxJ70Cg7/jqmP4H7/E8Kde", - "GXI+DHANhwOVpymVS59F0thZg3Z0jiX+XT6LL6/5Aas4qlX4YtO6FRYyvm30jFT07Jn35T17ht68q6sr", - "888n85/St2e4oPreI+pkMPSvDePwryuPy2QV+9L+fl5pUWTc2Ab25z+vze+iTZE84kbAn402NvfENoB8", - "FAHXkiaj55OBafG5WNLqtdHfcwkrl4ctVqywyLRZsUjX/z9phM7of9rxO5fbaF2uu1xVi+rtwYMaNbpE", - "flD6pbBlR3aC6IGRXJJWAPkvK5c4uwwlH6rCUISvFVZN5HDZIV+GZe251ebcymJAO6etk119HrZE3sEn", - "QwSfLQtLQMMKZmYb1G8Ed8hUuF28o/jKdHvVloqvsI8mfVQyA4/er0rvbOfvYbEJqhf+BMzRwGXa1RF5", - "WNmQpg73oYXkP4Ss0D0yrkJGu7EbIONwjao197phCNUi1gPXfgL90BFtz00fDAL/BHoj7M2ojhYr8Nc6", - "UDbiluQtT1ycrWjhIls+AubdMgHVI5C1/TAwfve6T3eCej/dB4GiNoH3XjN6TLRs8WNDzcid7Rh510tP", - "8eTvzcDoss/48YgWJVRhhLfIZXX+On9fVICOfwIdvsnkHjEuPOAe8zbXyes3yniEK+HrkK281qE4Yr+R", - "+ylwLUSHDypwRPc+ManrRPAel7bzRoU2uoJYJbg3d0cFukaf1HHoTRl2QimoyJVheFdlOu54wl9SBbHP", - "F/PvbZg5g0izGyDXsLTu5XouPgeIVa2vizxaEKqGhM1sV0ckS9MrlyF9Zf7GzqpfujyX2Duwa2OMO701", - "gUPo96O2rLmnokN3edO9GV/PeRM6uL+n8C09OOE7foIk3iU7tvXjhCh9Q2dOkHx6mx0d9xt9426dH+xc", - "73f4EGPhQpOZyHn8EJ1LDVzhtJtOenuX7kQAP4G+G/a/+YLYv2f+e9IKu702kD+b+b3uRFzWiH/Q0uVL", - "qIi1G6I6VMR0nYr4VdxYezbxn8MmnEdtQ02V127sWC2RbV6nwlPtrbs8Usrp3LIMl/MTMueMwVy7E+/e", - "ULt+I1lvrK6B9I1bE6/O2IPyJ+Ag3ZmaFjCtso9/fz7wd9OMvP/S1UfGizA2cQe0yos696nzWJZ8+6oY", - "/arbqG6UwLQe101YdzFIN8P2r7861w4vtoNZd8H5q9v0vVfRxbJfHD7/8pM5cSejHSO383jx5edx7Epa", - "7/0bLf9GB8a3AjLbMbptXR9ddNihoGJsZw3rs3bqw2R9w02uTXOwwAMBhh2hQuJOOr5xqfHvfQLfh6I+", - "fWjh/hTLjvTuYejQF+ihO01fhLIhJnlmr7TBYxCNuPZvOchlOY0oAcrzrBk8b02jvATrPu3rDQ877R2v", - "2zqUNmBMvR1K98BWfgK95yn3yFM+PGSlak+ypaPqnhQJaevz78Bkcj3txmY6t519I0aTX21fq8mD+qGZ", - "TSvW8RXsphWz+bKG04qJ7C2n/paTLHiC53gesNuxvJ0ZT54cd209PRQmuJmq46BxN13nvMbhHoOyszdc", - "vpbhsoovbG+67ICo27bLnqIfr/myhXKzp9wV9stqss1y3TPQfh+Ua0N+e+L9AsT7OIwrl0SwN642N65m", - "ebLnha1sgvuybjY6SdGchGo7b4qhupIOGnihHobL5suQ5P50xx1Od7SQr4L6RV1wB+jND3i06GszzA46", - "Jb8Rb2RvSfnQ3I8PRDT2k4nJ8p69jnt3453cjau50SYSeWd+xl37Fx+XJXM3C2afirH3aD4Wj+Y6RWhb", - "l+ZOXZl75vEYnJZ7qtyNt3KtbdLLXUl3SpNBJ+WeLB+4O3I76+oB+B/3rGRnzr6d2xYHlYMv2zr/XEKZ", - "2jiBK+AFfOmms2dGjyYvc+/L3KEv09PSHbMzC/IuJ73B7Vy+gm/5cWeQcKeWwUk52T39PwL6r+zXnv53", - "k9sQVUlgx6I+qtea73tVX/mVKx1z72ygMs89H3gMfKDYsD0f2BUfqNHAjhlBxrTcgAOcCcb1iPHRJUux", - "irq4AaxkOhNfiCOcmQnvWcEjYAW4U3smsBUTWENru+cD1SNcWxv/vhNkBbv1Uwb8A+d+yntu8Hgyn/ce", - "gl16CGRJAtsl/AGfM74l1btv7+Tqe+3G/xby/exa9wSwCwKAAm9actCCeTP8r2TXbBoXtz3sSMd1c38c", - "Ag38ZB+LJHLQ3RPf3ezSYt+7SW+rozd3p6R6MPsbJ6b7C0J309HDjkHv6X9XIegeLGBz6Xtg1y7k6Kas", - "Ct83TOVqxVfrMYdJjPhRNmA0E34cx8x0SpNkiSUV6hpv5xi3VBEOt8mS5Nlc0hjioixv8bGb+5AwTWii", - "hL/Jc8LLqzwz4DHjc0IjW7daQ+oK7nOwfU6BZCDN6s2CYCYkVApCY5F+NDsjwRWLQUJMMIG8mFiHavLW", - "fe8r9e91k53ypiZ498xpY+b09wrtV1iSh6zqpY8gDahdMYyXlv4cQRrCNc3dKFiChWQSZgmbLzSJFhBd", - "K5LmSteoOKzhYBd1ieZXuld17kll8AB20O++S/zcTgX9n3a3/d53IVVfRWjPEjbTV3CjVkE9xCZ2oLMc", - "FHS9gfYiQeVJmVnTYg0o6Fv8wUv5EtFo54LXCHeP2MXcv0FOMvwUMGY0lXPQhXqphWfidd1Ki47DOPb7", - "Und6WEpHa9v32sfWrCar0E4Xb8lApkwZVNjqPv/K50WwPVcgLX9gikS5lMB1siSJmM8hJoyj9fLs9Uea", - "ZgkcPZvwY6Xy1KLvTCSJuDWM4/zl8QnJRMKi5RDVGdOtIlc0YZFXcKZienU04Vi2PxsSGqeMS5HAkfnP", - "sHIL/5BIoPGQPAu2azLSIXk2JM8O1jT24cpa66mYrmwy4fMhwSU0e3bLmHBD4wbYWK7WQrwBmibQHUw8", - "JD5NOCGTQaXVZHBE3punxP9j/jcZ4HeTwbD6rARa44WBYOPRs8nA/vww7Nl7E9TtDuu/D+4whIf+BmOY", - "fz5M+OdiM45d8dcVwK8iYX/QT8X0/uYdkqvvFMizCrHfIy9vDrVn4Vt5t5GPZrUt81z8ONcL4NpNjEzy", - "w8MXfyLmqZDsd7scy98lKJHLXtVaypxKmtGI6SUy2bLMcdGVV3rKCrib1j4+L2b1JQsgl6PuMXLrKsiy", - "snWdpZAVKO8tXXO7CVMqLy43+Z//vSRaXANHzmoUBluVyJ4xNyjnKgWZT8dWVBYFYpFc0CJZUHdS/SoR", - "c8avEKGnLGF62X0nyoWb8j1Vt1f1xOGOQAWuoZ5cuduYRCbN2jWzXyOsg4aHf2IDJXt66U0vEOWS6eXg", - "6P2HKvV4vH13Sn4xOLkVL1egNePzDRR19Oq7rzzX9lPBYl9JYgsph7j2hR/uHnl0McZG9bY6gFyZ8Iqa", - "W70jOVUgemu7AUPTzOJAiLE4G/u+C/1v7KcPuapXwKwO8U+Dl0AlSIOgZgM+my1AEFivTC6TwdHg4Ob5", - "wLxxfTZhbOC31AvD3SUkeIOQi0FVdIrKzWvOdVGRM23fSHefzXzUSo+tVNWt+i1Txprd+vjuHWZLKkml", - "rvviksK7dFueZXW9+joWG3TqSneUt7/UuiL+qpe+XZalCMuuKgUI+3ZD6xwVtdgaOy0678N726NWCcRH", - "dulU5LqTv5Yj1ojrDshGSkdO0Xf56POHz/8XAAD//2GoXI1SMwEA", + "H4sIAAAAAAAC/+y9fXPbuLU4/FUw6p1pkkqyk93t3PqfjuOkW9/dbDy20zvPjfLUEHkkoSYBLgDa0ab5", + "7r/BAcBXUKJk2bG7amc2Fgni5eC8nwOcL4NIpJngwLUaHH0ZqGgBKcU/X9PoOs8utJB0DuYBjWOmmeA0", + "OZMiA6kZqMHRjCYKhoMYVCRZZt4Pjty3RNmPCeMzIVOKL4eDrPL1lwFNEnEL8S80BZXRyD6s9/YzU5qI", + "GeFFG+K+IlqQXAHRC6bItDboYDhgGlLsTi8zGBwNlJaMzwdfh/4BlZIuze9pHl2DNnMINq9NJ/B+JmQE", + "Z1QvLvQyAbuAGc0TXYDHfTIVIgHKzTe8azAJ8+A4w8Hn0VyMzMORumbZSGR2N0aZYFyDHBxpmUOxui8D", + "4Hk6OPo4UN8NhgP6Wy5h8GnYHjCXSXAiNyDZbHn580VtQWaM9npw3r/mTEJsRsTF1cDqPhkG9ruck5j+", + "CyJtxq4hnzIIYCZRbOh/SZgNjgZ/OCix98Ch7kEdbwObfSKBaqg1O6OS2p63R/LM9AEapGrjeBSBUj/B", + "MgjnR0gB9dEvF0CiRORxsVbb+iASXFPGQRJe2eOHopz6JI8NGCSJYcY4mJmaIXBeBnB6ARVuhD/f/HJh", + "X1veRBZaZ+ro4OA6n4LkoEGNmTiIRaTMOiPItDoQNyBvGNwe3Ap5zfh8dMv0YmTRVh3g7hz8IeZqlNAp", + "JCN8MBgO4DNNswThfatGMdyEQHV3ulcQSdBdaPY4uUJJGtX5b8gt3lBNp1TBSZIrBEgTORoNCFOIAhfI", + "MgwC4M/YtYpsK0WOz07HbWLO2D9AKrdXDSQ8O3XvHCLacW7sM4OWdkTESKaIhEyCAq5RNprHlBO7rvGE", + "X4A0XxK1EHkSk0jwG5CaSIjEnLPfiu6UYQJmnIRqUJogVnCakBua5DAklMcTntIlkWB6JjmvdIFt1HjC", + "3wlpJfVRQQpzpsfX/410EIk0zTnTSyR6yaa5FlIdxHADyYFi8xGV0YJpiHQu4YBmbITT5WZdapzGf5Cg", + "RC4jpIcWUl0zHreh+RPjsdkq6qkZ51oCzTwyyz5/e3FJfP8WsBaGZVNVAaeBBOMzkLbpTIoUuwEeI0Xh", + "jyhhwDVR+TRl2mzUrzkobSA9nvATyrnQZAokz2KqIR5P+CknJzSF5IQquH9oGgiqkQFbEJ4paGqwuULB", + "JbWoDKK1JHKRQVTD4RiUoWOiNNXIUhsfjMOa3Qeu6AxOBJ+xeS6pDpNNR0syY5DEhrGjnAOucmk2mNo9", + "QoYfUU4ilOiGQMpvFcn5jGkk7kyKOI+wx1zBeBCSKlZ2tufmpLzjGF7CZhCxGYvCKi1wOk0ggNBv7QuL", + "07OEzu2qzEPXswrOLWM6wNTOTi/P/bxqS/cCz2KzEXcsBWQbNyCXrelOq5pQWAN43Wzix63K11ojcrsA", + "3Csgfp4eLAF83Qpipt8guPIsETQ+NVzwhiYXIWz/0GxCeJ5OQZq1KIgEjxWZgr4FsMrClPFEzBWxXVd2", + "yfDaOciWrPMrCokrw7XjPAkpehf+lV1x4vQ+j3bFhxXVLrhTrmETbf3jGrqMHwgjTs4t6Va4yoR7pSwR", + "BTHtBjtQ43PrHfRXI7uW0u6qqrlpy5pPRMZCu3peb1D0X6Cc25/IvtaCSDCK9QAV5JRqi2jfvQrgXYlO", + "3dhUcAkp+IqVNFC4jQXlVgy9Mlf0FkL0upGxAYUY2XWB4jwsqOy7ApMoqm7EKQCG40+F0EpLmhkdgRIO", + "t8RpdV3I3jHa68rbJjU5fcPslkFjQFXigYgJZSKu1MqNcQgxM6oXAblB9cIPYFp47dEta8YSOIiZhEgL", + "uRxvhSY4cHBjp05dsKsJg+PN61ajEEDevPZ76qfe3oo2SNaKUpSaI8ZHNalZZ5mtTTZaYBBVi5l/uDwx", + "WOrwBTs1yiQxxrUxgjJtNzSl+ohMBq8OD/88Onw5Onx1+fKHo8Pvjw5/+L/JILjL3rArjDE7m6a74nKZ", + "FZMxnxgw+tWNkbStXeg+trZEwDT82trWr4GNBj5nHEIs2zz38/AWF7HN1+hVdgvafVqd0ffpumruVwts", + "kew0407OvRXH6sqvM+Q8BhqJZt0vt8zQkRFoOY9BJkvDd8zcqRbSWAczknO3OoiHBG7AYOrINyG3LEmc", + "IweIMljux6J2CpXOzP9/eX/59oh8MOaHNYOYIg5aS5IJtAKVpkliNUJj8yRAUY2mSCRUar+MqNTgA7It", + "S1hEg0LNvmlLM7cDxacBKZYyzlKDby9DEq20FQOjuleEOvWyMPwShqaaYYpAo0VjGnYTjNmmQA9bX5ne", + "zEuWZkKhgGvgXpajTcOX72eDo49f2rNu+Uo+NSnw5OyDB5b5s5iC46YpOuGReRr7fXA0+P+fTSZ/+vfo", + "+V+fPft4OPrLpz89m0zG+NeL5399/u/i15+eP3/27ONP7368PHv7iT3/90eep9f217+ffYS3n/r38/z5", + "X/8LXU6lG2xk+KGQI7cu721KIRVyeWegvMNuPFxsp08bNCF2qMowSkNF807JGvPyWvFqoRMlVAVI5MQ8", + "9h0WPeFDx628wyszLEYZ3ZTciCRPsRkLyk3FfoM77/UF+61YqemwMFQ75/FUNryqECGoutXhLyvkstt+", + "5/z0Ejn7HBlQCKXnEtSvifmh0nga9tsqkBfoSFVh7epDvUHQ2MHXxLn3vZsN3S32VdDpdNMlThvC1C3S", + "N1+nX5bRDGwXAmwqONPC7khz8HfFu4LHlE9W01fZ0GoYYXi+C7RqApWSZl/k5LxD3vYQfd7uqQsx5/by", + "xF2OOA5xDpaGWQdLFbodygUoqym6wYdFiIVx1NfG/pX9eDjhaOUbgYpGynRptZMiWOQ0mEvz0FjunNAk", + "W1Dn7KM89lzfuYwc/k34myWnKYs8HI4T7zQgM6A6l0DmVEO1e9ulGSdNc23szTE51egzFDxZkqnBdesj", + "LKaHplSHd+W8ulQiYQYSuNkRwQ1eayPIODkT8YUBTK21au/CCg9EmitNUqqjRQ2PasNkIh4HNoCImdkC", + "MNMovHBVWJhdQTCk9BrdMFSXmERvKEsMoCacccViILSyc2uJFZe01hXQ4KkG3UYpzUbXsFTVXtqtXDcp", + "zUynVnfrDttuLK6eiOrVDA6jBmsfTp27PqWfjYJNaCpyjpp+JNIs16W+XISQw9GKVWHQGts8SCmncxgV", + "/Y5KUjoYBFDBx1J+7/t27mNKjZ2zptHKnfMkZ42aoiOmiEiZdp6EKuUOCUPHK80TDGIRhzRsZumfKQKf", + "jZ3EdLIkpaE64UIvQN4yhY4Lyo2BlKA+jps/8sIAQ3PjciqRDZHB5wggdqM9LKL181Nk1LDDkJMMhVfN", + "s6y0yKoGczhWI8XnZaA/87hwMeGPmrNjTKrWqZGJmREWklENEx74wHoMpmAaJsztuOl8zm6AOyVrTI4n", + "PBJpaiNfJKJO+1egS79BIRm0QIyRIrECFz67QLKN0ntHYeG1ibpCf/08NXZVax018NmY5AFXEj6vd2bb", + "rtHrmPPnnlM+Dylap2fV934AH4s5PfOeX2nfPzs5fXNu9g5Hez7hhlAMa/Vgm0mR1vdXo1hminBR1d26", + "FY/alCphbTMbGscSlDIz5aQ2F4KOJb0QuUYnuE6pul7hQyzTgdo+RZ9UsNKv6MBvvh6iljWFMhtBSOIR", + "qmLcVPot3vZxOm7nmrJY8q09U7VZ7B1Te8fUt3NMrfdJWGRtuCRSwefCLHxBrcBzgs95J+ZTkfMIZN/w", + "QT0uiJGDYOBcU52r9bkr2KyWvSKmCuTNZukrkWY3cNHluDuuvm5626zuwIv41DP016DN+fyusYhiKe1g", + "BA7rQxEkFIkIDb4QSodN0b+7N35o37KS3OFX6Ji9NPwtnOORglJBSL6zL6wOqiWtposTOjXCK6h0VYJ6", + "QuqAyiWkLoN6UveZdY9wuwQaL0Psn8bLtsDB1sZUV317N+oa8BjiYudDg7Vb+bErPXTGq6zM8aqIec4B", + "YlTwyqQ2q+4xVfQyhZlR3/NsLmnsvYKtIFelU6M9JxYCLmUrMLnxKndzt/9YC02TqmTvDeIuLuLYRkHK", + "+KseIhtsGQ1tMJvXHblmwWb9klVdGsC3TVklO8xYJWsSVsl/eL4q2VW6Kmlnq5Jasip56rmqLjNm04xV", + "+9n4MSXsFOkxaxJjqkMKyebM0E7TLMfJbJe/U5/HHVQxD4PNFbKu3YlEmiWgQz6bE/+qkBHM6io2h/Nf", + "YkpuqSJFD+OqvDCUgSk/Yf0MaHhI+6I6oNI0zTwO5JnSEmjqdv2PyuYqO7HXb/AYlGa8I3X6TfnST2KW", + "J0kgsSuIcHOaBTbxR5opwmJDwzPMV5w5jwXFGEtmttIQvFVyixzfRMzD+cu4x2GBW6Cx3/7iVBXVPZAX", + "5/9pexnsT5b1QGI8g2XjVY5bo+fU+SDrPiLrC2EKWX6LLiscYC+n71VOF960XicHw1pawDu2F/8PIv57", + "UPGJ38UTHwow/YTDrKFYu6ZSVw9I1s0E6Xh+2zwppF8PP2XXlAOMt0RKIiFByYKwqWByy9HuIiDbYnkA", + "ggGMXwFDZw0/BHRLd9U6sFcPTdq5d25DaLnNthJQGNKkvWWlz40UY9f3KKNK3QqJay1Pgkoh9KAjf8dD", + "e13rHtjWS8DtTLTtZdojl2l7afaYpdlZ8HBCx4GEhoBoHEGkMmGg9BuneJec5NXhq+9GL1+Nvnt5+eq7", + "ox/+cvTDX/6vtykSNhcYj1lkiKluKGRMS7QJGiYDnWm//+7chrHKNL0GHrQeLJ3WD4y0ZmYb7XS5PTbs", + "3J42WctgXbt+rjx3hGXvy9v78n5/vjxHKRs789x349DJrLsdJbTkuPqk7P7w4P7w4P7w4M4OD27kBq9y", + "iarnu7Kh6/GwwiV26P32zGwL93cnP6v5v/tpbZXIe9DWhmAyk595Ld2smG6DK+4iKurG7GWxVtruxifr", + "la69wvW4DVivce/t2Mdox77tOPVdf7/GDLIJYHvzZ2/+/I7MH0sZaPZYsJu/7CGOxiUJ464rVB3u11nr", + "Bpne7WsaUOtTmvK4PFao8iwT0jueKvNSY3LO5gtNuLglTP9R2SN22ecIaQAzIMfk7+IWbtx5FJd9l6kh", + "yebYiPIlwQMnzj5ar7h1ngldp6I5gG+imr3tgr8/M1fdgeARWKNAybxGHeWJO8+oMOmseTNGKRm7jNBV", + "x6naeRLYV6koVVMuna7UOYNxARDytvHKb2nj22H5wGYTG1wSIlGEpfbqVL0IaLqSaRbR6jWUFa8gfvl3", + "qhZBLMe3Z86CvVv4bsXVJntwPwC4iwNVnWcF97tw/7vQfmCWst+Wx7UtoSY+QfsDpm0HZP37eoO69VxP", + "gy6uK7I54DAuj/Er0Fbg2xgQuXJXHI0zkJHgdByJ9MB9Vlx7NNLiiqBOV2SwObnY3gJ3n9FZQvm5MRdb", + "R+Rq760WVZzQ90p6pZFXVF1uX6HgtNa4ybl9Byc3rt78xGuvG6bxnwm/fP/m/RE5jmOnM+UKZnlij3Oq", + "MSlNpSExKuuQ5Cz+aw9nTeMoUUozf+6eapGyaJ1PKVvQ0HlNh19n5m1VAUK/KT7swrLgCQGbQHKs+/vB", + "NJVz0J3m42X1tbdR/dkHLcjtgrnrGIoJOuNw6g9F2JzSHoTse6hMpg1G4DHj8wZ51tX7DSg5fKpmPbbv", + "6e4x0d0jwuGmJdllcZWWVtiV7GQ644SS6/9WK66j28ytbMdd7U4u29zNjexN4L2/6nF6j51jcu81frxe", + "44bw2qoky5uGndCUKauKtKzjrFsw0lrpj8Pxy1fjw/UOrdo0Qp6tt1KKQBgaHxtczARX0L7MrFNhC23N", + "T4UYcnGXUz4TK5NffSDNIF/gvjF8eRnO3i2uR8SbC7HWRy2J6+Ngnr0aDAfz7DsDkL6+zQZgq3MIjfip", + "DxjOu+9/CMCiysg6XIaBlO4sf8eShFWXaI+5VrOaB0eDnHH95+8xXs7U9YU7MdvvC3udweulht7D9Mmx", + "LsBzXKzv63AQ0YxGTC//Q9d64pfXwjj/YljZ7xCalVcIop7MbS4RTRJ3e8UqCdf+9jVV8L9MLzB7IXCv", + "ReVCRPdFo0Bby79uqwGFqvG4kwGfgot4HTQD149/XwXi0vbIG9XIalZQytK0neLSv1yTq7CUMv4z8Lle", + "VK+c2bizRlmmRuzBvvJumrKUyuXPFwcXFz8T/NrfRDUIFnLqgbQ1xLsjAuMVLX3Mv6dR9ytL01EF53ax", + "5+092YLUe+yqPeJaUcd2wpaGm35+9u5dzxW6akD3w9PMNFpizDCC1kOaMVeKrVL+LWPXWN5sN0QfPllU", + "PL0Da1L2IF1l5nHK+GBnuBqQp2fv3rXBfZFB1Jf94GX4O0LUe0VQa7vVEDS4oM3qXgaUiIAMK/C81fda", + "8ff+9M3JScfFfm+ts5+YNiST4obFINdeX24M3dOA9Y294L2G7q5D1/RN0CGgVA7yw/nPHf0Us7H0vtr6", + "KuZU7TeksjWtVQmzhM0XekOD9X3LQPUdkWgB0bUxIfJEtw2IKJcS+Gpz1bUpLdTOK7dtxR1jOfd3rXRB", + "4G9CejM8aJP1BmW1o/uBaiPBZgObedjDGd3MMQ1mlFsf/yVV14HEcvuSaKquW1lylV69PmrP4g4HXOhz", + "96c7hGuknQXF2+btaqu8AO/bUYptdsG7TZ4KRrspnJjpbo3NXZ3sAoYecRXj8wT+g/DXIms/5LywV9iq", + "bmE0T8SUJv6u2zbGCRZHpUBbiRml6GtKjEonITlhlZJ9senHWWy6ncrRVYV5bXnlXvWS+9jVH1T1woHA", + "nQ9VrX/l9QE9iMgMdgYyZapIXGwMVn/Zjr709JqsYpmdLN8Tsmd+Qd/yLE+SE5GmTN+ldnYmhZlO+Hzx", + "Rm4Ydacq3g3uUp1W2fuwuugQ12ECQz40YymNFoZoluPsem4eqHEKmo5vXo4Nnb8DG61pcwDzpnIzvQ/t", + "2MioWnK9AM2iyp30WLJiQW9gSBiPkhxZv60kQnlMbqhkIldFQpH1nYzJcRk+S+kSO7B5RIKjJPryHlua", + "6QyJn9jX4JXjmvEcQpeq2DfYv6v44ZKUXEkbjaVWU6aJ4I37OxHPiQSdSw6xDY+W592LUsSYMizJgiqS", + "CmmlXJnZaw/q2RAiU0Rk9NccikjrFIoKx2hzEGov3fehPx+wrUQJzRbYJGVkxRibtlVDJYMbe8cph8/a", + "ZmXNKjnGBdxPLFRsfcxIcF+ACfsy03KBxkwoxcyXbFZdab3gsFl3tKB8DjER0oJALygnlMzglqSM5wZc", + "uLmGfUFsQeK33ofB7U30Htr26rZcFRfVFztpQelvwLc3lUU08ZBykLZ7OWNS6SIuNiQ5T0ApshS5nY+E", + "CFgBSi2ugdvILOUEMKbm1KiOej2pLZF0qiE9ETkPJBu027TviVX5VJntNu8Q5dzscTtssLG4CRypy9+9", + "5rffLxAvmi++9CjkhWdM0ENpNsnCWkGCZ3UVXtrKW7fXupn7SSmS82subjlirwWv6cZvRQIzbS+BxQa+", + "GkWcowdEgWQ0Yb+VFQ+KibLyXj7yDBji/xQiatQNpu1V+cZ6y/k1XmhcvtUuAdHmNCjX6Hm5HncdBRcW", + "L5trsgspyiBstRIf4BdJjMF9ysnNy/HLH0gs/M3ulTEs7huuj/fg5qqSvxTClBegNEux0OOLWu00Q7iJ", + "2T+cxAn6LooMEDOuBGSkXX3b636RR0j3Az7TSI8bF+n++fvBqsvwO+X3hXXG2woj5XWCJRv5o6rkn1Tv", + "Ki7zKGwmjk3l9fWkIrdSLfBWEZky7u55dOzNUrbjSGPyD+QHKKCmQLRLPKMFJ650iUdVkEORnKcixjIo", + "qOt65mJnPiZnIsvtDSxY4QqIWioN6ZgY23tkRNi9p2NEgluLOFqOXOGOEeXxqGDn0TKYOgnJ7GfGAxab", + "f2NTXz6c/9zMeCn2pdf6J3zC37w9O397cnz59g0po+mWyrCeipHidE5b1Ug4eTl+dWgwGIy1WGc3TJEs", + "oZxbqYk3eKfiBvxnL/1nPTPZeqlL9qjQieE5XXdH40vvcHSaQDvtEou7MNcfmVGW5LKmNEVUGRAZfE7z", + "RLMsASuJbDUI4JGhXpA2U6+hDRv4hK0qC7qC0xQ5S1Rb+W0r3uAe4GhDQyHGlsAdZlqR/7l4/0uT9b3D", + "nCaUSCQWlllmQukZ+1zWITHGPweFVKctpoPR/YxNYBf1G0gxYjyGz4Zgyd8wlxL1EJplQKs6hbBhLISj", + "6QBLJJnJKxLnmHFqMzENEzDgbMBwTN471Rvx860NcaijCSdkgm6RyYCMKshWPHSM1DuhPAjthyhMPh5+", + "GvfowaokdvJFOTfXxWSw0eX5x2SRp5SPJNAYFbzK6+LycloRMQiEMSGV+nhOCXWEjpxxZKsBUby/vrM0", + "MFXBtEbiqGjjSZ061l9oypBmelmrllMjp0K/3jmZvwFNWaL+efOqi9ZdC5ck6NTswp9DSqq0FPbu+P/z", + "stazS6tIa+EZRvXzANeoaHiGms8R+iVRU3JRtayKjNJbLMZYEF2h3yjQpcqAopHNOV5+YokHZ+3Ul7IQ", + "oQ+z+ztAsJxN0bs1j5z+QZXKU8dfKF+WrTy+4eYavndDExYPjQ6CJSv8IAEbD6k8zN1OLAewROUYkjfG", + "3FZRpUTEUGQVRTIs0DwwLS8ek18MI0uS2lvLjfxe2T4hdpynVjNylSdxY1ET8KjMpQhVDzBQwFcVUDe5", + "fQgEziKvrnXc/6S4GdW82cGg5D0nSqQ+pZJ5mMdsNgNZpss6owbicoifGI+/dfYr7/RnYrrJneFDnt2W", + "Fo1lO9b/70qyGBvRn3lzfpv4eQfn1nJ5PNNYCFiY5bRPdcwqVQDLy9QZJ8p+4quBlCmwhleVObDWFxGP", + "yYXZUae+2ARo6z2pJjsj/9H0Gmw1WLQINBCKlg0ZueCBUEVHui69ij4X4pYkgmO5vlvKdDFLeu1Ttpvd", + "j/tVDclZAPk/nL5p7ua4c5uK/e7aqib+hpOScgVyNM9ZDAeFTSXVH3IWwso7isEV8s8f9NG55E5gYxld", + "miSF8OB/1L6F9Wh579P+mMR9H5OIROio50U+n1vO+ffLyzO/N6atIzHmHbRDckhYUZauJ404QbtDGVjR", + "w/ZnNXZ8VuMOFkX1VDA6tKHzKrD6qZA7o0URtLiTAXK7WDZmjkXCrXU2GfzN6oGTgVvoHSwTcuw19Sih", + "0vq/KLfk56CI5DfNDcME6+YUNyCl0TKZ7jr7uqqCVe0YLbOKldE6jshkcJFjeNjYorK60ntHR6NNoHPK", + "Tb7f4T4FUS6ZXuJVUVZUvAYqQR7n9jw9Ig/GVPFx2a1Zw+Cr6YMFj678gZgubODAPJrw4ySpUjDx0cfj", + "s1Nf7pFcmY+EdN6PI2InQyb54eF3EcYO8E+4Igs0nK1CRwmaOC64wDjJEsr4SMNnPba16sG9c0qBmDpv", + "/XTp4h/+OH2kE9fUcCx95ZQJ/OELo5m36IaRzBh3rIggqUgC8PEE82WYxsTOM3s8v1itpcZKsPFo8HJ8", + "OD50p5Y5zdjgaPDd+HD8yt3VibtyYNMBRi5oj8/moEP6MMOrvXxo0FijtUwC1A4K3D2NXTyylkKhbGoT", + "msM41KvDQx8EBBuCqaQPHvzLsQm3tjV8qD4S5kkiHjVFKRLSLE9KQjMw+n6HM7EnvQKDf+CqY/gfHmL4", + "U68MOR8GuIbDgcrTlMqlzyJp7KxBOzrHEv8un8WX1/yEVRzVKnyxad0KCxnfNnpGKnrxwvvyXrxAb97V", + "1ZX554v5T+nbM1xQfecRdTIY+teGcfjXlcdlsop9aX+/rLQoMm5sA/vzn9fmd9GmSB5xI+DPRhube2Ib", + "QD6KgGtJk9HLycC0+FosafXa6G+5hJXLwxYrVlhk2qxYpOv/nzRCZ/Q/7fidy220LtddrqpF9fbgQY0a", + "XSI/KP1a2LIjO0H0wEguSSuA/JeVS5xdhpIPVWEowtcKqyZyuOyQh2FZe261ObeyGNDOaVvBrj6PnEge", + "eZvCn2RoisKvw5Z4PPhi2n617C4BDSsYn21Qvz3cIV7hovFO5SvT7VVbgr7BPpq0VMkiPPq4KhW0neuH", + "hSmoXvjTMkcDl5VXR/phZfOa+t6nFkF8H7JY94i7CnHtxm6EuKvVsrnXI0OoFrEeuPYj6MeOaHvO+2gQ", + "+EfQG2FvRnW0WIG/1tmyEbck73niYnJFCxcF89Ey78IJqCmBDO/HgfG715O6k9n76UkIFLUJvPda1FOi", + "ZYsf96hFuTMjI+/S6SnK/H0cGLX2mUQeKaOEKowcFzmyzg/o76EK0PyPoMM3pNwjdoYH3GPp5rp+/aYa", + "j5wlfAefzAcH5XURxdH9jdxagesmOnxbgaO/94lJXSeN97i0nZcrtNEVxCrBvbmbK9A1+rqOQ2/KcBZK", + "TEWuDMO7KtN8xxP+miqIfR6af2/D1xlEmt0AuYaldVvXc/w5QKxqfV3k0YJQNSRsZrs6IlmaXrnM6yvz", + "N3ZW/dLlz8TeMV4bY9zpBQocbr8fFWfN/Rcdes677s34dk6h0IUAewrf0jMUvjuog8S7lZqgTOkSNts6", + "iUKsYUNPUZDeets0HRct/c59Rt/bud7v8CFOxIUmM5Hz+DF6rhq4wukqwuqp79+JAH4EfTfsf/eA2L+X", + "FnvSCvvUNhJYmzjV7kRc1kPwqKXLQ+iUtauqOnTKdJ1O+U18ZHs28Z/DJpy77r5VW167a2S1CLcZqQrP", + "47duIUkpp3PLY1y2UshgNCZ57Ta/e6OF+l1qvcmgtgfv3Jp4dcYe9j8CB+lOAzmnVNnOWgf499cDf6vO", + "yHtIXWVnvMJjE4dDqzCqc+Y6n2jJ6K+K0a+6zfZG8U7r/92E1xeDdHN4//qbs/nwYju4execv7nXoPcq", + "unj8q8OXDz+ZE3em23F+O49XDz+PY1eMe+9BaXlQOjC+FR5aI2Y6Od0W3HFbB0sX8XaowRhyWsMvrTX8", + "OPnlcJNb4hws8PyD4WGo9riDne/cSYCPPl/xU1GOP7Rwf2hnR9r9MHTGDfTQXR5QROMhJnlmb/DBUx+N", + "0PyvOchlOY0oAcrzrBn/b02jvPPrPq34Dc927f3B27qtNuJmPd1W98BWfgS95yn3yFM+PWZNbE+ypTvs", + "MWkfpmchYQfGmetpN9bZue3sd2Ke+dX2tc88qB+bgbZiHd/AQlsxm4c10VZMZG+j9bfRZMETPJv0gN2Q", + "TxY8bxtGuTM7zRPxrg21x8I6N9OqHDTuplad1/jiU9Cr9jbSt7KRVnOTba2kHRB120zaU/TTtZS2UIn2", + "lLvCVFpNtlmue2YO3Afl2hjmnngfgHifhknmsiL2JtnmJtksT/a8sJUe8bhsoo1OoDSnrtqOomKorlSK", + "Bjapx+EeehhC3p+KucOpmBbyVQimqNPuAL35wZgWVW6G2UEH6O/E89lbvj42V+cjEaj9JGmyvGcP5961", + "eSfX5jpu1F+Obya/d+bL3LUP82lZS3ezkvaZJXuv6VPxmq5jVNu6TXfqLt0zj6fgGN1T5W48omstmV4u", + "UbpTmgw6Qvdk+chdntvZYo/Ax7lnJTtzKH5jS+SgclRoW8eiy6ZTGyeiBTyMr9109qzrySSl7v2kO/ST", + "elq6a2rqdsygXOIG96v52s7lx51Bzp1aHSflZPfc4glwi8p+7bnFbnIzoioJfFM1IpKA5ahosgnrqHzl", + "ShDdO9OozHPPNZ4C1yg2bM81dsU1ajTwTdlGxrTcgF+cCcb1iPHRJUuxdr+4AayfOxMPxD/OzIT3jOMJ", + "MA7cqT3L2IplrKG1b801qkfotnZa+E6QcezWGxvwa5z7Ke95x9PJId97Nnbp2ZAlCdwtdbIf0wA+Z3xL", + "HuG+vZND860b//eQMWnXuieXXZALFHjTkrEWzH2pxXe0AbFU0pM2TSywPexI2XYLfRqyEvxkn4qQc9Dd", + "U+rdzOli31fR6Rbno+5OSfVsgN85Md1fFL+bjh53EH9P/7uK4fdiAfcqqg8soIQcFRWb+wfu7Be12uVh", + "eiR+lA240oQfxzEzndIkWWKZkLou3TnGLVWEw22yJHk2lzSGuChhXXzs5j4kTBOaKOHvjp3w8vLYDHjM", + "+JzQyNZ415CahVONNUl8SRKQZvVmQTATEirF04X0FbkjwRWLQUJMMLm/mFiHHvPeff8Ptyd7RWanjKwJ", + "3j0n25iT/aNC+xX+5SGreikvSANqVwzjtaU/R5CGcE1zNwqWFSKZhFnC5gtNogVE14qkudI1Kg6rQ9hF", + "Xfz5le71onvSLzyAHfS7r7s/t1NBP6zdbb/3XUjVV2vas4TNlBvcqFVQD7OJh1VwDgomsIGqI0HlSZmY", + "1OIjqBW0mIlXCUqspJ3QWaMJeCoo5v47ZDvDLwEzSVM5B13oolp4jl9XxLToOCdlvy8VrcelobS2fa+q", + "bM2Xsgrt7IQRZSBTpgzebFWbovJ5kXyQK5CWmTBFolxK4DpZkkTM5xATxtEuevH2M02zBI5eTPixUnlq", + "cX0mkkTcGi5z/vr4hGQiYdFyiIqS6VaRK5qwyKtOUzG9Oprwq6urCc+GhMYp41IkcGT+M6xUlBgSCTQe", + "khfBdk3ADMmLIXlxsKaxD8TUWk/FdGWTCZ8PCS6h2bNbxoQbhmCAjYWgLcQboGkC3cHEQ+LLhBMyGVRa", + "TQZH5KN5Svw/5n+TAX43GQyrz0qgNV4YCDYevZgM7M9Pw569N0Hd7rD+++AOQ3jobzCG+efThH8tNuPY", + "lUpeAfwqEvYH/VRM72/eISH8QYE8qxD7PTL+5lB7fr+Vkx35aFbbMs/yj3O9AK7dxMgkPzx89WdingrJ", + "frPLsdVyvBDYKCOVZjRieolMtiwKXnTlNaSyXvSmlcLPi1k9ZLnwctQ9Rm5dM1xWtq6zcLgC5f2wa+60", + "YUrlxZU2//O/l0SLa+DIWY3CYEty2bsCDMq5qlfm07EVlUU5ZSQXNF8W1N04cJWIOeNXiNBTljC97L4J", + "58JN+X7cAoYlVtOuO+IluIZ6aupuQyOZNGvXzH6NsA5aKf6Jjdfs6aU3vUCUS6aXg6OPn6rU4/H2wyn5", + "2eDkVrxcgdaMzzdQ1DFe4L7yXNtPBUvUJYktOx7i2hd+uHvk0cUYG9WO6wByZcIr6sf1jhFVgehN8wYM", + "TTOLAyHG4gzyU+tevjcYbhwBCDnBV8CsDvEvg9dAJUiDoGYDvpotQBBYF04uk8HR4ODm5cC8cX02YWzg", + "t9QLw90lJHhvlItuVXSKyn17zoKtyJm2I6W7z2Z+bqXHVuruVv2WaW7Nbn2Y+Q6zJZW0Wdd9caHlXbot", + "Txm7Xn15lQ06dRVlylt8al0Rf2VP3y7LApplV5Xqm327oXWOilpsjZ0Wnffhve1RqwTiY8Z0KnLdyV/L", + "EWvEdQdkI6XXp+i7fPT109f/FwAA//+pnBBM2DYBAA==", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/docs/spec/openapi.yml b/docs/spec/openapi.yml index b0a866540..ef5d7d6d2 100644 --- a/docs/spec/openapi.yml +++ b/docs/spec/openapi.yml @@ -251,6 +251,7 @@ paths: schema: $ref: '#/components/schemas/Error' '/namespaces/{namespace}/database-clusters': + x-everest-resource-name: database-clusters post: tags: - Database Cluster @@ -337,6 +338,7 @@ paths: schema: $ref: '#/components/schemas/Error' '/namespaces/{namespace}/database-clusters/{name}': + x-everest-resource-name: database-clusters get: tags: - Database Cluster @@ -467,6 +469,7 @@ paths: schema: $ref: '#/components/schemas/Error' '/namespaces/{namespace}/database-clusters/{name}/backups': + x-everest-resource-name: database-clusters get: tags: - Backup @@ -507,6 +510,7 @@ paths: schema: $ref: '#/components/schemas/Error' '/namespaces/{namespace}/database-clusters/{name}/restores': + x-everest-resource-name: database-clusters get: tags: - Restore @@ -547,6 +551,7 @@ paths: schema: $ref: '#/components/schemas/Error' '/namespaces/{namespace}/database-clusters/{name}/credentials': + x-everest-resource-name: database-clusters get: tags: - Database Cluster @@ -587,6 +592,7 @@ paths: schema: $ref: '#/components/schemas/Error' '/namespaces/{namespace}/database-clusters/{name}/pitr': + x-everest-resource-name: database-clusters get: tags: - Database Cluster @@ -627,6 +633,7 @@ paths: schema: $ref: '#/components/schemas/Error' '/namespaces/{namespace}/database-clusters/{name}/components': + x-everest-resource-name: database-clusters get: tags: - Database Cluster @@ -667,6 +674,7 @@ paths: schema: $ref: '#/components/schemas/Error' '/namespaces/{namespace}/database-engines': + x-everest-resource-name: database-engines get: tags: - Database Engine @@ -701,6 +709,7 @@ paths: schema: $ref: '#/components/schemas/Error' '/namespaces/{namespace}/database-engines/{name}': + x-everest-resource-name: database-engines get: tags: - Database Engine @@ -787,6 +796,7 @@ paths: schema: $ref: '#/components/schemas/Error' '/namespaces/{namespace}/database-engines/{name}/operator-version/preflight': + x-everest-resource-name: database-engines get: tags: - Operators @@ -833,6 +843,7 @@ paths: schema: $ref: '#/components/schemas/Error' '/namespaces/{namespace}/database-engines/{name}/operator-version': + x-everest-resource-name: database-engines get: tags: - Operators @@ -919,6 +930,7 @@ paths: schema: $ref: '#/components/schemas/Error' '/namespaces/{namespace}/database-cluster-restores': + x-everest-resource-name: database-cluster-restores post: tags: - Restore @@ -972,6 +984,7 @@ paths: schema: $ref: '#/components/schemas/DatabaseClusterRestore' '/namespaces/{namespace}/database-cluster-restores/{name}': + x-everest-resource-name: database-cluster-restores get: tags: - Restore @@ -1103,6 +1116,7 @@ paths: schema: $ref: '#/components/schemas/Error' '/namespaces/{namespace}/database-cluster-backups': + x-everest-resource-name: database-cluster-backups post: tags: - Backup @@ -1156,6 +1170,7 @@ paths: schema: $ref: '#/components/schemas/DatabaseClusterBackup' '/namespaces/{namespace}/database-cluster-backups/{name}': + x-everest-resource-name: database-cluster-backups get: tags: - Backup @@ -1241,6 +1256,7 @@ paths: schema: $ref: '#/components/schemas/Error' '/backup-storages': + x-everest-resource-name: backup-storages post: tags: - Backup Storage @@ -1322,6 +1338,7 @@ paths: schema: $ref: '#/components/schemas/Error' '/backup-storages/{name}': + x-everest-resource-name: backup-storages get: tags: - Backup Storage @@ -1423,6 +1440,7 @@ paths: schema: $ref: '#/components/schemas/Error' '/monitoring-instances': + x-everest-resource-name: monitoring-instances post: tags: - Monitoring @@ -1486,6 +1504,7 @@ paths: schema: $ref: '#/components/schemas/Error' '/monitoring-instances/{name}': + x-everest-resource-name: monitoring-instances get: tags: - Monitoring diff --git a/pkg/common/constants.go b/pkg/common/constants.go index e5f4ea9ce..619daa54f 100644 --- a/pkg/common/constants.go +++ b/pkg/common/constants.go @@ -62,6 +62,10 @@ const ( KubernetesManagedByLabel = "app.kubernetes.io/managed-by" // ForegroundDeletionFinalizer is the finalizer used to delete resources in foreground. ForegroundDeletionFinalizer = "foregroundDeletion" + + // EverestAPIExtnResourceName is the name of the Everest API extension header + // that holds the name of the resource being served by an API endpoint. + EverestAPIExtnResourceName = "x-everest-resource-name" ) // InitialPasswordWarningMessage is the message that is shown to the user after the installation/upgrade,