diff --git a/controller/internal/routes/a_routes-packr.go b/controller/internal/routes/a_routes-packr.go new file mode 100644 index 000000000..c5bed8942 --- /dev/null +++ b/controller/internal/routes/a_routes-packr.go @@ -0,0 +1,11 @@ +// Code generated by github.com/gobuffalo/packr. DO NOT EDIT. + +package routes + +import "github.com/gobuffalo/packr" + +// You can use the "packr clean" command to clean up this, +// and any other packr generated files. +func init() { + _ = packr.PackJSONBytes("../../../specs", "swagger.yml", "\"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\"") +} diff --git a/controller/internal/routes/spec_router.go b/controller/internal/routes/spec_router.go new file mode 100644 index 000000000..4caa15083 --- /dev/null +++ b/controller/internal/routes/spec_router.go @@ -0,0 +1,153 @@ +/* + Copyright NetFoundry, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package routes + +import ( + "fmt" + "github.com/gobuffalo/packr" + "github.com/netfoundry/ziti-edge/controller/env" + "github.com/netfoundry/ziti-edge/controller/internal/permissions" + "github.com/netfoundry/ziti-edge/controller/response" + "io/ioutil" + "net/http" + "time" +) + +var specBox packr.Box + +func init() { + specBox = packr.NewBox("../../../specs") + + swagger, err := specBox.Open("swagger.yml") + + if err != nil { + panic(err) + } + + swaggerBody, err := ioutil.ReadAll(swagger) + + if err != nil { + panic(err) + } + + swaggerEntity = newSpec(SwaggerId, "Swagger/OpenApi 2.0", swaggerBody) + + specEntityList = []*specList{ + swaggerEntity, + } + + r := NewSpecRouter() + env.AddRouter(r) + +} + +const ( + EntityNameSpec = "specs" + EntityNameSpecBody = "spec" + SwaggerId = "swagger" +) + +var swaggerEntity *specList +var specEntityList []*specList + +type SpecRouter struct { + BasePath string + IdType response.IdType +} + +func NewSpecRouter() *SpecRouter { + return &SpecRouter{ + BasePath: "/" + EntityNameSpec, + IdType: response.IdTypeString, + } +} + +func (ir *SpecRouter) Register(ae *env.AppEnv) { + route := registerReadOnlyRouter(ae, ae.RootRouter, ir.BasePath, ir, permissions.Always()) + + specBodyUrl := fmt.Sprintf("/{%s}/%s", response.IdPropertyName, EntityNameSpecBody) + detailSpecBodyHandler := ae.WrapHandler(ir.DetailSpecBody, permissions.Always()) + route.HandleFunc(specBodyUrl, detailSpecBodyHandler).Methods(http.MethodGet) +} + +func (ir *SpecRouter) List(ae *env.AppEnv, rc *response.RequestContext) { + + rc.RequestResponder.RespondWithOk(specEntityList, nil) +} + +func (ir *SpecRouter) Detail(ae *env.AppEnv, rc *response.RequestContext) { + id, err := rc.GetIdFromRequest(ir.IdType) + + if err != nil || id != SwaggerId { + rc.RequestResponder.RespondWithNotFound() + return + } + + rc.RequestResponder.RespondWithOk(swaggerEntity, nil) +} + +func (ir *SpecRouter) DetailSpecBody(ae *env.AppEnv, rc *response.RequestContext) { + id, err := rc.GetIdFromRequest(ir.IdType) + + if err != nil || id != SwaggerId { + rc.RequestResponder.RespondWithNotFound() + return + } + rc.ResponseWriter.Header().Add("content-type", "text/yaml") + rc.ResponseWriter.WriteHeader(http.StatusOK) + rc.ResponseWriter.Write(swaggerEntity.Body) +} + +type specList struct { + *env.BaseApi + Name string `json:"name"` + Body []byte `json:"-"` +} + +func newSpec(id, name string, specBody []byte) *specList { + date, _ := time.Parse(time.RFC3339, "2013-03-30T12:00:00Z") + ret := &specList{ + BaseApi: &env.BaseApi{ + Id: id, + CreatedAt: &date, + UpdatedAt: &date, + Tags: map[string]interface{}{}, + }, + Name: name, + Body: specBody, + } + ret.PopulateLinks() + return ret +} + +func (e *specList) GetSelfLink() *response.Link { + return e.BuildSelfLink(e.Id) +} + +func (specList) BuildSelfLink(id string) *response.Link { + return response.NewLink(fmt.Sprintf("./%s/%s", EntityNameSpec, id)) +} + +func (e *specList) PopulateLinks() { + if e.Links == nil { + self := e.GetSelfLink() + e.Links = &response.Links{ + EntityNameSelf: self, + EntityNameSpec: response.NewLink(fmt.Sprintf(self.Href + "/spec")), + } + } +} diff --git a/specs/swagger.yml b/specs/swagger.yml new file mode 100644 index 000000000..41ffab42c --- /dev/null +++ b/specs/swagger.yml @@ -0,0 +1,4804 @@ +--- +swagger: '2.0' +info: + version: 0.12.0 + title: Ziti Edge + contact: {} +host: demo.ziti.dev +basePath: / +schemes: + - https +consumes: + - application/json +produces: + - application/json +securityDefinitions: + ztSession: + type: apiKey + in: header + name: zt-session + +####################################################################################################################### +# +# Paths - Endpoints and their associated HTTP methods +# +####################################################################################################################### +paths: + ################################################################### + # .well-known RFC + ################################################################## + '/.well-known/est/cacerts': + get: + summary: Get CA Cert Store + description: | + This endpoint is used during enrollments to bootstrap trust between enrolling clients and the Ziti Edge API. + This endpoint returns a base64 encoded PKCS7 store. The content can be base64 decoded and parsed by any library + that supports parsing PKCS7 stores. + security: [] + tags: + - Well Known + operationId: listWellKnownCas + produces: + - application/pkcs7-mime + responses: + '200': + description: A base64 encoded PKCS7 store + schema: + type: string + example: 'MIIMUQYJKoZIhvcNAQcCoIIMQjCCDD4CAQExADALBgkqhkiG9w0BBwGgggwkMIIG + BjCCA+6gAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgZcxCzAJBgNVBAYTAlVTMRcw + FQYDVQQIDA5Ob3J0aCBDYXJvbGluYTESMBAGA1UEBwwJQ2hhcmxvdHRlMRMwEQYD + VQQKDApOZXRGb3VuZHJ5MSkwJwYDVQQLDCBOZXRGb3VuZHJ5IENlcnRpZmljYXRl + IEF1dGhvcml0eTEbMBkGA1UEAwwSTmV0Rm91bmRyeSBSb290IENBMB4XDTE4MDUx + ODE2NTcyM1oXDTI4MDUxNTE2NTcyM1owgYsxCzAJBgNVBAYTAlVTMRcwFQYDVQQI + DA5Ob3J0aCBDYXJvbGluYTETMBEGA1UECgwKTmV0Rm91bmRyeTEpMCcGA1UECwwg + TmV0Rm91bmRyeSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxIzAhBgNVBAMMGk5ldEZv + dW5kcnkgSW50ZXJtZWRpYXRlIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC + CgKCAgEAsb1EPhMUweS9WpjT7L54xAOmZqugJ6fhSrFfLUwNUy172q+ASvZTpT1z + KIPcZpGmPB3TX2bHaAR67BbRkUR11JgWE3U8+FsGrYmPZtaKM6fg8Mh0WZ41oMYQ + NJyQixOktrgqfybyJoT5PeT5AA7QQmd8mku2X9nkAu6gWPf2nHNc7SeQdijmyQQa + VK3oqyaxOzWzsU/XbfMEz/ObkefUxgt5Z6jlK0xcW0Q+QgtawMKLUiuo6obWRPcl + 7Hm9Sze8XJS5pbvS5JkUszxoRZuDVHZylrlHIpA/IL+BnvS+M7SP28UWe9skrv/s + 6ACpJtuPJ1EYf5fakugOpY7i+hq7YNi//csbc49Qjn2OtttrR7JcTaHUEU1I/tQb + QGAtNkI4pJjRVUdDawQFQlWHZD1COixNLErs2HzAI00DhLrY6SKITI/kjN0Xx010 + XdMcdfay0PLWm6RwxiRmMQFL4GNIC895NF1q6xV4W4rWgqUNlcvKpy+i1chWpRbU + He16ul0qh10fcESrRvAbXn5YrQJLrwbSr+85ubN8lYdNLE0qg2cIXZlUilarZZzW + ghtCe+KkUpjfRuAi/CqfSwNK3QXEfeVEK6S49mHeSekOizFIw7fmDhCz9vXwMOnb + ryRSLEJks0gIRcSDVChXheAqC98y4kcQdniNWFnqJXoqA+rrSokCAwEAAaNmMGQw + HQYDVR0OBBYEFK8UXC/sq6dGVFAqEXHsQDzqzwuUMB8GA1UdIwQYMBaAFEHz6RRu + OuXj2mwAzOeUinfWeivpMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQD + AgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBDAAaOE2Nbb49eOjyTNxIeOB+ZKQjJ1hUE + gRrootAA8NYbtKW/vyxTWnNi5XOGXd4DFS9OKZ0mL/7NyLc0mbTwPH2ZT8KTPUTS + Cpo6yktZ/7TMjyAtWZiOMg2EH+6m/nlNSXk/v5fb8+JQLdZfpxoA017dHh3tc8l7 + KOskCZNwQHgF/YMXrPXUNbsGkXRuJLtpjPw5O9GvPys7p+a1aJH1WCTly9zfB6j+ + rMF+UGCPDT30sxitVlohik83j6pKLgEAP/gi8nJbILlTP7ce+gJeHR2tfDvmK91X + 6QgCF2STUFBU7/9H1/pPRRykOxQpAd8xqSgqGEyp9Ie4tysZjwoUEnG8IVJ5ykrI + Fximvnb4B+LABV9WEo08n8m1R8wEryrISi8fBPn3Pr5nuayOfFLa15CLTkZF40FN + 8ika1qNZy8bWRDwTZJQUUb7VCheRWcMwdZdNmhl3J+VZLpQ+ruW7b2ajwacHz5Nw + BHKNcmxXb/4vHq/BnlcayHnSqT6036+OZQ+owDegcYmWV6LaM7xLErjHz2EE38M2 + YSiW5SU1zluDe+iHb6l3Gd3Fj/X1gkMWFgYh0XPMSUSyimLNYzy4THKzmWlcQNFo + LLiIDbLrMt+vk+vBkIsNTTPXRJOFPBhmIF6uIUj+2YhzNotX/pQtqMKms3pPlmHq + dH6biwygETCCBhYwggP+oAMCAQICCQDquKpymLJ5WzANBgkqhkiG9w0BAQsFADCB + lzELMAkGA1UEBhMCVVMxFzAVBgNVBAgMDk5vcnRoIENhcm9saW5hMRIwEAYDVQQH + DAlDaGFybG90dGUxEzARBgNVBAoMCk5ldEZvdW5kcnkxKTAnBgNVBAsMIE5ldEZv + dW5kcnkgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MRswGQYDVQQDDBJOZXRGb3VuZHJ5 + IFJvb3QgQ0EwHhcNMTgwNTE4MTY1NDQ3WhcNMzgwNTEzMTY1NDQ3WjCBlzELMAkG + A1UEBhMCVVMxFzAVBgNVBAgMDk5vcnRoIENhcm9saW5hMRIwEAYDVQQHDAlDaGFy + bG90dGUxEzARBgNVBAoMCk5ldEZvdW5kcnkxKTAnBgNVBAsMIE5ldEZvdW5kcnkg + Q2VydGlmaWNhdGUgQXV0aG9yaXR5MRswGQYDVQQDDBJOZXRGb3VuZHJ5IFJvb3Qg + Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKq/Xa+749Cr3WJGYD + DIEtNKIRnTFc6TeiRSm/O7hG2+1Nrh/dObjZJuDjsopWP8NFA/DwlNyEphYKAeSw + HDmu+4nFd6ifoeDE2lYq6bNhLcgN+A3MlN5Phb2rnO32YYZwHXGWov+jtd2gaK0f + WsH8CQxn6n2v7qvPMTeYFP8p4jqTZw2bvZWw+LMYTFCy541DFqQLQasMg10mXRAV + XO7Oa9y+D1re1zLq4wS6u8ItJoKzfmvZkMvD90C/tQ4u0iJaL7GB2SE9MOPDeGVv + pnoSAIkSVmvRDUAj2x9PuukykzoL1OAWzc5Cg+5LxRmLejVE7PvPcHaTtNag2tRD + w2vbMeFKN8NvQH1QYcaPWZe4Vl9b6DAuTaH5RN919H/F+ZHyjZybVPwC14lflneI + KyNy8JEV/YMIbEADWnuiedzDehk2Opn+0+9Zr2X/xfjCo8iWHFbNaVnQX7wdRaOo + 783lEouncqe46FDBLBpyAuDKHQpIT3MK8rkC/1yBNxsH44vMweUZuK0u7PC9KHtm + pQfuflYGfxA34kY6WU3jzyQHetoLYjoxTqNEEjuGpwy2o1j7RaCBEFIbYlnlbhpE + WFTaQf96z2GQ6m1U3y7JyDflHSu9Fo1JNkG3qXsjDwda/6W7NRJRgdFrhnOwrm7F + 6L9X4P1HnzU/VJL66LwPmiHVjQIDAQABo2MwYTAdBgNVHQ4EFgQUQfPpFG465ePa + bADM55SKd9Z6K+kwHwYDVR0jBBgwFoAUQfPpFG465ePabADM55SKd9Z6K+kwDwYD + VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIB + ACfU74aKWROaxnue8tZb5PFkEbnDRcRrKXRhnptA0vrgB4ydnYxX9hEBZD8o6PBy + 3rewvl5meSOBE6zyb4JD80lHdzHSVFIwbzsNOeEjCslv/PA/3Y+J7DCt6gPNMDeY + uEssdqeSiMoYz2gnven4flSMKgTAJd3/SpVrn35HzXiU9MkmFVpPEMnTctOjw+Jn + cCkG5+D9N14dxtgZ/tUfbH+GUfhyGVxRdPrX5KQqAyapMfEaMXXa8KNs7PG+sDiS + WI+Sg9jUGtxgkfKdVNtFW+QMXyy7eT3iXPA+1r2hFAhgfIaGtBJUhxPHMhKtjbAg + AX+6+2D3GAbaD1+lcQHhKry3hygQ3OX79FJW6zyPS0tiV/LfovHqX/3x9q5PTVBO + wEOS2/LCc4R2M7S+HIPf4eSJ+nH4uCIdJ42WCror/mRsuL7geCksi70GHuCynP4y + qQFszu/UtbBEsN8loTnLpOInxaGB1Y8UPm14b2Lo1/3HkoMVh0/UaHJ0TmnZ1r7m + fGhfRyAZYRdvT1sB+Eb4b5A2zEZqsTc9IwFOhnI4ZilPoZ5s2xejqrVw3GSvovEh + dprrQmvxuh+VQ23y/+/4z9b2xWyDu2zVveB4whqPe2rkgxJrEl4GfLk2DW+dN6j8 + 3Zl4lPoUZYwzkC6raCaHyFlAoaTbqz0H6rvVJYxJPS6UoQAxAA==' + + '/version': + get: + summary: Returns version information + security: [] + tags: + - Informational + operationId: listVersion + responses: + '200': + $ref: '#/responses/listVersion' + ################################################################### + # Informational + ################################################################## + '/summary': + get: + summary: Returns a list of accessible resource counts + description: This endpoint is usefull for UIs that wish to display UI elements with counts. + security: + - ztSession: [] + tags: + - Informational + operationId: listSummary + responses: + '200': + $ref: '#/responses/listSummaryCounts' + '401': + $ref: '#/responses/unauthorizedResponse' + '/specs': + get: + summary: Returns a list of API specs + description: Returns a list of spec files embedded within the controller for consumption/documentation/code geneartion + security: [] + tags: + - Informational + operationId: listSpecs + responses: + '200': + $ref: '#/responses/listSpecs' + '/specs/{id}': + parameters: + - $ref: '#/parameters/id' + get: + summary: Return a single spec resource + description: Returns single spec resource embedded within the controller for consumption/documentation/code geneartion + security: [] + tags: + - Informational + operationId: detailSpec + responses: + '200': + $ref: '#/responses/detailSpec' + '/specs/{id}/spec': + parameters: + - $ref: '#/parameters/id' + get: + summary: Returns the spec's file + description: Return the body of the specification (i.e. Swagger, OpenAPI 2.0, 3.0, etc). + security: [] + tags: + - Informational + operationId: detailSpecBody + produces: + - text/yaml + responses: + '200': + $ref: '#/responses/detailSpecBody' + ################################################################### + # API Sessions + ################################################################## + '/api-sessions': + get: + summary: List active API sessions + description: | + Returns a list of active API sessions. The resources can be sorted, filtered, and paginated. This endpoint + requries admin access. + security: + - ztSession: [] + tags: + - API Session + operationId: listAPISessions + produces: + - application/json; charset=utf-8 + parameters: + - $ref: '#/parameters/limit' + - $ref: '#/parameters/offset' + - $ref: '#/parameters/filter' + responses: + '200': + $ref: '#/responses/listAPISessions' + '/api-sessions/{id}': + parameters: + - $ref: '#/parameters/id' + get: + summary: Retrieves a single API Session + description: Retrieves a single API Session by id. Requires admin access. + security: + - ztSession: [] + tags: + - API Session + operationId: detailAPISessions + responses: + '200': + $ref: '#/responses/detailAPISession' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + delete: + summary: Deletes an API Sessions + description: Deletes and API sesion by id. Requires admin access. + security: + - ztSession: [] + tags: + - API Session + operationId: deleteAPISessions + responses: + '200': + $ref: '#/responses/deleteResponse' + '404': + $ref: '#/responses/notFoundResponse' + '403': + $ref: '#/responses/unauthorizedResponse' + ################################################################### + # Authentication + ################################################################## + '/authenticate': + parameters: + - $ref: '#/parameters/authMethod' + post: + summary: Authenticate via a method supplied via a query string parameter + description: | + Allows authentication Methods include "password" and "cert" + security: [] + tags: + - Authentication + operationId: authenticate + parameters: + - name: Body + in: body + required: true + schema: + $ref: '#/definitions/authenticate' + responses: + '200': + $ref: '#/responses/detailCurrentAPISession' + '400': + $ref: '#/responses/badRequestResponse' + '403': + $ref: '#/responses/invalidAuthResponse' + ################################################################### + # Authenticators + ################################################################## + '/authenticators': + get: + summary: List authenticators + description: | + Returns a list of authenticators associated to identities. The resources can be sorted, filtered, and paginated. + This endpoint requries admin access. + security: + - ztSession: [] + tags: + - Authenticator + operationId: listAuthenticators + + responses: + '200': + $ref: '#/responses/listAuthenticators' + post: + summary: Creates an authenticator + description: | + Creates an authenticator for a specific identity. Requires admin access. + security: + - ztSession: [] + tags: + - Authenticator + operationId: createAuthenticators + parameters: + - name: Body + in: body + required: true + description: A Authenticators create object + schema: + $ref: '#/definitions/authenticatorCreate' + responses: + '200': + description: The create was successful + schema: + $ref: '#/definitions/authenticatorCreate' + '400': + $ref: '#/responses/badRequestResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + '/authenticators/{id}': + parameters: + - $ref: '#/parameters/id' + get: + summary: Retrieves a single authenticator + description: Retrieves a single authenticator by id. Requires admin access. + security: + - ztSession: [] + tags: + - Authenticator + operationId: detailAuthenticator + responses: + '200': + $ref: '#/responses/detailAuthenticator' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + put: + summary: Update all fields on an authenticator + description: Update all fields on an authenticator by id. Requires admin access. + security: + - ztSession: [] + tags: + - Authenticator + operationId: updateAuthenticator + parameters: + - name: Body + in: body + required: true + description: 'An authenticator put object' + schema: + $ref: '#/definitions/authenticatorUpdate' + responses: + '200': + $ref: '#/responses/updateResponse' + '400': + $ref: '#/responses/badRequestResponse' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + patch: + summary: Update the supplied fields on an authenticator + description: Update the supplied fields on an authenticator by id. Requires admin access. + security: + - ztSession: [] + tags: + - Authenticator + operationId: patchAuthenticator + parameters: + - name: Body + in: body + required: true + description: An authenticator patch object + schema: + $ref: '#/definitions/authenticatorPatch' + responses: + '200': + $ref: '#/responses/patchResponse' + '400': + $ref: '#/responses/badRequestResponse' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + delete: + summary: Delete an Authenticator + description: | + Delete an authenticator by id. Deleting all authenticators for an identity will make it impossible to log in. + Requires admin access. + security: + - ztSession: [] + tags: + - Authenticator + operationId: deleteAuthenticator + responses: + '200': + $ref: '#/responses/deleteResponse' + '400': + $ref: '#/responses/badRequestResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + + ################################################################### + # Certificate Authorities + ################################################################## + '/cas': + get: + summary: List CAs + description: Retrieves a list of CA resources; supports filtering, sorting, and pagination. Requires admin access. + security: + - ztSession: [] + tags: + - CA + operationId: listCA + parameters: + - $ref: '#/parameters/limit' + - $ref: '#/parameters/offset' + - $ref: '#/parameters/filter' + responses: + '200': + $ref: '#/responses/listCAs' + post: + summary: Creates a CA + description: Creates a CA in an unverified state. Requires admin access. + security: + - ztSession: [] + tags: + - CA + operationId: createCA + + parameters: + - name: Body + in: body + required: true + description: A CA to create + schema: + $ref: '#/definitions/caCreate' + responses: + '200': + $ref: '#/responses/createResponse' + '400': + $ref: '#/responses/badRequestResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + '/cas/{id}': + parameters: + - $ref: '#/parameters/id' + get: + summary: Retrieves a single CA + description: Retrieves a single CA by id. Requires admin access. + security: + - ztSession: [] + tags: + - CA + operationId: detailCA + responses: + '200': + $ref: '#/responses/detailCA' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + put: + summary: Update all fields on a CA + description: Update all fields on a CA by id. Requires admin access. + security: + - ztSession: [] + tags: + - CA + operationId: updateCA + parameters: + - name: Body + in: body + required: true + description: A CA update object + schema: + $ref: '#/definitions/caUpdate' + responses: + '200': + $ref: '#/responses/updateResponse' + '400': + $ref: '#/responses/badRequestResponse' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + patch: + summary: Update the supplied fields on a CA + description: Update only the supplied fields on a CA by id. Requires admin access. + security: + - ztSession: [] + tags: + - CA + operationId: patchCA + parameters: + - name: Body + in: body + required: true + description: A CA patch object + schema: + $ref: '#/definitions/caPatch' + responses: + '200': + $ref: '#/responses/patchResponse' + '400': + $ref: '#/responses/badRequestResponse' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + delete: + summary: Delete a CA + description: | + Delete a CA by id. Deleting a CA will delete its associated certificate authenticators. This can make it + impossible for identities to authenticate if they no longer have any valid authenticators. Requires admin access. + security: + - ztSession: [] + tags: + - CA + operationId: deleteCA + responses: + '200': + $ref: '#/responses/deleteResponse' + '400': + $ref: '#/responses/badRequestResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + '/cas/{id}/jwt': + parameters: + - $ref: '#/parameters/id' + get: + summary: Retrieve the enrollment JWT for a CA + description: | + For CA auto enrollment, the enrollment JWT is static and provided on each CA resource. This endpoint provides + the jwt as a text response. + security: + - ztSession: [] + tags: + - CA + produces: + - 'application/jwt' + responses: + '200': + description: The result is the JWT text to validate the CA + schema: + type: string + examples: + 'application/jwt': 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbSI6ImNhIiwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6MTI + 4MC8ifQ.Ot6lhNBSOw8ygHytdI5l7WDf9EWadOj44UPvJ0c-8mJ54fClWM3uMZrAHSSfV6KmOSZOeBBJe4VlNyoD-_MOECP0BzYSnSQP3E + zJb0VlM-fFmGcKNGW157icyZNISfO43JL_Lw2QPBzTgikqSIj9eZnocC3BeAmZCHsVznnLfHWqDldcmuxnu-5MNOSrWV1x9iVcgLFlLHXK + 2PLA4qIiZmlQTrQjpHJmUaoJ07mnj8hMKzxB3wBG8kpazjEo7HDRCO06aBH4eqFgf_l0iT8Dzcb31jquWMGUoSXPhf4lVJh_FiNcR1wVx- + UiHLbG5h23Aqf1UJF-F38rc1FElKz0Zg' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + '/cas/{id}/verify': + parameters: + - $ref: '#/parameters/id' + post: + summary: Verify a CA + description: | + Allows a CA to become verified by submitting a certificate in PEM format that has been signed by the target CA. + The common name on the certificate must match the verificationToken property of the CA. Unverfieid CAs can not + be used for enrollment/authentication. Requires admin access. + security: + - ztSession: [] + tags: + - CA + consumes: + - 'text/plain' + parameters: + - name: certificate + required: true + in: body + description: A PEM formatted certificate signed by the target CA with the common name matching the CA's validationToken + schema: + type: string + responses: + 200: + $ref: '#/responses/emptyResponse' + '400': + $ref: '#/responses/badRequestResponse' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + ################################################################### + # Config-Types + ################################################################## + '/config-types': + get: + summary: List config-types + description: | + Retrieves a list of config-type resources; supports filtering, sorting, and pagination. Requires admin access. + security: + - ztSession: [] + tags: + - Config + operationId: listConfigType + parameters: + - $ref: '#/parameters/limit' + - $ref: '#/parameters/offset' + - $ref: '#/parameters/filter' + responses: + '200': + $ref: '#/responses/listConfigTypes' + post: + summary: Create a config-type. Requires admin access. + security: + - ztSession: [] + tags: + - Config + operationId: createConfigType + parameters: + - name: Body + in: body + required: true + description: A config-type to create + schema: + $ref: '#/definitions/configTypeCreate' + responses: + '200': + $ref: '#/responses/createResponse' + '400': + $ref: '#/responses/badRequestResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + '/config-types/{id}': + parameters: + - $ref: '#/parameters/id' + get: + summary: Retrieves a single config-type + description: Retrieves a single config-type by id. Requires admin access. + security: + - ztSession: [] + tags: + - Config + operationId: detailConfigType + responses: + '200': + $ref: '#/responses/detailConfigType' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + put: + summary: Update all fields on a config-type + description: Update all fields on a config-type by id. Requires admin access. + security: + - ztSession: [] + tags: + - Config + operationId: updateConfigType + parameters: + - name: Body + in: body + required: true + description: A config-type update object + schema: + $ref: '#/definitions/configTypeUpdate' + responses: + '200': + $ref: '#/responses/updateResponse' + '400': + $ref: '#/responses/badRequestResponse' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + patch: + summary: Update the supplied fields on a config-type + description: Update the supplied fields on a config-type. Requires admin access. + security: + - ztSession: [] + tags: + - Config + operationId: patchConfigType + parameters: + - name: Body + in: body + required: true + description: A config-type patch object + schema: + $ref: '#/definitions/configTypePatch' + responses: + '200': + $ref: '#/responses/patchResponse' + '400': + $ref: '#/responses/badRequestResponse' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + delete: + summary: Delete a config-type + description: Delete a config-type by id. Removing a configuration type that are in use will result in a 409 conflict HTTP status code and error. All configurations of a type must be removed first. + security: + - ztSession: [] + tags: + - Config + operationId: deleteConfigType + responses: + '200': + $ref: '#/responses/deleteResponse' + '400': + $ref: '#/responses/badRequestResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + '409': + $ref: '#/responses/cannotDeleteReferencedResourceResponse' + '/config-types/{id}/configs': + parameters: + - $ref: '#/parameters/id' + get: + summary: Lists the configs of a specific config-type + description: Lists the configs associated to a config-type. Requires admin access. + security: + - ztSession: [] + tags: + - Config + operationId: listConfigsForConfigType + responses: + '200': + $ref: '#/responses/listConfigs' + ################################################################### + # Configs + ################################################################## + '/configs': + get: + summary: List configs + description: | + Retrieves a list of config resources; supports filtering, sorting, and pagination. Requires admin access. + security: + - ztSession: [] + tags: + - Config + operationId: listConfig + parameters: + - $ref: '#/parameters/limit' + - $ref: '#/parameters/offset' + - $ref: '#/parameters/filter' + responses: + '200': + $ref: '#/responses/listConfigs' + '401': + $ref: '#/responses/unauthorizedResponse' + post: + summary: Create a config resource + description: Create a config resource. Requires admin access. + security: + - ztSession: [] + tags: + - Config + operationId: createConfig + parameters: + - name: Body + in: body + required: true + description: A config to create + schema: + $ref: '#/definitions/configCreate' + responses: + '200': + $ref: '#/responses/createResponse' + '400': + $ref: '#/responses/badRequestResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + '/configs/{id}': + parameters: + - $ref: '#/parameters/id' + get: + summary: Retrieves a single config + description: Retrieves a single config by id. Requires admin access. + security: + - ztSession: [] + tags: + - Config + operationId: detailConfig + responses: + '200': + $ref: '#/responses/detailConfig' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + put: + summary: Update all fields on a config + description: Update all fields on a config by id. Requires admin access. + security: + - ztSession: [] + tags: + - Config + operationId: updateConfig + parameters: + - name: Body + in: body + required: true + description: A config update object + schema: + $ref: '#/definitions/configUpdate' + responses: + '200': + $ref: '#/responses/updateResponse' + '400': + $ref: '#/responses/badRequestResponse' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + patch: + summary: Update the supplied fields on a config + description: Update the supplied fields on a config. Requires admin access. + security: + - ztSession: [] + tags: + - Config + operationId: patchConfig + parameters: + - name: Body + in: body + required: true + description: A config patch object + schema: + $ref: '#/definitions/configPatch' + responses: + '200': + $ref: '#/responses/patchResponse' + '400': + $ref: '#/responses/badRequestResponse' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + delete: + summary: Delete a config + description: Delete a config by id. Requires admin access. + security: + - ztSession: [] + tags: + - Config + operationId: deleteConfig + responses: + '200': + $ref: '#/responses/deleteResponse' + '400': + $ref: '#/responses/badRequestResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + '409': + $ref: '#/responses/cannotDeleteReferencedResourceResponse' + + ################################################################### + # Current API Session + ################################################################## + '/current-api-session': + get: + summary: Return the current API session + description: Retrieves the API session that was used to issue the current request + security: + - ztSession: [] + tags: + - Current API Session + operationId: getCurrentAPISession + responses: + 200: + $ref: '#/responses/detailCurrentAPISession' + 401: + $ref: '#/responses/unauthorizedResponse' + + '/current-identity': + get: + summary: Return the current identity + description: Returns the identity associated with the API sessions used to issue the current request + security: + - ztSession: [] + tags: + - Current API Session + operationId: getCurrentIdentity + responses: + '200': + $ref: '#/responses/detailCurrentIdentity' + '401': + $ref: '#/responses/unauthorizedResponse' + '/current-identity/authenticators': + get: + summary: List authenticators for the current identity + description: Retrieves a list of authenticators assigned to the current API session's identity; supports filtering, sorting, and pagination. + security: + - ztSession: [] + tags: + - Current API Session + operationId: listCurrentIdentityAuthenticators + parameters: + - $ref: '#/parameters/limit' + - $ref: '#/parameters/offset' + - $ref: '#/parameters/filter' + responses: + '200': + $ref: '#/responses/listAuthenticators' + '401': + $ref: '#/responses/unauthorizedResponse' + '/current-identity/authenticators/{id}': + parameters: + - $ref: '#/parameters/id' + get: + summary: Retrieve an authenticator for the current identity + description: Retrieves a single authenticator by id. Will only show authenticators assigned to the API session's identity. + security: + - ztSession: [] + tags: + - Current API Session + operationId: detailCurrentIdentityAuthenticator + responses: + '200': + $ref: '#/responses/detailAuthenticator' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + put: + summary: Update all fields on an authenticator of this identity + description: | + Update all fields on an authenticator by id. Will only update authenticators assigned to the API session's + identity. + security: + - ztSession: [] + tags: + - Current API Session + operationId: updateCurrentIdentityAuthenticator + parameters: + - name: Body + in: body + required: true + description: 'An authenticator put object' + schema: + $ref: '#/definitions/authenticatorUpdate' + responses: + '200': + $ref: '#/responses/updateResponse' + '400': + $ref: '#/responses/badRequestResponse' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + patch: + summary: Update the supplied fields on an authenticator of this identity + description: | + Update the supplied fields on an authenticator by id. Will only update authenticators assigned to the API + session's identity. + security: + - ztSession: [] + tags: + - Current API Session + operationId: patchCurrentIdentityAuthenticator + parameters: + - name: Body + in: body + required: true + description: An authenticator patch object + schema: + $ref: '#/definitions/authenticatorPatch' + responses: + '200': + $ref: '#/responses/patchResponse' + '400': + $ref: '#/responses/badRequestResponse' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + + ################################################################### + # Edge Router Policies + ################################################################## + '/edge-router-policies': + get: + summary: List edge router policies + description: | + Retrieves a list of edge router policy resources; supports filtering, sorting, and pagination. Requires admin access. + security: + - ztSession: [] + tags: + - Edge Router Policy + operationId: listEdgeRouterPolicies + parameters: + - $ref: '#/parameters/limit' + - $ref: '#/parameters/offset' + - $ref: '#/parameters/filter' + responses: + '200': + $ref: '#/responses/listEdgeRouterPolicies' + '401': + $ref: '#/responses/unauthorizedResponse' + post: + summary: Create an edge router policy resource + description: Create an edge router policy resource. Requires admin access. + security: + - ztSession: [] + tags: + - Edge Router Policy + operationId: createEdgeRouterPolicy + parameters: + - name: Body + in: body + required: true + description: An edge router policy to create + schema: + $ref: '#/definitions/edgeRouterPolicyCreate' + responses: + '200': + $ref: '#/responses/createResponse' + '400': + $ref: '#/responses/badRequestResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + '/edge-router-policies/{id}': + parameters: + - $ref: '#/parameters/id' + get: + summary: Retrieves a single edge router policy + description: Retrieves a single edge router policy by id. Requires admin access. + security: + - ztSession: [] + tags: + - Edge Router Policy + operationId: detailEdgeRouterPolicy + responses: + '200': + $ref: '#/responses/detailEdgeRouterPolicy' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + put: + summary: Update all fields on an edge router policy + description: Update all fields on an edge router policy by id. Requires admin access. + security: + - ztSession: [] + tags: + - Edge Router Policy + operationId: updateEdgeRouterPolicy + parameters: + - name: Body + in: body + required: true + description: An edge router policy update object + schema: + $ref: '#/definitions/edgeRouterPolicyUpdate' + responses: + '200': + $ref: '#/responses/updateResponse' + '400': + $ref: '#/responses/badRequestResponse' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + patch: + summary: Update the supplied fields on an edge router policy + description: Update the supplied fields on an edge router policy. Requires admin access. + security: + - ztSession: [] + tags: + - Edge Router Policy + operationId: patchEdgeRouterPolicy + parameters: + - name: Body + in: body + required: true + description: An edge router policy patch object + schema: + $ref: '#/definitions/edgeRouterPolicyPatch' + responses: + '200': + $ref: '#/responses/patchResponse' + '400': + $ref: '#/responses/badRequestResponse' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + delete: + summary: Delete an edge router policy + description: Delete an edge router policy by id. Requires admin access. + security: + - ztSession: [] + tags: + - Edge Router Policy + operationId: deleteEdgeRouterPolicy + responses: + '200': + $ref: '#/responses/deleteResponse' + '400': + $ref: '#/responses/badRequestResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + '409': + $ref: '#/responses/cannotDeleteReferencedResourceResponse' + '/edge-router-policies/{id}/edge-routers': + parameters: + - $ref: '#/parameters/id' + get: + summary: List edge routers a policy affects + description: | + Retrieves a list of edge routers an edge router policy resources affects; supports filtering, sorting, and pagination. Requires admin access. + tags: + - Edge Router Policy + responses: + '200': + $ref: '#/responses/listEdgeRouters' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + '/edge-router-policies/{id}/identities': + parameters: + - $ref: '#/parameters/id' + get: + summary: List identities an edge router policy affects + description: | + Retrieves a list of identities an edge router policy resources affects; supports filtering, sorting, and pagination. Requires admin access. + tags: + - Edge Router Policy + responses: + '200': + $ref: '#/responses/listIdentities' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + ################################################################### + # Edge Routers + ################################################################## + '/edge-routers': + get: + summary: List edge routers + description: | + Retrieves a list of edge router resources; supports filtering, sorting, and pagination. Requires admin access. + security: + - ztSession: [] + tags: + - Edge Router + operationId: lisgEdgeRouters + parameters: + - $ref: '#/parameters/limit' + - $ref: '#/parameters/offset' + - $ref: '#/parameters/filter' + responses: + '200': + $ref: '#/responses/listEdgeRouters' + '401': + $ref: '#/responses/unauthorizedResponse' + post: + summary: Create an edge router + description: Create a edge router resource. Requires admin access. + security: + - ztSession: [] + tags: + - Edge Router + operationId: createEdgeRouter + parameters: + - name: Body + in: body + required: true + description: A config-type to create + schema: + $ref: '#/definitions/edgeRouterCreate' + responses: + '200': + $ref: '#/responses/createResponse' + '400': + $ref: '#/responses/badRequestResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + '/edge-routers/{id}': + parameters: + - $ref: '#/parameters/id' + get: + summary: Retrieves a single edge router + description: Retrieves a single edge router by id. Requires admin access. + security: + - ztSession: [] + tags: + - Edge Router + operationId: detailEdgeRouter + responses: + '200': + $ref: '#/responses/detailEdgeRouter' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + put: + summary: Update all fields on an edge router + description: Update all fields on an edge router by id. Requires admin access. + security: + - ztSession: [] + tags: + - Edge Router + operationId: updateEdgeRouter + parameters: + - name: Body + in: body + required: true + description: An edge router update object + schema: + $ref: '#/definitions/edgeRouterUpdate' + responses: + '200': + $ref: '#/responses/updateResponse' + '400': + $ref: '#/responses/badRequestResponse' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + patch: + summary: Update the supplied fields on an edge router + description: Update the supplied fields on an edge router. Requires admin access. + security: + - ztSession: [] + tags: + - Edge Router + operationId: patchEdgeRouter + parameters: + - name: Body + in: body + required: true + description: An edge router patch object + schema: + $ref: '#/definitions/edgeRouterPatch' + responses: + '200': + $ref: '#/responses/patchResponse' + '400': + $ref: '#/responses/badRequestResponse' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + delete: + summary: Delete an edge router + description: Delete an edge router by id. Requires admin access. + security: + - ztSession: [] + tags: + - Edge Router + operationId: deleteEdgeRouter + responses: + '200': + $ref: '#/responses/deleteResponse' + '400': + $ref: '#/responses/badRequestResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + '409': + $ref: '#/responses/cannotDeleteReferencedResourceResponse' + '/edge-routers/{id}/edge-router-policies': + parameters: + - $ref: '#/parameters/id' + get: + summary: List the edge router policies that affect an edge router + description: Retrieves a list of edge router policies that apply to the specified edge router. + security: + - ztSession: [] + tags: + - Edge Router + operationId: listEdgeRoutersEdgeRouterPolicies + responses: + '200': + $ref: '#/responses/listEdgeRouterPolicies' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + '/edge-routers/{id}/service-edge-router-policies': + parameters: + - $ref: '#/parameters/id' + get: + summary: List the service policies that affect an edge router + description: Retrieves a list of service policies policies that apply to the specified edge router. + security: + - ztSession: [] + tags: + - Edge Router + operationId: listEdgeRoutersServicePolicies + responses: + '200': + $ref: '#/responses/listServicePolicies' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + ################################################################### + # Enroll - Identity + ################################################################## + '/enroll/ca': + post: + summary: Enroll an identity with a pre-exchanged certificate + description: | + For CA auto enrollment, an identity is not created beforehand. + Instead one will be created during enrollment. The client will present a client certificate that is signed by a + Certificate Authority that has been added and verified (See POST /cas and POST /cas/{id}/verify). + + During this process no CSRs are requires as the client should already be in possession of a valid certificate. + tags: + - Enroll + responses: + '200': + $ref: '#/responses/emptyResponse' + '/enroll/ott': + parameters: + - $ref: '#/parameters/token' + post: + summary: Enroll an identity via one-time-token + description: | + Enroll an identity via a one-time-token which is supplied via a query string parameter. This enrollment method + expects a PEM encoded CSRs to be provided for fulfillment. It is up to the enrolling identity to manage the + private key backing the CSR request. + tags: + - Enroll + consumes: + - application/pkcs10 + produces: + - application/x-x509-user-cert + responses: + '200': + $ref: '#/responses/zitiSignedCert' + '/enroll/ottca': + parameters: + - $ref: '#/parameters/token' + post: + summary: Enroll an identity via one-time-token with a pre-exchanged client certificate + description: | + Enroll an identity via a one-time-token that also requires a pre-exchanged client certificate to match a + Certificate Authority that has been added and verified (See POST /cas and POST /cas{id}/verify). The client + must present a client certificate signed by CA associated with the enrollment. This enrollment is similar to + CA auto enrollment except that is required the identity to be pre-created. + + As the client certificat has been pre-exchanged there is no CSR input to this enrollment method. + tags: + - Enroll + responses: + '200': + $ref: '#/responses/emptyResponse' + '/enroll/updb': + parameters: + - $ref: '#/parameters/token' + post: + summary: Enroll an identity vvia one-time-token + description: | + Enrolls and identity via a one-time-token to establish an initial username and password combination. + tags: + - Enroll + responses: + '200': + $ref: '#/responses/emptyResponse' + ################################################################### + # Enroll - Routers + ################################################################## + '/enroll/erott': + parameters: + - $ref: '#/parameters/token' + post: + summary: Enroll an edge-router + description: | + Enrolls an edge-router via a one-time-token to establish a certificate based identity. + tags: + - Enroll + responses: + '200': + $ref: '#/responses/erottResponse' + + + ################################################################### + # Enrollments + ################################################################## + '/enrollments': + get: + summary: List outstanding enrollments + description: | + Retrieves a list of outstanding enrollments; supports filtering, sorting, and pagination. Requires admin access. + security: + - ztSession: [] + tags: + - Enrollment + operationId: listEnrollments + parameters: + - $ref: '#/parameters/limit' + - $ref: '#/parameters/offset' + - $ref: '#/parameters/filter' + responses: + '200': + $ref: '#/responses/listEnrollments' + '401': + $ref: '#/responses/unauthorizedResponse' + '/enrollments/{id}': + parameters: + - $ref: '#/parameters/id' + get: + summary: Retrieves an outstanding enrollment + description: Retrieves a single outstanding enrollment by id. Requires admin access. + security: + - ztSession: [] + tags: + - Enrollment + operationId: detailEnrollment + responses: + '200': + $ref: '#/responses/detailEnrollment' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + delete: + summary: Delete an outstanding enrollment + description: Delete an outstanding enrollment by id. Requires admin access. + security: + - ztSession: [] + tags: + - Enrollment + operationId: deleteEnrollment + responses: + '200': + $ref: '#/responses/deleteResponse' + '400': + $ref: '#/responses/badRequestResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + + ################################################################### + # Geo Regions + ################################################################## + '/geo-regions': + get: + summary: List available geo-regions + description: | + Retrieves a list of geo-regions; supports filtering, sorting, and pagination. Requires admin access. + security: + - ztSession: [] + tags: + - Geo Region + operationId: listGeoRegion + parameters: + - $ref: '#/parameters/limit' + - $ref: '#/parameters/offset' + - $ref: '#/parameters/filter' + responses: + '200': + $ref: '#/responses/listGeoRegions' + '401': + $ref: '#/responses/unauthorizedResponse' + '/geo-regions/{id}': + parameters: + - $ref: '#/parameters/id' + get: + summary: Retrieves a geo-region + description: Retrieves a single geo-region by id. Requires admin access. + security: + - ztSession: [] + tags: + - Geo Region + operationId: detailGeoRegion + responses: + '200': + $ref: '#/responses/detailGeoRegion' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + ################################################################### + # Identities + ################################################################## + '/identities': + get: + summary: List identities + description: | + Retrieves a list of identity resources; supports filtering, sorting, and pagination. Requires admin access. + security: + - ztSession: [] + tags: + - Identity + operationId: listIdentities + parameters: + - $ref: '#/parameters/limit' + - $ref: '#/parameters/offset' + - $ref: '#/parameters/filter' + responses: + '200': + $ref: '#/responses/listIdentities' + '401': + $ref: '#/responses/unauthorizedResponse' + post: + summary: Create an identity resource + description: Create an identity resource. Requires admin access. + security: + - ztSession: [] + tags: + - Identity + operationId: createIdentity + parameters: + - name: Body + in: body + required: true + description: An identity to create + schema: + $ref: '#/definitions/identityCreate' + responses: + '200': + $ref: '#/responses/createResponse' + '400': + $ref: '#/responses/badRequestResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + '/identities/{id}': + parameters: + - $ref: '#/parameters/id' + get: + summary: Retrieves a single identity + description: Retrieves a single identity by id. Requires admin access. + security: + - ztSession: [] + tags: + - Identity + operationId: detailIdentity + responses: + '200': + $ref: '#/responses/detailIdentity' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + put: + summary: Update all fields on an identity + description: Update all fields on an identity by id. Requires admin access. + security: + - ztSession: [] + tags: + - Identity + operationId: updateIdentity + parameters: + - name: Body + in: body + required: true + description: An identity update object + schema: + $ref: '#/definitions/identityUpdate' + responses: + '200': + $ref: '#/responses/updateResponse' + '400': + $ref: '#/responses/badRequestResponse' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + patch: + summary: Update the supplied fields on an identity + description: Update the supplied fields on an identity. Requires admin access. + security: + - ztSession: [] + tags: + - Identity + operationId: patchIdentity + parameters: + - name: Body + in: body + required: true + description: An identity patch object + schema: + $ref: '#/definitions/identityPatch' + responses: + '200': + $ref: '#/responses/patchResponse' + '400': + $ref: '#/responses/badRequestResponse' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + delete: + summary: Delete an identity + description: Delete an identity by id. Requires admin access. + security: + - ztSession: [] + tags: + - Identity + operationId: deleteIdentity + responses: + '200': + $ref: '#/responses/deleteResponse' + '400': + $ref: '#/responses/badRequestResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + '409': + $ref: '#/responses/cannotDeleteReferencedResourceResponse' + '/identities/{id}/edge-router-policies': + parameters: + - $ref: '#/parameters/id' + get: + summary: List the edge router policies that affect an idenitty + description: Retrieves a list of edge router policies that apply to the specified identity. + security: + - ztSession: [] + tags: + - Identity + operationId: listIdentitysEdgeRouterPolicies + responses: + '200': + $ref: '#/responses/listEdgeRouterPolicies' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + '/identities/{id}/service-configs': + parameters: + - $ref: '#/parameters/id' + get: + summary: List the service configs associated a specific identity + description: Retrieves a list of service configs associated to a specific identity + security: + - ztSession: [] + tags: + - Identity + operationId: listIdentitysServiceConfigs + responses: + '200': + $ref: '#/responses/listServiceConfigs' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + post: + summary: Associate service configs for a specific identity + description: Associate service configs to a specific identity + parameters: + - name: Body + in: body + required: true + description: An identity patch object + schema: + $ref: '#/definitions/serviceConfigs' + security: + - ztSession: [] + tags: + - Identity + operationId: associateIdentitysServiceConfigs + responses: + '200': + $ref: '#/responses/emptyResponse' + '400': + $ref: '#/responses/badRequestResponse' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + delete: + summary: Remove associated service configs from a specific identity + description: Remove service configs from a specific identity + parameters: + - name: Body + in: body + required: true + description: An identity patch object + schema: + $ref: '#/definitions/serviceConfigs' + security: + - ztSession: [] + tags: + - Identity + operationId: disassociateIdentitysServiceConfigs + responses: + '200': + $ref: '#/responses/emptyResponse' + '400': + $ref: '#/responses/badRequestResponse' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + '/identities/{id}/service-policies': + parameters: + - $ref: '#/parameters/id' + get: + summary: List the service policies that affect an identity + description: Retrieves a list of service policies that apply to the specified identity. + security: + - ztSession: [] + tags: + - Identity + operationId: listIdentityServicePolicies + responses: + '200': + $ref: '#/responses/listServicePolicies' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + + ################################################################### + # Identity-Types + ################################################################## + '/identity-types': + get: + summary: List available identity types + description: | + Retrieves a list of identity types; supports filtering, sorting, and pagination. Requires admin access. + security: + - ztSession: [] + tags: + - Identity + operationId: listIdentityType + parameters: + - $ref: '#/parameters/limit' + - $ref: '#/parameters/offset' + - $ref: '#/parameters/filter' + responses: + '200': + $ref: '#/responses/listIdentityTypes' + '401': + $ref: '#/responses/unauthorizedResponse' + '/identity-types/{id}': + parameters: + - $ref: '#/parameters/id' + get: + summary: Retrieves a identity type + description: Retrieves a single identity type by id. Requires admin access. + security: + - ztSession: [] + tags: + - Identity + operationId: detailIdentityType + responses: + '200': + $ref: '#/responses/detailIdentityType' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + ################################################################### + # Service Edge Router Policies + ################################################################## + '/service-edge-router-policies': + get: + summary: List service edge router policies + description: | + Retrieves a list of service edge router policy resources; supports filtering, sorting, and pagination. Requires admin access. + security: + - ztSession: [] + tags: + - Service Edge Router Policy + operationId: listServiceEdgeRouterPolicies + parameters: + - $ref: '#/parameters/limit' + - $ref: '#/parameters/offset' + - $ref: '#/parameters/filter' + responses: + '200': + $ref: '#/responses/listServiceEdgeRouterPolicies' + '401': + $ref: '#/responses/unauthorizedResponse' + post: + summary: Create a service edge router policy resource + description: Create a service edge router policy resource. Requires admin access. + security: + - ztSession: [] + tags: + - Service Edge Router Policy + operationId: createServiceEdgeRouterPolicy + parameters: + - name: Body + in: body + required: true + description: A service edge router policy to create + schema: + $ref: '#/definitions/serviceEdgeRouterPolicyCreate' + responses: + '200': + $ref: '#/responses/createResponse' + '400': + $ref: '#/responses/badRequestResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + '/service-edge-router-policies/{id}': + parameters: + - $ref: '#/parameters/id' + get: + summary: Retrieves a single service edge policy + description: Retrieves a single service edge policy by id. Requires admin access. + security: + - ztSession: [] + tags: + - Service Edge Router Policy + operationId: detailServiceEdgeRouterPolicy + responses: + '200': + $ref: '#/responses/detailServiceEdgePolicy' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + put: + summary: Update all fields on a service edge policy + description: Update all fields on a service edge policy by id. Requires admin access. + security: + - ztSession: [] + tags: + - Service Edge Router Policy + operationId: updateServiceEdgeRouterPolicy + parameters: + - name: Body + in: body + required: true + description: A service edge policy update object + schema: + $ref: '#/definitions/serviceEdgePolicyUpdate' + responses: + '200': + $ref: '#/responses/updateResponse' + '400': + $ref: '#/responses/badRequestResponse' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + patch: + summary: Update the supplied fields on a service edge policy + description: Update the supplied fields on a service edge policy. Requires admin access. + security: + - ztSession: [] + tags: + - Service Edge Router Policy + operationId: patchServiceEdgeRouterPolicy + parameters: + - name: Body + in: body + required: true + description: A service edge policy patch object + schema: + $ref: '#/definitions/serviceEdgePolicyPatch' + responses: + '200': + $ref: '#/responses/patchResponse' + '400': + $ref: '#/responses/badRequestResponse' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + delete: + summary: Delete a service edge policy + description: Delete a service edge policy by id. Requires admin access. + security: + - ztSession: [] + tags: + - Service Edge Router Policy + operationId: deleteServiceEdgeRouterPolicy + responses: + '200': + $ref: '#/responses/deleteResponse' + '400': + $ref: '#/responses/badRequestResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + '409': + $ref: '#/responses/cannotDeleteReferencedResourceResponse' + '/service-edge-router-policies/{id}/edge-routers': + parameters: + - $ref: '#/parameters/id' + get: + summary: List the edge routers that a service edge router policy applies to + description: List the edge routers that a service edge router policy applies to + security: + - ztSession: [] + tags: + - Service Edge Router Policy + operationId: listServiceEdgeRouterPolicyEdgeRouters + responses: + '200': + $ref: '#/responses/listEdgeRouters' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + '/service-edge-router-policies/{id}/services': + parameters: + - $ref: '#/parameters/id' + get: + summary: List the services that a service edge router policy applies to + description: List the services that a service edge router policy applies to + security: + - ztSession: [] + tags: + - Service Edge Router Policy + operationId: listServiceEdgeRouterPolicyServices + responses: + '200': + $ref: '#/responses/listServices' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + + ################################################################### + # Service Policies + ################################################################## + '/service-policies': + get: + summary: List service policies + description: | + Retrieves a list of service policy resources; supports filtering, sorting, and pagination. Requires admin access. + security: + - ztSession: [] + tags: + - Service Policy + operationId: listServicePolicies + parameters: + - $ref: '#/parameters/limit' + - $ref: '#/parameters/offset' + - $ref: '#/parameters/filter' + responses: + '200': + $ref: '#/responses/listServicePolicies' + '401': + $ref: '#/responses/unauthorizedResponse' + post: + summary: Create a service policy resource + description: Create a service policy resource. Requires admin access. + security: + - ztSession: [] + tags: + - Service Policy + operationId: createServicePolicy + parameters: + - name: Body + in: body + required: true + description: A service policy to create + schema: + $ref: '#/definitions/servicePolicyCreate' + responses: + '200': + $ref: '#/responses/createResponse' + '400': + $ref: '#/responses/badRequestResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + '/service-policies/{id}': + parameters: + - $ref: '#/parameters/id' + get: + summary: Retrieves a single service policy + description: Retrieves a single service policy by id. Requires admin access. + security: + - ztSession: [] + tags: + - Service Policy + operationId: detailServicePolicy + responses: + '200': + $ref: '#/responses/detailServicePolicy' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + put: + summary: Update all fields on a service policy + description: Update all fields on a service policy by id. Requires admin access. + security: + - ztSession: [] + tags: + - Service Policy + operationId: updateServicePolicy + parameters: + - name: Body + in: body + required: true + description: A service policy update object + schema: + $ref: '#/definitions/servicePolicyUpdate' + responses: + '200': + $ref: '#/responses/updateResponse' + '400': + $ref: '#/responses/badRequestResponse' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + patch: + summary: Update the supplied fields on a service policy + description: Update the supplied fields on a service policy. Requires admin access. + security: + - ztSession: [] + tags: + - Service Policy + operationId: patchServicePolicy + parameters: + - name: Body + in: body + required: true + description: A service policy patch object + schema: + $ref: '#/definitions/servicePolicyPatch' + responses: + '200': + $ref: '#/responses/patchResponse' + '400': + $ref: '#/responses/badRequestResponse' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + delete: + summary: Delete a service policy + description: Delete a service policy by id. Requires admin access. + security: + - ztSession: [] + tags: + - Service Policy + operationId: deleteServicePolicy + responses: + '200': + $ref: '#/responses/deleteResponse' + '400': + $ref: '#/responses/badRequestResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + '409': + $ref: '#/responses/cannotDeleteReferencedResourceResponse' + '/service-policies/{id}/identities': + parameters: + - $ref: '#/parameters/id' + get: + summary: List identities a service policy affects + description: | + Retrieves a list of identity resources that are affected by a service policy; supports filtering, sorting, and pagination. Requires admin access. + security: + - ztSession: [] + tags: + - Service Policy + operationId: listServicePolicyIdentities + parameters: + - $ref: '#/parameters/limit' + - $ref: '#/parameters/offset' + - $ref: '#/parameters/filter' + responses: + '200': + $ref: '#/responses/listIdentities' + '401': + $ref: '#/responses/unauthorizedResponse' + '400': + $ref: '#/responses/notFoundResponse' + '/service-policies/{id}/services': + parameters: + - $ref: '#/parameters/id' + get: + summary: List services a service policy affects + description: | + Retrieves a list of service resources that are affected by a service policy; supports filtering, sorting, and pagination. Requires admin access. + security: + - ztSession: [] + tags: + - Service Policy + operationId: listServicePolicyServices + parameters: + - $ref: '#/parameters/limit' + - $ref: '#/parameters/offset' + - $ref: '#/parameters/filter' + responses: + '200': + $ref: '#/responses/listServices' + '401': + $ref: '#/responses/unauthorizedResponse' + '400': + $ref: '#/responses/notFoundResponse' + + ################################################################### + # Services + ################################################################## + '/services': + get: + summary: List services + description: | + Retrieves a list of config resources; supports filtering, sorting, and pagination. Requires admin access. + security: + - ztSession: [] + tags: + - Service + operationId: listServices + parameters: + - $ref: '#/parameters/limit' + - $ref: '#/parameters/offset' + - $ref: '#/parameters/filter' + responses: + '200': + $ref: '#/responses/listServices' + '401': + $ref: '#/responses/unauthorizedResponse' + post: + summary: Create a services resource + description: Create a services resource. Requires admin access. + security: + - ztSession: [] + tags: + - Service + operationId: createService + parameters: + - name: Body + in: body + required: true + description: A service to create + schema: + $ref: '#/definitions/serviceCreate' + responses: + '200': + $ref: '#/responses/createResponse' + '400': + $ref: '#/responses/badRequestResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + '/services/{id}': + parameters: + - $ref: '#/parameters/id' + get: + summary: Retrieves a single service + description: Retrieves a single service by id. Requires admin access. + security: + - ztSession: [] + tags: + - Service + operationId: detailService + responses: + '200': + $ref: '#/responses/detailService' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + put: + summary: Update all fields on a service + description: Update all fields on a service by id. Requires admin access. + security: + - ztSession: [] + tags: + - Service + operationId: updateService + parameters: + - name: Body + in: body + required: true + description: A service update object + schema: + $ref: '#/definitions/serviceUpdate' + responses: + '200': + $ref: '#/responses/updateResponse' + '400': + $ref: '#/responses/badRequestResponse' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + patch: + summary: Update the supplied fields on a service + description: Update the supplied fields on a service. Requires admin access. + security: + - ztSession: [] + tags: + - Service + operationId: patchService + parameters: + - name: Body + in: body + required: true + description: A service patch object + schema: + $ref: '#/definitions/servicePatch' + responses: + '200': + $ref: '#/responses/patchResponse' + '400': + $ref: '#/responses/badRequestResponse' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + delete: + summary: Delete a service + description: Delete a service by id. Requires admin access. + security: + - ztSession: [] + tags: + - Service + operationId: deleteService + responses: + '200': + $ref: '#/responses/deleteResponse' + '400': + $ref: '#/responses/badRequestResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + '409': + $ref: '#/responses/cannotDeleteReferencedResourceResponse' + '/services/{id}/configs': + parameters: + - $ref: '#/parameters/id' + get: + summary: List configs associated to a specific service + description: | + Retrieves a list of config resources associated to a specific service; supports filtering, sorting, and pagination. Requires admin access. + security: + - ztSession: [] + tags: + - Service + operationId: listServiceConfig + parameters: + - $ref: '#/parameters/limit' + - $ref: '#/parameters/offset' + - $ref: '#/parameters/filter' + responses: + '200': + $ref: '#/responses/listConfigs' + '401': + $ref: '#/responses/unauthorizedResponse' + '/services/{id}/service-edge-router-policies': + parameters: + - $ref: '#/parameters/id' + get: + summary: List service edge router policies that affect a specific service + description: | + Retrieves a list of service edge router policy resources that affect a specific service; supports filtering, sorting, and pagination. Requires admin access. + security: + - ztSession: [] + tags: + - Service + operationId: listServiceServiceEdgeRouterPolicies + parameters: + - $ref: '#/parameters/limit' + - $ref: '#/parameters/offset' + - $ref: '#/parameters/filter' + responses: + '200': + $ref: '#/responses/listServiceEdgeRouterPolicies' + '401': + $ref: '#/responses/unauthorizedResponse' + '/services/{id}/service-policies': + parameters: + - $ref: '#/parameters/id' + get: + summary: List service policies that affect a specific service + description: | + Retrieves a list of service policy resources that affect specific service; supports filtering, sorting, and pagination. Requires admin access. + security: + - ztSession: [] + tags: + - Service + operationId: listServiceServicePolicies + parameters: + - $ref: '#/parameters/limit' + - $ref: '#/parameters/offset' + - $ref: '#/parameters/filter' + responses: + '200': + $ref: '#/responses/listServicePolicies' + '401': + $ref: '#/responses/unauthorizedResponse' + '/services/{id}/terminators': + parameters: + - $ref: '#/parameters/id' + get: + summary: List of terminators assigned to a service + description: | + Retrieves a list of terminator resources that are assigned specific service; supports filtering, sorting, and pagination. Requires admin access. + security: + - ztSession: [] + tags: + - Service + operationId: listServiceTerminators + parameters: + - $ref: '#/parameters/limit' + - $ref: '#/parameters/offset' + - $ref: '#/parameters/filter' + responses: + '200': + $ref: '#/responses/listTerminators' + '401': + $ref: '#/responses/unauthorizedResponse' + ################################################################### + # Sessions + ################################################################## + '/sessions': + get: + summary: List sessions + description: | + Retrieves a list of active sessions resources; supports filtering, sorting, and pagination. Requires admin access. + + Sessions are tied to an API session and are moved when an API session times out or logs out. Active sessions + (i.e. Ziti SDK connected to an edge router) will keep the session and API session marked as active. + security: + - ztSession: [] + tags: + - Session + operationId: listSessions + parameters: + - $ref: '#/parameters/limit' + - $ref: '#/parameters/offset' + - $ref: '#/parameters/filter' + responses: + '200': + $ref: '#/responses/listSessions' + '401': + $ref: '#/responses/unauthorizedResponse' + post: + summary: Create a session resource + description: Create a session resource. Requires admin access. + security: + - ztSession: [] + tags: + - Session + operationId: createSession + parameters: + - name: Body + in: body + required: true + description: A session to create + schema: + $ref: '#/definitions/sessionCreate' + responses: + '200': + $ref: '#/responses/createResponse' + '400': + $ref: '#/responses/badRequestResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + '/sessions/{id}': + parameters: + - $ref: '#/parameters/id' + get: + summary: Retrieves a single session + description: Retrieves a single session by id. Requires admin access. + security: + - ztSession: [] + tags: + - Session + operationId: detailSession + responses: + '200': + $ref: '#/responses/detailSession' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + delete: + summary: Delete a session + description: Delete a session by id. Requires admin access. + security: + - ztSession: [] + tags: + - Session + operationId: deleteSession + responses: + '200': + $ref: '#/responses/deleteResponse' + '400': + $ref: '#/responses/badRequestResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + '409': + $ref: '#/responses/cannotDeleteReferencedResourceResponse' + ################################################################### + # Terminators + ################################################################## + '/terminators': + get: + summary: List terminators + description: | + Retrieves a list of terminator resources; supports filtering, sorting, and pagination. Requires admin access. + security: + - ztSession: [] + tags: + - Terminator + operationId: listTerminators + parameters: + - $ref: '#/parameters/limit' + - $ref: '#/parameters/offset' + - $ref: '#/parameters/filter' + responses: + '200': + $ref: '#/responses/listTerminators' + '401': + $ref: '#/responses/unauthorizedResponse' + post: + summary: Create a terminator resource + description: Create a terminator resource. Requires admin access. + security: + - ztSession: [] + tags: + - Terminator + operationId: createTerminator + parameters: + - name: Body + in: body + required: true + description: A terminator to create + schema: + $ref: '#/definitions/terminatorCreate' + responses: + '200': + $ref: '#/responses/createResponse' + '400': + $ref: '#/responses/badRequestResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + '/terminators/{id}': + parameters: + - $ref: '#/parameters/id' + get: + summary: Retrieves a single terminator + description: Retrieves a single terminator by id. Requires admin access. + security: + - ztSession: [] + tags: + - Terminator + operationId: detailTerminator + responses: + '200': + $ref: '#/responses/detailTerminator' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + put: + summary: Update all fields on a terminator + description: Update all fields on a terminator by id. Requires admin access. + security: + - ztSession: [] + tags: + - Terminator + operationId: updateTerminator + parameters: + - name: Body + in: body + required: true + description: A terminator update object + schema: + $ref: '#/definitions/terminatorUpdate' + responses: + '200': + $ref: '#/responses/updateResponse' + '400': + $ref: '#/responses/badRequestResponse' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + patch: + summary: Update the supplied fields on a terminator + description: Update the supplied fields on a terminator. Requires admin access. + security: + - ztSession: [] + tags: + - Terminator + operationId: patchTerminator + parameters: + - name: Body + in: body + required: true + description: A terminator patch object + schema: + $ref: '#/definitions/terminatorPatch' + responses: + '200': + $ref: '#/responses/patchResponse' + '400': + $ref: '#/responses/badRequestResponse' + '404': + $ref: '#/responses/notFoundResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + delete: + summary: Delete a terminator + description: Delete a terminator by id. Requires admin access. + security: + - ztSession: [] + tags: + - Terminator + operationId: deleteTerminator + responses: + '200': + $ref: '#/responses/deleteResponse' + '400': + $ref: '#/responses/badRequestResponse' + '401': + $ref: '#/responses/unauthorizedResponse' + '409': + $ref: '#/responses/cannotDeleteReferencedResourceResponse' + +####################################################################################################################### +# +# Parameters - Reusable parameters +# +####################################################################################################################### +parameters: + id: + name: id + required: true + type: string + format: uuid + in: path + description: The id of the requested resource + limit: + name: limit + type: integer + in: query + offset: + name: offset + type: integer + in: query + filter: + name: filter + type: string + in: query + token: + name: token + type: string + format: uuid + in: query + required: true + authMethod: + name: method + in: query + required: true + type: string + enum: + - password + - cert + +####################################################################################################################### +# +# Responses - Envelope Wrapped Definitions +# +####################################################################################################################### +responses: + ################################################################### + # Errors + ################################################################## + badRequestResponse: + description: The supplied request contains invalid fields or could not be parsed (json and non-json bodies). The error's code, message, and cause fields can be inspected for further information + schema: + $ref: '#/definitions/apiErrorEnvelope' + examples: + 'application/json': + error: + args: + urlVars: {} + cause: + field: '(root)' + type: required + value: + fooField: abc + fooField2: def + message: '(root): fooField3 is required' + details: + context: '(root)' + field: '(root)' + property: fooField3 + causeMessage: schema validation failed + code: COULD_NOT_VALIDATE + message: The supplied request contains an invalid document + requestId: ac6766d6-3a09-44b3-8d8a-1b541d97fdd9 + meta: + apiEnrolmentVersion: 0.0.1 + apiVersion: 0.0.1 + unauthorizedResponse: + description: The currently supplied session does not have the correct access rights to request this resource + schema: + $ref: '#/definitions/apiErrorEnvelope' + examples: + 'application/json': + error: + args: + urlVars: {} + cause: '' + causeMessage: '' + code: UNAUTHORIZED + message: The request could not be completed. The session is not authorized or the + credentials are invalid + requestId: 0bfe7a04-9229-4b7a-812c-9eb3cc0eac0f + meta: + apiEnrolmentVersion: 0.0.1 + apiVersion: 0.0.1 + invalidAuthResponse: + description: The authentication request could not be processed as the credentials are invalid + schema: + $ref: '#/definitions/apiErrorEnvelope' + examples: + 'application/json': + error: + args: + urlVars: {} + cause: '' + causeMessage: '' + code: INVALID_AUTH + message: The authentication request failed + requestId: 5952ed10-3091-474f-a691-47ebab6990dc + meta: + apiEnrolmentVersion: 0.0.1 + apiVersion: 0.0.1 + notFoundResponse: + description: The requested resource does not exist + schema: + $ref: '#/definitions/apiErrorEnvelope' + examples: + 'application/json': + error: + args: + urlVars: + id: 71a3000f-7dda-491a-9b90-a19f4ee6c406 + cause: + causeMessage: '' + code: NOT_FOUND + message: The resource requested was not found or is no longer available + requestId: 270908d6-f2ef-4577-b973-67bec18ae376 + meta: + apiEnrolmentVersion: 0.0.1 + apiVersion: 0.0.1 + cannotDeleteReferencedResourceResponse: + description: The resource requested to be removed/altered cannot be as it is referenced by another object. + schema: + $ref: '#/definitions/apiErrorEnvelope' + examples: + 'application/json': + error: + args: + urlVars: + id: 71a3000f-7dda-491a-9b90-a19f4ee6c406 + causeMessage: 'referenced by /some-resource/05f4f710-c155-4a74-86d5-77558eb9cb42' + code: CONFLIC_CANNOT_MODIFY_REFERENCED + message: The resource cannot be deleted/modified. Remove all referencing resources first. + requestId: 270908d6-f2ef-4577-b973-67bec18ae376 + meta: + apiEnrolmentVersion: 0.0.1 + apiVersion: 0.0.1 + ################################################################### + # Standard Responses + ################################################################## + emptyResponse: + description: Base empty response + schema: + $ref: '#/definitions/empty' + deleteResponse: + description: The delete request was successful and the resource has been removed + schema: + $ref: '#/definitions/empty' + updateResponse: + description: The update request was successful and the resource has been altered + schema: + $ref: '#/definitions/empty' + patchResponse: + description: The patch request was successful and the resource has been altered + schema: + $ref: '#/definitions/empty' + createResponse: + description: The create request was successful and the resource has been added at the following location + schema: + $ref: '#/definitions/create' + ################################################################### + # Current Session + ################################################################## + detailCurrentAPISession: + description: The API session associated with the session used to issue the request + schema: + $ref: '#/definitions/currentAPISessionDetailEnvelope' + examples: + default: + meta: {} + data: + id: 27343114-b44f-406e-9981-f3c4f2f28d54 + createdAt: '2020-03-09T19:03:49.1883693Z' + updatedAt: '2020-03-09T19:04:21.5600897Z' + _links: + self: + href: './current-api-session' + tags: + - userField1: 123 + - userField2: asdf + token: 28bb0ed2-0577-4632-ae70-d17106b92871 + identity: + urlName: identities + id: 66352d7b-a6b2-4ce9-85bb-9f18e318704d + name: Default Admin + _links: + self: + href: './identities/66352d7b-a6b2-4ce9-85bb-9f18e318704d' + expiresAt: '2020-03-09T19:34:21.5600897Z' + configTypes: [] + + detailCurrentIdentity: + description: The identity associated with the API Session used to issue the request + schema: + $ref: '#/definitions/currentIdentityDetailEnvelope' + examples: + default: + meta: {} + data: + id: 66352d7b-a6b2-4ce9-85bb-9f18e318704d + createdAt: '2020-01-13T16:38:13.6854788Z' + updatedAt: '2020-01-13T16:38:13.6854788Z' + _links: + edge-router-policies: + href: './identities/66352d7b-a6b2-4ce9-85bb-9f18e318704d/edge-routers' + self: + href: './identities/66352d7b-a6b2-4ce9-85bb-9f18e318704d' + service-policies: + href: './identities/66352d7b-a6b2-4ce9-85bb-9f18e318704d/identities' + tags: {} + name: Default Admin + type: + urlName: identity-types + id: 577104f2-1e3a-4947-a927-7383baefbc9a + name: User + _links: + self: + href: './identity-types/577104f2-1e3a-4947-a927-7383baefbc9a' + isDefaultAdmin: true + isAdmin: true + authenticators: + updb: + username: admin + enrollment: {} + roleAttributes: + $ref: '#/definitions/attributes' + + ################################################################### + # API Session + ################################################################## + listAPISessions: + description: A list of active API Sessions + schema: + $ref: '#/definitions/listAPISessionsEnvelope' + detailAPISession: + description: Retrieves a singular API Session by id + schema: + $ref: '#/definitions/detailAPISessionEnvelope' + + ################################################################### + # Authenticators + ################################################################## + listAuthenticators: + description: A list of authenticators + schema: + $ref: '#/definitions/listAuthenticatorsEnvelope' + detailAuthenticator: + description: A singular authenticator resource + schema: + $ref: '#/definitions/detailAuthenticatorEnvelope' + ################################################################### + # Certificate Authority + ################################################################## + listCAs: + description: A list of Certificate Authorities (CAs) + schema: + $ref: '#/definitions/listCAsEnvelope' + detailCA: + description: A singular Certificate Authority (CA) resource + schema: + $ref: '#/definitions/detailCAEnvelope' + ################################################################### + # Config-Types + ################################################################## + listConfigTypes: + description: A list of config-types + schema: + $ref: '#/definitions/listConfigTypesEnvelope' + detailConfigType: + description: A singular config-type resource + schema: + $ref: '#/definitions/detailConfigTypeEnvelope' + ################################################################### + # Configs + ################################################################## + listConfigs: + description: A list of configs + schema: + $ref: '#/definitions/listConfigsEnvelope' + detailConfig: + description: A singular config resource + schema: + $ref: '#/definitions/detailConfigEnvelope' + ################################################################### + # Informational + ################################################################## + listVersion: + description: Version information for the controller + schema: + $ref: '#/definitions/listVersionEnvelope' + listSummaryCounts: + description: Entity counts scopped to the current identitie's access + schema: + $ref: '#/definitions/listSummaryCountsEnvelope' + ################################################################### + # Enrollments + ################################################################## + listEnrollments: + description: A list of enrollments + schema: + $ref: '#/definitions/listEnrollmentsEnvelope' + detailEnrollment: + description: A singular enrollment resource + schema: + $ref: '#/definitions/detailEnrollmentEnvelope' + zitiSignedCert: + description: A PEM encoded certificate signed by the internal Ziti CA + schema: + type: string + examples: + application/x-x509-user-cert: | + -----BEGIN CERTIFICATE----- + MIICzDCCAlGgAwIBAgIRAPkVg1jVKqnNGFpSB3lPbaIwCgYIKoZIzj0EAwIwXjEL + MAkGA1UEBhMCVVMxCzAJBgNVBAgMAk5DMRMwEQYDVQQKDApOZXRGb3VuZHJ5MS0w + KwYDVQQDDCROZXRGb3VuZHJ5IFppdGkgRXh0ZXJuYWwgQVBJIFJvb3QgQ0EwHhcN + MTgxMTE1MTI1NzE3WhcNMTkxMTI1MTI1NzE3WjBrMQswCQYDVQQGEwJVUzELMAkG + A1UECAwCTkMxEjAQBgNVBAcMCUNoYXJsb3R0ZTETMBEGA1UECgwKTmV0Rm91bmRy + eTEPMA0GA1UECwwGQWR2RGV2MRUwEwYDVQQDDAxaaXRpQ2xpZW50MDEwdjAQBgcq + hkjOPQIBBgUrgQQAIgNiAATTl2ft+/K9RvDgki9gSr9udNcV2bxD4LrWEdCdXNzF + iVUiEcEte9z/M0JRt8lgo17OjFvS+ecrAmLtIZNmQnH3+9YeafjeNPpvQsMKxlTN + MnU7Hka11GHc6swQZSyHvlKjgcUwgcIwCQYDVR0TBAIwADARBglghkgBhvhCAQEE + BAMCBaAwMwYJYIZIAYb4QgENBCYWJE9wZW5TU0wgR2VuZXJhdGVkIENsaWVudCBD + ZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUtx+Tej6lSYdjb8Jbc2QuvoEsI/swHwYDVR0j + BBgwFoAUcdTlRrnP43ZbQ3PGAbZMPE26+H4wDgYDVR0PAQH/BAQDAgXgMB0GA1Ud + JQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDBDAKBggqhkjOPQQDAgNpADBmAjEAuXDS + H7KKMr+la+Yuh8d8Q9cLtXzdS0j6a8e7iOyPJmdWq2WuzNdbCfAfLgKXuxhSAjEA + sadZrXl1OBv11RGAKdYBIyRmfYUotCFAtCNKcfgBUxci0TDaKDA7r3jnjKT1d7Fs + -----END CERTIFICATE----- + erottResponse: + description: A response containing the edge routers signed certificates (server chain, server cert, CAs). + schema: + $ref: '#/definitions/erott' + ################################################################### + # Edge Routers + ################################################################## + listEdgeRouters: + description: A list of edge routers + schema: + $ref: '#/definitions/listEdgeRoutersEnvelope' + detailEdgeRouter: + description: A singular edge router resource + schema: + $ref: '#/definitions/detailedEdgeRouterEnvelope' + ################################################################### + # Edge Router Policies + ################################################################## + listEdgeRouterPolicies: + description: A list of edge router policies + schema: + $ref: '#/definitions/listEdgeRouterPoliciesEnvelope' + detailEdgeRouterPolicy: + description: A single ege router policy + schema: + $ref: '#/definitions/detailEdgeRouterPolicyEnvelope' + + ################################################################### + # Service Policies + ################################################################## + listServicePolicies: + description: A list of service policies + schema: + $ref: '#/definitions/listServicePoliciesEnvelope' + detailServicePolicy: + description: A signle service policy + schema: + $ref: '#/definitions/detailServicePolicyEnvelop' + ################################################################### + # Services + ################################################################## + listServices: + description: A list of services + schema: + $ref: '#/definitions/listServicesEnvelope' + detailService: + description: A single service + schema: + $ref: '#/definitions/detailServiceEnvelope' + ################################################################### + # Identities + ################################################################## + listIdentities: + description: A list of identities + schema: + $ref: '#/definitions/listIdentitiesEnvelope' + detailIdentity: + description: A signle identity + schema: + $ref: '#/definitions/detailIdentityEnvelope' + ################################################################### + # Geo Regions + ################################################################## + listGeoRegions: + description: A list of geo-regions + schema: + $ref: '#/definitions/listGeoRegionsEnvelope' + detailGeoRegion: + description: A single geo-region + schema: + $ref: '#/definitions/detailGeoRegionEnvelope' + ################################################################### + # Identity-Types + ################################################################## + listIdentityTypes: + description: A list of identity types + schema: + $ref: '#/definitions/listIdentityTypesEnvelope' + detailIdentityType: + description: A single identity type + schema: + $ref: '#/definitions/detailIdentityTypeEnvelope' + ################################################################### + # Service Configs + ################################################################## + listServiceConfigs: + description: A list of service configs + schema: + $ref: '#/definitions/listServiceConfigsEnvelope' + ################################################################### + # Service Edge Router Policies + ################################################################## + listServiceEdgeRouterPolicies: + description: A list of service edge router policies + schema: + $ref: '#/definitions/listServiceEdgeRouterPoliciesEnvelope' + detailServiceEdgePolicy: + description: A single service edge router policy + schema: + $ref: '#/definitions/detailServiceEdgePolicyEnvelope' + ################################################################### + # Sessions + ################################################################## + listSessions: + description: A list of sessions + schema: + $ref: '#/definitions/listSessionsEnvelope' + detailSession: + description: A single session + schema: + $ref: '#/definitions/detailSessionEnvelope' + ################################################################### + # Terminators + ################################################################## + listTerminators: + description: A list of terminators + schema: + $ref: '#/definitions/listTerminatorsEnvelope' + detailTerminator: + description: A single terminator + schema: + $ref: '#/definitions/detailTerminatorEnvelope' + ################################################################### + # Specs + ################################################################## + listSpecs: + description: A list of specifications + schema: + $ref: '#/definitions/listSpecsEnvelope' + detailSpec: + description: A single specification + schema: + $ref: '#/definitions/detailSpecEnvelope' + detailSpecBody: + description: Returns the document that represents the specification + schema: + $ref: '#/definitions/detailSpecBodyEnvelope' +####################################################################################################################### +# +# Definitions - In & Out Models Only +# +####################################################################################################################### +definitions: + ################################################################### + # Shared Definitions + ################################################################## + link: + description: A link to another resource + type: object + required: + - href + properties: + href: + type: string + format: uri + method: + type: string + comment: + type: string + links: + description: A map of named links + type: object + additionalProperties: + $ref: '#/definitions/link' + entityRef: + description: A reference to another resource and links to interact with it + type: object + properties: + entity: + type: string + id: + type: string + name: + type: string + _links: + $ref: '#/definitions/links' + tags: + description: 'A map of user defined fields and values. The values are limited to the following types/values: null, string, boolean' + type: object + additionalProperties: true + properties: {} + attributes: + description: A set of strings used to loosly couple this resource to policies + type: array + items: + type: string + roles: + type: array + items: + type: string + semantic: + type: string + enum: + - AllOf + - OneOf + dialBind: + type: string + enum: + - Dial + - Bind + ################################################################### + # Authentication + ################################################################## + password: + type: string + minLength: 5 + maxLength: 100 + username: + type: string + minLength: 4 + maxLength: 100 + authenticate: + type: object + description: A generic authenticate object meant for use with the /authenticate path. Required fields depend on authentication method. + properties: + username: + $ref: '#/definitions/username' + password: + $ref: '#/definitions/password' + envInfo: + $ref: '#/definitions/envInfo' + sdkInfo: + $ref: '#/definitions/sdkInfo' + configTypes: + $ref: '#/definitions/configTypes' + authenticateUPDB: + type: object + description: A username and password pair + required: [username, password] + properties: + username: + $ref: '#/definitions/username' + password: + $ref: '#/definitions/password' + envInfo: + $ref: '#/definitions/envInfo' + sdkInfo: + $ref: '#/definitions/sdkInfo' + configTypes: + $ref: '#/definitions/configTypes' + authenticateCert: + type: object + description: A cert based authentication request. The certificate used by the client as its TLS client certificate will be interrogated for authentication + properties: + envInfo: + $ref: '#/definitions/envInfo' + sdkInfo: + $ref: '#/definitions/sdkInfo' + configTypes: + $ref: '#/definitions/configTypes' + ################################################################### + # Current Session + ################################################################## + apiSessionList: + type: array + items: + $ref: '#/definitions/apiSessionDetail' + apiSessionDetail: + description: An API Session object + type: object + properties: + id: + type: string + format: uuid + createdAt: + type: string + format: date-time + updatedAt: + type: string + format: date-time + _links: + $ref: '#/definitions/links' + tags: + $ref: '#/definitions/tags' + token: + type: string + identity: + allOf: + - $ref: '#/definitions/entityRef' + ################################################################### + # Identities + ################################################################## + identityCreate: + description: An identity to create + type: object + properties: + name: + type: string + type: + type: string + enum: + - User + - Device + - Service + isAdmin: + type: boolean + enrollment: + type: object + properties: + ott: + type: boolean + updb: + type: string + ottca: + type: string + format: uuid + tags: + $ref: '#/definitions/tags' + identityUpdate: + type: object + required: + - type + - name + - isAdmin + - tags + properties: + name: + type: string + type: + type: string + enum: + - User + - Device + - Service + isAdmin: + type: boolean + tags: + $ref: '#/definitions/tags' + identityPatch: + type: object + properties: + name: + type: string + type: + type: string + enum: + - User + - Device + - Service + isAdmin: + type: boolean + identityList: + description: A list of identities + type: array + items: + $ref: '#/definitions/identityDetail' + identityDetail: + description: Detail of a specific identity + type: object + properties: + id: + type: string + format: uuid + createdAt: + type: string + format: date-time + updatedAt: + type: string + format: date-time + _links: + $ref: '#/definitions/links' + tags: + $ref: '#/definitions/tags' + name: + type: string + type: + $ref: '#/definitions/entityRef' + isDefaultAdmin: + type: boolean + isAdmin: + type: boolean + authenticators: + properties: + updb: + properties: + username: + type: string + type: object + type: object + enrollment: + properties: {} + type: object + ################################################################### + # Authenticator + ################################################################## + authenticatorCreate: + description: Creates an authenticator for a specific identity which can be used for API authentication + type: object + properties: + username: + type: string + description: The username that the identity will login with. Used only for method='updb' + password: + type: string + description: The password the identity will login with, Used only for method='updb' + method: + type: string + description: The type of authenticator to create; which will dictate which properties on this object are required. + identityId: + type: string + format: uuid + description: The id of an existing identity that will be assigned this authenticator + tags: + $ref: '#/definitions/tags' + authenticatorList: + description: An array of authenticator resources + type: array + items: + $ref: '#/definitions/apiSessionDetail' + authenticatorDetail: + description: A singular authenticator resource + type: object + properties: + id: + type: string + format: uuid + createdAt: + type: string + format: date-time + updatedAt: + type: string + format: date-time + _links: + $ref: '#/definitions/links' + method: + type: string + identityId: + type: string + format: uuid + certPem: + type: string + fingerprint: + type: string + authenticatorUpdate: + description: All of the fields on an authenticator that will be updated + type: object + required: + - username + - password + properties: + username: + $ref: '#/definitions/username' + password: + $ref: '#/definitions/password' + authenticatorPatch: + description: All of the fields on an authenticator that may be updated + type: object + properties: + username: + $ref: '#/definitions/username' + password: + $ref: '#/definitions/password' + ################################################################### + # Certificate Authorities + ################################################################## + caList: + description: An array of Certificate Authority (CA) resources + type: array + items: + $ref: '#/definitions/caDetail' + caDetail: + description: A Certificate Authority (CA) resource + type: object + properties: + id: + type: string + format: uuid + createdAt: + type: string + format: date-time + updatedAt: + type: string + format: date-time + _links: + $ref: '#/definitions/links' + tags: + $ref: '#/definitions/tags' + name: + type: string + fingerprint: + type: string + certPem: + type: string + isVerified: + type: boolean + example: false + verificationToken: + type: string + format: uuid + isAutoCaEnrollmentEnabled: + type: boolean + example: true + isOttCaEnrollmentEnabled: + type: boolean + example: true + isAuthEnabled: + type: boolean + example: true + example: + id: c0db0ec1-f0ac-461e-8dbf-0597ad33dd8c + createdAt: '2020-03-10T15:20:40.4301069Z' + updatedAt: '2020-03-10T15:20:40.4301069Z' + _links: + jwt: + href: './cas/c0db0ec1-f0ac-461e-8dbf-0597ad33dd8c/jwt' + method: GET + self: + href: './cas/c0db0ec1-f0ac-461e-8dbf-0597ad33dd8c' + verify: + href: './cas/c0db0ec1-f0ac-461e-8dbf-0597ad33dd8c/verify' + method: POST + tags: + externalId: '1234567489' + name: Test 3rd Party External CA-505d3728-6c4b-473b-8050-4862f8cf997c + fingerprint: 95:F1:95:C3:6D:B0:1E:4A:70:63:A7:E3:AB:8E:B2:B1:B4:10:BD:DB + certPem: |- + -----BEGIN CERTIFICATE----- + MIICUjCCAdmgAwIBAgIJANooo7NB+dZZMAoGCCqGSM49BAMCMF4xCzAJBgNVBAYT + AlVTMQswCQYDVQQIDAJOQzETMBEGA1UECgwKTmV0Rm91bmRyeTEtMCsGA1UEAwwk + TmV0Rm91bmRyeSBaaXRpIEV4dGVybmFsIEFQSSBSb290IENBMB4XDTE4MTExNTEy + NTcwOVoXDTM4MTExMDEyNTcwOVowXjELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAk5D + MRMwEQYDVQQKDApOZXRGb3VuZHJ5MS0wKwYDVQQDDCROZXRGb3VuZHJ5IFppdGkg + RXh0ZXJuYWwgQVBJIFJvb3QgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARwq61Z + Iaqbaw0PDt3frJZaHjkxfZhwYrykI1GlbRNd/jix03lVG9qvpN5Og9fQfFFcFmD/ + 3vCE9S6O0npm0mADQxcBcxbMRAH5dtBuCuiJW6qAAbPgiM32vqSxBiFt0KejYzBh + MB0GA1UdDgQWBBRx1OVGuc/jdltDc8YBtkw8Tbr4fjAfBgNVHSMEGDAWgBRx1OVG + uc/jdltDc8YBtkw8Tbr4fjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB + hjAKBggqhkjOPQQDAgNnADBkAjBDRxNZUaIVpkQKnAgJukl3ysd3/i7Z6hDyIEms + kllz/+ZvmdBp9iedV5o5BvJUggACMCv+UBFlJH7pmsOCo/F45Kk178YsCC7gaMxE + 1ZG1zveyMvsYsH04C9FndE6w2MLvlA== + -----END CERTIFICATE----- + isVerified: false + verificationToken: 53065a7d-a535-4072-86a2-dd55b71f779c + isAutoCaEnrollmentEnabled: true + isOttCaEnrollmentEnabled: true + isAuthEnabled: true + caCreate: + description: A create Certificate Authority (CA) object + type: object + required: + - name + - certPem + properties: + name: + type: string + example: 'Test 3rd Party External CA' + isAutoCaEnrollmentEnabled: + type: boolean + example: true + isAuthEnabled: + type: boolean + example: true + isOttCaEnrollmentEnabled: + type: boolean + example: true + certPem: + type: string + example: '-----BEGIN CERTIFICATE-----\nMIICUjCCAdmgAwIBAgIJANooo7NB+dZZMAoGCCqGSM49BAMCMF4xCzAJBgNVBAYT\nAlVTMQswCQYDVQQIDAJOQzETMBEGA1UECgwKTmV0Rm91bmRyeTEtMCsGA1UEAwwk\nTmV0Rm91bmRyeSBaaXRpIEV4dGVybmFsIEFQSSBSb290IENBMB4XDTE4MTExNTEy\nNTcwOVoXDTM4MTExMDEyNTcwOVowXjELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAk5D\nMRMwEQYDVQQKDApOZXRGb3VuZHJ5MS0wKwYDVQQDDCROZXRGb3VuZHJ5IFppdGkg\nRXh0ZXJuYWwgQVBJIFJvb3QgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARwq61Z\nIaqbaw0PDt3frJZaHjkxfZhwYrykI1GlbRNd/jix03lVG9qvpN5Og9fQfFFcFmD/\n3vCE9S6O0npm0mADQxcBcxbMRAH5dtBuCuiJW6qAAbPgiM32vqSxBiFt0KejYzBh\nMB0GA1UdDgQWBBRx1OVGuc/jdltDc8YBtkw8Tbr4fjAfBgNVHSMEGDAWgBRx1OVG\nuc/jdltDc8YBtkw8Tbr4fjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB\nhjAKBggqhkjOPQQDAgNnADBkAjBDRxNZUaIVpkQKnAgJukl3ysd3/i7Z6hDyIEms\nkllz/+ZvmdBp9iedV5o5BvJUggACMCv+UBFlJH7pmsOCo/F45Kk178YsCC7gaMxE\n1ZG1zveyMvsYsH04C9FndE6w2MLvlA==\n-----END CERTIFICATE-----' + tags: + $ref: '#/definitions/tags' + example: + name: Test 3rd Party External CA + isAutoCaEnrollmentEnabled: true + isAuthEnabled: true + isOttCaEnrollmentEnabled: true + certPem: |- + -----BEGIN CERTIFICATE----- + MIICUjCCAdmgAwIBAgIJANooo7NB+dZZMAoGCCqGSM49BAMCMF4xCzAJBgNVBAYT + AlVTMQswCQYDVQQIDAJOQzETMBEGA1UECgwKTmV0Rm91bmRyeTEtMCsGA1UEAwwk + TmV0Rm91bmRyeSBaaXRpIEV4dGVybmFsIEFQSSBSb290IENBMB4XDTE4MTExNTEy + NTcwOVoXDTM4MTExMDEyNTcwOVowXjELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAk5D + MRMwEQYDVQQKDApOZXRGb3VuZHJ5MS0wKwYDVQQDDCROZXRGb3VuZHJ5IFppdGkg + RXh0ZXJuYWwgQVBJIFJvb3QgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARwq61Z + Iaqbaw0PDt3frJZaHjkxfZhwYrykI1GlbRNd/jix03lVG9qvpN5Og9fQfFFcFmD/ + 3vCE9S6O0npm0mADQxcBcxbMRAH5dtBuCuiJW6qAAbPgiM32vqSxBiFt0KejYzBh + MB0GA1UdDgQWBBRx1OVGuc/jdltDc8YBtkw8Tbr4fjAfBgNVHSMEGDAWgBRx1OVG + uc/jdltDc8YBtkw8Tbr4fjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB + hjAKBggqhkjOPQQDAgNnADBkAjBDRxNZUaIVpkQKnAgJukl3ysd3/i7Z6hDyIEms + kllz/+ZvmdBp9iedV5o5BvJUggACMCv+UBFlJH7pmsOCo/F45Kk178YsCC7gaMxE + 1ZG1zveyMvsYsH04C9FndE6w2MLvlA== + -----END CERTIFICATE----- + tags: + externalId: '1234567489' + caUpdate: + type: object + required: + - name + - isAutoCaEnrollmentEnabled + - isOttCaEnrollmentEnabled + - isAuthEnabled + properties: + name: + type: string + example: My CA + isAutoCaEnrollmentEnabled: + type: boolean + example: true + isOttCaEnrollmentEnabled: + type: boolean + example: true + isAuthEnabled: + type: boolean + example: true + tags: + $ref: '#/definitions/tags' + caPatch: + type: object + properties: + name: + type: string + example: My CA + isAutoCaEnrollmentEnabled: + type: boolean + example: true + isOttCaEnrollmentEnabled: + type: boolean + example: true + isAuthEnabled: + type: boolean + example: true + tags: + $ref: '#/definitions/tags' + ################################################################### + # Config-Types + ################################################################## + configTypeList: + description: An array of config-type resources + type: array + items: + $ref: '#/definitions/configTypeDetail' + configTypeDetail: + description: A config-type resource + type: object + properties: + id: + type: string + format: uuid + example: cea49285-6c07-42cf-9f52-09a9b115c783 + createdAt: + type: string + format: date-time + example: 2020-02-06T18:50:32.7812998Z + updatedAt: + type: string + format: date-time + example: 2020-02-06T18:50:32.7812998Z + _links: + $ref: '#/definitions/links' + tags: + $ref: '#/definitions/tags' + name: + type: string + example: ziti-tunneler-server.v1 + schema: + description: A JSON schema to enforce configuration against + type: object + configTypeCreate: + type: object + description: A config-type create object + required: + - name + - schema + properties: + tags: + $ref: '#/definitions/tags' + name: + type: string + example: ziti-tunneler-server.v1 + schema: + description: A JSON schema to enforce configuration against + type: object + configTypeUpdate: + description: A config-type update object + type: object + required: + - name + - schema + properties: + tags: + $ref: '#/definitions/tags' + name: + type: string + example: ziti-tunneler-server.v1 + schema: + description: A JSON schema to enforce configuration against + type: object + configTypePatch: + description: A config-type patch object + type: object + properties: + tags: + $ref: '#/definitions/tags' + name: + type: string + example: ziti-tunneler-server.v1 + schema: + description: A JSON schema to enforce configuration against + type: object + ################################################################### + # Configs + ################################################################## + configList: + description: An array of config resources + type: array + items: + $ref: '#/definitions/configDetail' + configDetail: + description: A config resource + type: object + properties: + id: + type: string + format: uuid + createdAt: + type: string + format: date-time + updatedAt: + type: string + format: date-time + _links: + $ref: '#/definitions/links' + tags: + $ref: '#/definitions/tags' + name: + type: string + type: + $ref: '#/definitions/entityRef' + data: + type: object + description: The data section of a config is based on the schema of its type + configCreate: + type: object + description: A config create object + required: + - name + - type + - data + properties: + tags: + $ref: '#/definitions/tags' + name: + type: string + example: default.ziti-tunneler-server.v1 + type: + type: string + format: uuid + description: The id of a config-type that the data section will match + data: + type: object + description: Data payload is defined by the schema of the config-type defined in the type parameter + example: + name: test-config + type: cea49285-6c07-42cf-9f52-09a9b115c783 + data: + hostname: example.com + port: 80 + configUpdate: + type: object + description: A config update object + required: + - name + - data + properties: + tags: + $ref: '#/definitions/tags' + name: + type: string + example: default.ziti-tunneler-server.v1 + data: + type: object + description: Data payload is defined by the schema of the config-type defined in the type parameter + example: + name: example-config-name + data: + hostname: example.com + port: 80 + configPatch: + type: object + description: A config patch object + properties: + tags: + $ref: '#/definitions/tags' + name: + type: string + example: default.ziti-tunneler-server.v1 + data: + type: object + description: Data payload is defined by the schema of the config-type defined in the type parameter + example: + name: example-config-name + data: + hostname: example.com + port: 80 + ################################################################### + # Enrollments + ################################################################## + enrollmentDetail: + type: object + description: | + An enrollment object. Enrolments are tied to identities and portentially a CA. Depending on the + method, different fields are utilized. For example ottca enrollments use the `ca` field and updb enrollments + use the username field, but not vice versa. + properties: + id: + type: string + format: uuid + createdAt: + type: string + format: date-time + updatedAt: + type: string + format: date-time + _links: + $ref: '#/definitions/links' + token: + type: string + method: + type: string + expiresAt: + type: string + identity: + $ref: '#/definitions/entityRef' + username: + type: string + details: + type: object + additionalProperties: + type: string + example: + id: 624fa53f-7629-4a7a-9e38-c1f4ce322c1d + createdAt: '0001-01-01T00:00:00Z' + updatedAt: '0001-01-01T00:00:00Z' + _links: + self: + href: './enrollments/624fa53f-7629-4a7a-9e38-c1f4ce322c1d' + tags: + token: 1e727c8f-07e4-4a1d-a8b0-da0c7a01c6e1 + method: updb + expiresAt: '2020-03-11T20:20:24.0055543Z' + identity: + urlName: identities + id: f047ac96-dc3a-408a-a6f2-0ba487c08ef9 + name: updb--0f245140-7f2e-4326-badf-6aba55e52475 + _links: + self: + href: './identities/f047ac96-dc3a-408a-a6f2-0ba487c08ef9' + ca: + username: example-username + enrollmentList: + description: An array of enrollment resources + type: array + items: + $ref: '#/definitions/enrollmentDetail' + ################################################################### + # Edge Routers + ################################################################## + edgeRouterCreate: + description: An edge router create object + type: object + required: + - name + properties: + name: + type: string + roleAttributes: + $ref: '#/definitions/attributes' + tags: + $ref: '#/definitions/tags' + edgeRouterUpdate: + description: An edge router update object + type: object + required: + - name + - tags + properties: + name: + type: string + roleAttributes: + $ref: '#/definitions/attributes' + tags: + $ref: '#/definitions/tags' + edgeRouterPatch: + description: An edge router patch object + type: object + properties: + name: + type: string + roleAttributes: + $ref: '#/definitions/attributes' + tags: + $ref: '#/definitions/tags' + edgeRouterList: + description: A list of edge router resources + type: array + items: + $ref: '#/definitions/edgeRouterDetail' + edgeRouterDetail: + description: A detail edge router resource + type: object + properties: + id: + type: string + format: uuid + createdAt: + type: string + format: date-time + updatedAt: + type: string + format: date-time + _links: + $ref: '#/definitions/links' + tags: + $ref: '#/definitions/tags' + name: + type: string + isVerified: + type: boolean + isOnline: + type: boolean + enrollmentToken: + type: string + enrollmentJwt: + type: string + enrollmentCreatedAt: + type: string + format: date-time + enrollmentExpiresAt: + type: string + format: date-time + hostname: + type: string + supportedProtocols: + additionalProperties: + type: string + type: object + example: + id: b0766b8d-bd1a-4d28-8415-639b29d3c83d + createdAt: '2020-03-16T17:13:31.5807454Z' + updatedAt: '2020-03-16T17:13:31.5807454Z' + _links: + edge-router-policies: + href: "./edge-routers/b0766b8d-bd1a-4d28-8415-639b29d3c83d/edge-routers" + self: + href: "./edge-routers/b0766b8d-bd1a-4d28-8415-639b29d3c83d" + tags: {} + name: TestGateway-e33c837f-3222-4b40-bcd6-b3458fd5156e + fingerprint: + roleAttributes: + - eastCoast + - sales + - test + isVerified: false + isOnline: false + enrollmentToken: 30a1f0ea-d39b-4aae-b852-304cf1c30d1f + enrollmentJwt: 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbSI6ImVyb3R0IiwiZXhwIjoxNTg0Mzc5MTExLCJpc3MiOiJodHRwczovL + 2xvY2FsaG9zdDoxMjgwIiwianRpIjoiMzBhMWYwZWEtZDM5Yi00YWFlLWI4NTItMzA0Y2YxYzMwZDFmIiwic3ViIjoiYjA3NjZiOGQtYmQxYS00ZDI + 4LTg0MTUtNjM5YjI5ZDNjODNkIn0.UsyQhCPORQ5tQnYWY7S88LNvV9iFS5Hy-P4aJaClZzEICobKgnQoyQblJcdMvk3cGKwyFqAnQtt0tDZkb8tHz + Vqyv6bilHcAFuMRrdwXRqdXquabSN5geu2qBUnyzL7Mf2X85if8sbMida6snB4oLZsVRF3CRn4ODBJdeiVJ_Z4rgD-zW2IwtXPApT7ALyiiw2cN4EH + 8pqQ7tpZKqztE0PGEbBQFPGKUFnm7oXyvSUo17EsFJUv5gUlBzfKKGolh5io4ptp22HZrqsqSnqDSOnYEZHonr5Yljuwiktrlh-JKiK6GGns5OAJMP + dO9lgM4yHSpF2ILbqhWMV93Y3zMOg' + enrollmentCreatedAt: '2020-03-16T17:13:31.5777637Z' + enrollmentExpiresAt: '2020-03-16T17:18:31.5777637Z' + hostname: '' + supportedProtocols: {} + ################################################################### + # Edge Router Policies + ################################################################## + edgeRouterPolicyCreate: + required: + - name + properties: + name: + type: string + semantic: + $ref: '#/definitions/semantic' + edgeRouterRoles: + $ref: '#/definitions/roles' + identityRoles: + $ref: '#/definitions/roles' + tags: + $ref: '#/definitions/tags' + edgeRouterPolicyUpdate: + required: + - name + properties: + name: + type: string + semantic: + $ref: '#/definitions/semantic' + edgeRouterRoles: + $ref: '#/definitions/roles' + identityRoles: + $ref: '#/definitions/roles' + tags: + $ref: '#/definitions/tags' + edgeRouterPolicyPatch: + required: + - name + properties: + name: + type: string + semantic: + $ref: '#/definitions/semantic' + edgeRouterRoles: + $ref: '#/definitions/roles' + identityRoles: + $ref: '#/definitions/roles' + tags: + $ref: '#/definitions/tags' + edgeRouterPolicyList: + type: array + items: + $ref: '#/definitions/edgeRouterPolicyDetail' + edgeRouterPolicyDetail: + type: object + properties: + id: + type: string + format: uuid + createdAt: + type: string + format: date-time + updatedAt: + type: string + format: date-time + _links: + $ref: '#/definitions/links' + tags: + $ref: '#/definitions/tags' + name: + type: string + semantic: + $ref: '#/definitions/semantic' + edgeRouterRoles: + type: array + items: + type: string + identityRoles: + type: array + items: + type: string + ################################################################### + # Service Policies + ################################################################## + servicePolicyList: + type: array + items: + $ref: '#/definitions/servicePolicyDetail' + servicePolicyDetail: + type: object + properties: + id: + type: string + format: uuid + createdAt: + type: string + format: date-time + updatedAt: + type: string + format: date-time + _links: + $ref: '#/definitions/links' + tags: + $ref: '#/definitions/tags' + name: + type: string + type: + $ref: '#/definitions/dialBind' + semantic: + $ref: '#/definitions/semantic' + serviceRoles: + $ref: '#/definitions/roles' + identityRoles: + $ref: '#/definitions/roles' + servicePolicyCreate: + type: object + required: + - name + - type + properties: + tags: + $ref: '#/definitions/tags' + name: + type: string + type: + $ref: '#/definitions/dialBind' + semantic: + $ref: '#/definitions/semantic' + serviceRoles: + $ref: '#/definitions/roles' + identityRoles: + $ref: '#/definitions/roles' + servicePolicyUpdate: + type: object + required: + - name + - type + - semantic + - serviceRoles + - identityRoles + properties: + tags: + $ref: '#/definitions/tags' + name: + type: string + type: + $ref: '#/definitions/dialBind' + semantic: + $ref: '#/definitions/semantic' + serviceRoles: + $ref: '#/definitions/roles' + identityRoles: + $ref: '#/definitions/roles' + servicePolicyPatch: + type: object + required: + - name + - type + properties: + tags: + $ref: '#/definitions/tags' + name: + type: string + type: + $ref: '#/definitions/dialBind' + semantic: + $ref: '#/definitions/semantic' + serviceRoles: + $ref: '#/definitions/roles' + identityRoles: + $ref: '#/definitions/roles' + ################################################################### + # Services + ################################################################## + serviceList: + type: array + items: + $ref: '#/definitions/serviceDetail' + serviceDetail: + type: object + properties: + id: + type: string + format: uuid + createdAt: + type: string + format: date-time + updatedAt: + type: string + format: date-time + _links: + $ref: '#/definitions/links' + tags: + $ref: '#/definitions/tags' + name: + type: string + terminatorStrategy: + type: string + roleAttributes: + $ref: '#/definitions/attributes' + permissions: + $ref: '#/definitions/dialBind' + configs: + type: array + items: + $ref: '#/definitions/entityRef' + serviceCreate: + type: object + required: + - name + properties: + name: + type: string + terminatorStrategy: + type: string + roleAttributes: + type: array + items: + type: string + configs: + type: array + items: + type: string + format: uuid + tags: + $ref: '#/definitions/tags' + serviceUpdate: + type: object + required: + - name + - terminatorStrategy + - roleAttributes + - configs + properties: + name: + type: string + terminatorStartegy: + type: string + roleAttributes: + type: array + items: + type: string + configs: + type: array + items: + type: string + format: uuid + tags: + $ref: '#/definitions/tags' + servicePatch: + type: object + properties: + name: + type: string + terminatorStrategy: + type: string + roleAttributes: + type: array + items: + type: string + configs: + type: array + items: + type: string + format: uuid + tags: + $ref: '#/definitions/tags' + ################################################################### + # Geo Regions + ################################################################## + geoRegionList: + type: array + items: + $ref: '#/definitions/geoRegionDetail' + geoRegionDetail: + type: object + properties: + id: + type: string + format: uuid + createdAt: + type: string + format: date-time + updatedAt: + type: string + format: date-time + _links: + $ref: '#/definitions/links' + tags: + $ref: '#/definitions/tags' + name: + type: string + ################################################################### + # Identity-Types + ################################################################## + identityTypeList: + type: array + items: + $ref: '#/definitions/identityDetail' + identityTypeDetail: + type: object + properties: + id: + type: string + format: uuid + createdAt: + type: string + format: date-time + updatedAt: + type: string + format: date-time + _links: + $ref: '#/definitions/links' + tags: + $ref: '#/definitions/tags' + name: + type: string + ################################################################### + # Service Configs + ################################################################## + serviceConfigList: + type: array + items: + $ref: '#/definitions/serviceConfigDetail' + serviceConfigDetail: + type: object + properties: + service: + $ref: '#/definitions/entityRef' + config: + $ref: '#/definitions/entityRef' + example: + service: + urlName: services + id: 913a8c63-17a6-44d7-82b3-9f6eb997cf8e + name: netcat4545-egress-r2 + _links: + self: + href: "./services/913a8c63-17a6-44d7-82b3-9f6eb997cf8e" + config: + urlName: configs + id: 13347602-ba34-4ff7-8082-e533ba945744 + name: test-config-02fade09-fcc3-426c-854e-18539726bdc6 + _links: + self: + href: "./identities/13347602-ba34-4ff7-8082-e533ba945744" + serviceConfig: + type: object + properties: + service: + type: string + format: uuid + config: + type: string + format: uuid + serviceConfigs: + type: array + items: + $ref: '#/definitions/serviceConfig' + ################################################################### + # Service Edge Router Policies + ################################################################## + serviceEdgeRouterPolicyList: + type: array + items: + $ref: '#/definitions/serviceEdgeRouterPolicyDetail' + serviceEdgeRouterPolicyDetail: + type: object + properties: + id: + type: string + format: uuid + createdAt: + type: string + format: date-time + updatedAt: + type: string + format: date-time + _links: + $ref: '#/definitions/links' + tags: + $ref: '#/definitions/tags' + name: + type: string + semantic: + $ref: '#/definitions/semantic' + edgeRouterRoles: + $ref: '#/definitions/roles' + serviceRoles: + $ref: '#/definitions/roles' + serviceEdgeRouterPolicyCreate: + type: object + required: + - name + properties: + tags: + $ref: '#/definitions/tags' + name: + type: string + semantic: + $ref: '#/definitions/semantic' + edgeRouterRoles: + $ref: '#/definitions/roles' + serviceRoles: + $ref: '#/definitions/roles' + serviceEdgePolicyUpdate: + type: object + required: + - name + - tags + - semantic + - edgeRouterRoles + - serviceRoles + properties: + tags: + $ref: '#/definitions/tags' + name: + type: string + semantic: + $ref: '#/definitions/semantic' + edgeRouterRoles: + $ref: '#/definitions/roles' + serviceRoles: + $ref: '#/definitions/roles' + serviceEdgePolicyPatch: + type: object + properties: + tags: + $ref: '#/definitions/tags' + name: + type: string + semantic: + $ref: '#/definitions/semantic' + edgeRouterRoles: + $ref: '#/definitions/roles' + serviceRoles: + $ref: '#/definitions/roles' + ################################################################### + # Sessions + ################################################################## + sessionCreate: + type: object + properties: + serviceId: + type: string + format: uuid + type: + $ref: '#/definitions/dialBind' + tags: + $ref: '#/definitions/tags' + sessionList: + type: array + items: + $ref: '#/definitions/sessionDetail' + sessionDetail: + type: object + properties: + id: + type: string + format: uuid + createdAt: + type: string + format: date-time + updatedAt: + type: string + format: date-time + _links: + $ref: '#/definitions/links' + tags: + $ref: '#/definitions/tags' + type: + $ref: '#/definitions/dialBind' + apiSession: + $ref: '#/definitions/entityRef' + service: + $ref: '#/definitions/entityRef' + sessionEdgeRouters: + type: array + items: + $ref: '#/definitions/sessionEdgeRouter' + sessionEdgeRouter: + type: object + properties: + hostname: + type: string + name: + type: string + urls: + type: object + additionalProperties: + type: string + apiErrorEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + error: + $ref: '#/definitions/apiError' + apiError: + type: object + properties: + args: + $ref: '#/definitions/apiErrorArgs' + causeMessage: + type: string + code: + type: string + message: + type: string + requestId: + type: string + cause: + $ref: '#/definitions/apiErrorCause' + apiErrorCause: + type: object + properties: + code: + type: string + message: + type: string + cause: + type: string + apiErrorArgs: + type: object + properties: + urlVars: + properties: {} + additionalProperties: + type: string + type: object + empty: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + type: object + example: {} + meta: + properties: + filterableFields: + type: array + items: + type: string + pagination: + $ref: '#/definitions/pagination' + type: object + create: + type: object + properties: + meta: + properties: {} + type: object + data: + properties: + _links: + $ref: '#/definitions/links' + id: + type: string + type: object + version: + type: object + properties: + buildDate: + type: string + example: '2020-02-11 16:09:08' + revision: + type: string + example: 'ea556fc18740' + runtimeVersion: + type: string + example: 'go1.13.5' + version: + type: string + example: 'v0.9.0' + listSummaryCounts: + type: object + additionalProperties: + type: integer + erott: + type: object + properties: + serverCert: + type: string + description: A PEM encoded set of certificates to use as the servers chain + cert: + type: string + description: A PEM encoded cert for the server + ca: + type: string + description: A PEM encoded set of CA certificates to trust + currentAPISessionDetailEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/apiSessionDetail' + currentIdentityDetailEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/identityDetail' + listAPISessionsEnvelope: + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/apiSessionList' + detailAPISessionEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/apiSessionDetail' + listAuthenticatorsEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/authenticatorList' + detailAuthenticatorEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/authenticatorDetail' + listCAsEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/caList' + detailCAEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/caDetail' + listConfigTypesEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/configTypeList' + detailConfigTypeEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/configTypeDetail' + listConfigsEnvelope: + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/configList' + detailConfigEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/configDetail' + listVersionEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/version' + listSummaryCountsEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/listSummaryCounts' + listEnrollmentsEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/enrollmentList' + detailEnrollmentEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/enrollmentDetail' + listEdgeRoutersEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/edgeRouterList' + detailedEdgeRouterEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/edgeRouterDetail' + listEdgeRouterPoliciesEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/edgeRouterPolicyList' + detailEdgeRouterPolicyEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/edgeRouterPolicyDetail' + listServicePoliciesEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/servicePolicyList' + detailServicePolicyEnvelop: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/servicePolicyDetail' + listServicesEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/serviceList' + detailServiceEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/serviceDetail' + listIdentitiesEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/identityList' + detailIdentityEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/identityDetail' + listGeoRegionsEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/geoRegionList' + detailGeoRegionEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/geoRegionDetail' + listIdentityTypesEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/identityTypeList' + detailIdentityTypeEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/identityTypeDetail' + listServiceConfigsEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/serviceConfigList' + listServiceEdgeRouterPoliciesEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/serviceEdgeRouterPolicyList' + detailServiceEdgePolicyEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/serviceEdgeRouterPolicyDetail' + listSessionsEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/sessionList' + detailSessionEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/sessionDetail' + envInfo: + description: Environment information an authenticating client may provide + properties: + os: + type: string + arch: + type: string + osRelease: + type: string + osVersion: + type: string + type: object + sdkInfo: + description: SDK information an authenticating client may provide + properties: + type: + type: string + branch: + type: string + version: + type: string + revision: + type: string + type: object + configTypes: + description: Specific configuration types that should be returned + type: array + items: + type: string + pagination: + type: object + properties: + limit: + type: number + offset: + type: number + totalCount: + type: number + ################################################################### + # Terminators + ################################################################## + listTerminatorsEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/terminatorList' + detailTerminatorEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/terminatorDetail' + terminatorList: + type: array + items: + $ref: '#/definitions/terminatorDetail' + terminatorDetail: + type: object + properties: + id: + type: string + createdAt: + type: string + format: date-time + updatedAt: + type: string + format: date-time + _links: + $ref: '#/definitions/links' + tags: + $ref: '#/definitions/tags' + serviceId: + type: "string" + service: + $ref: '#/definitions/entityRef' + routerId: + type: "string" + router: + $ref: '#/definitions/entityRef' + binding: + type: "string" + address: + type: "string" + terminatorCreate: + type: object + required: + - service + - router + - address + properties: + service: + type: string + router: + type: string + binding: + type: string + address: + type: string + tags: + $ref: '#/definitions/tags' + terminatorUpdate: + type: object + required: + - service + - router + - address + - binding + - tags + properties: + service: + type: string + router: + type: string + binding: + type: string + address: + type: string + tags: + $ref: '#/definitions/tags' + terminatorPatch: + type: object + properties: + service: + type: string + router: + type: string + binding: + type: string + address: + type: string + tags: + $ref: '#/definitions/tags' + ################################################################### + # Specs + ################################################################## + listSpecsEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/specList' + detailSpecEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/specDetail' + detailSpecBodyEnvelope: + type: object + properties: + meta: + $ref: '#/definitions/meta' + data: + $ref: '#/definitions/specBodyDetail' + specList: + type: array + items: + $ref: '#/definitions/specDetail' + specDetail: + type: object + properties: + id: + type: string + createdAt: + type: string + format: date-time + updatedAt: + type: string + format: date-time + _links: + $ref: '#/definitions/links' + tags: + $ref: '#/definitions/tags' + name: + type: "string" + + specBodyDetail: + type: string