zrok/specs/zrok.yml

1161 lines
23 KiB
YAML
Raw Permalink Normal View History

2022-07-22 16:52:36 +02:00
info:
description: zrok client access
title: zrok
2022-11-30 17:43:00 +01:00
version: 0.3.0
basePath: /api/v1
securityDefinitions:
key:
type: apiKey
in: header
name: x-token
2022-07-22 16:52:36 +02:00
paths:
2022-09-20 19:51:54 +02:00
#
2022-11-30 17:43:00 +01:00
# account
2022-09-20 19:51:54 +02:00
#
/changePassword:
post:
tags:
- account
security:
- key: []
operationId: changePassword
parameters:
- name: body
in: body
schema:
$ref: '#/definitions/changePasswordRequest'
responses:
200:
description: changed password
400:
description: password not changed
401:
description: unauthorized
422:
description: password validation failure
schema:
$ref: '#/definitions/errorMessage'
500:
description: internal server error
2022-11-30 17:43:00 +01:00
/invite:
post:
tags:
2022-11-30 17:43:00 +01:00
- account
operationId: invite
parameters:
- name: body
in: body
schema:
2022-11-30 17:43:00 +01:00
$ref: "#/definitions/inviteRequest"
responses:
201:
2022-11-30 17:43:00 +01:00
description: invitation created
2022-07-25 22:23:55 +02:00
400:
2022-11-30 17:43:00 +01:00
description: invitation not created (already exists)
schema:
$ref: '#/definitions/errorMessage'
401:
description: unauthorized
500:
description: internal server error
2022-08-02 19:23:31 +02:00
/login:
post:
tags:
2022-11-30 17:43:00 +01:00
- account
2022-08-02 19:23:31 +02:00
operationId: login
parameters:
- name: body
in: body
schema:
$ref: "#/definitions/loginRequest"
responses:
200:
description: login successful
schema:
$ref: "#/definitions/loginResponse"
401:
description: invalid login
2022-08-03 17:54:11 +02:00
2024-02-20 17:40:11 +01:00
/regenerateToken:
post:
tags:
- account
security:
- key: []
operationId: regenerateToken
parameters:
- name: body
in: body
schema:
properties:
emailAddress:
type: string
responses:
200:
description: regenerate account token
schema:
properties:
token:
type: string
404:
description: account not found
500:
description: internal server error
2022-09-20 19:51:54 +02:00
/register:
post:
2022-08-03 20:36:40 +02:00
tags:
2022-11-30 17:43:00 +01:00
- account
2022-09-20 19:51:54 +02:00
operationId: register
parameters:
- name: body
in: body
schema:
$ref: "#/definitions/registerRequest"
2022-08-03 20:36:40 +02:00
responses:
200:
2022-09-20 19:51:54 +02:00
description: account created
schema:
$ref: "#/definitions/registerResponse"
2022-09-20 19:51:54 +02:00
404:
description: request not found
422:
description: password validation failure
schema:
$ref: '#/definitions/errorMessage'
2022-08-03 20:36:40 +02:00
500:
description: internal server error
2023-01-18 20:05:10 +01:00
/resetPassword:
post:
tags:
- account
operationId: resetPassword
parameters:
- name: body
in: body
schema:
$ref: "#/definitions/resetPasswordRequest"
responses:
200:
description: password reset
404:
description: request not found
422:
description: password validation failure
schema:
$ref: '#/definitions/errorMessage'
2023-01-18 20:05:10 +01:00
500:
description: internal server error
/resetPasswordRequest:
post:
tags:
- account
operationId: resetPasswordRequest
parameters:
- name: body
in: body
schema:
properties:
emailAddress:
type: string
responses:
201:
description: forgot password request created
400:
description: forgot password request not created
500:
description: internal server error
2022-09-20 19:51:54 +02:00
/verify:
2022-09-20 19:42:34 +02:00
post:
tags:
2022-11-30 17:43:00 +01:00
- account
2022-09-20 19:51:54 +02:00
operationId: verify
2022-09-20 19:42:34 +02:00
parameters:
- name: body
in: body
schema:
2022-09-20 19:51:54 +02:00
$ref: "#/definitions/verifyRequest"
2022-09-20 19:42:34 +02:00
responses:
200:
2022-09-20 19:51:54 +02:00
description: token ready
schema:
$ref: "#/definitions/verifyResponse"
2022-09-20 19:42:34 +02:00
404:
2022-09-20 19:51:54 +02:00
description: token not found
500:
description: internal server error
2022-11-30 17:43:00 +01:00
#
# admin
#
/frontend:
post:
tags:
- admin
security:
- key: []
operationId: createFrontend
parameters:
- name: body
in: body
schema:
$ref: "#/definitions/createFrontendRequest"
responses:
201:
description: frontend created
schema:
$ref: "#/definitions/createFrontendResponse"
400:
description: bad request
401:
description: unauthorized
404:
description: not found
500:
description: internal server error
2022-12-02 16:46:53 +01:00
patch:
tags:
- admin
security:
- key: []
operationId: updateFrontend
parameters:
- name: body
in: body
schema:
$ref: "#/definitions/updateFrontendRequest"
responses:
200:
description: frontend updated
401:
description: unauthorized
404:
description: not found
500:
description: internal server error
delete:
tags:
- admin
security:
- key: []
operationId: deleteFrontend
parameters:
- name: body
in: body
schema:
$ref: "#/definitions/deleteFrontendRequest"
responses:
200:
description: frontend deleted
401:
description: unauthorized
404:
description: not found
500:
description: internal server error
2022-12-02 15:30:06 +01:00
/frontends:
get:
tags:
- admin
security:
- key: []
operationId: listFrontends
responses:
200:
description: ok
schema:
$ref: "#/definitions/publicFrontendList"
401:
description: unauthorized
500:
description: internal server error
/identity:
post:
tags:
- admin
security:
- key: []
operationId: createIdentity
parameters:
- name: body
in: body
schema:
properties:
name:
type: string
responses:
201:
description: created
schema:
properties:
identity:
type: string
cfg:
type: string
401:
description: unauthorized
500:
description: internal server error
2023-01-10 19:26:22 +01:00
/invite/token/generate:
post:
tags:
- admin
security:
- key: []
2023-01-10 19:26:22 +01:00
operationId: inviteTokenGenerate
parameters:
- name: body
in: body
schema:
2023-01-10 19:26:22 +01:00
$ref: "#/definitions/inviteTokenGenerateRequest"
responses:
201:
description: invitation tokens created
400:
description: invitation tokens not created
401:
description: unauthorized
500:
description: internal server error
2022-11-30 17:43:00 +01:00
#
# environment
#
/enable:
post:
tags:
- environment
security:
- key: []
operationId: enable
parameters:
- name: body
in: body
schema:
$ref: "#/definitions/enableRequest"
responses:
201:
description: environment enabled
schema:
$ref: "#/definitions/enableResponse"
401:
description: unauthorized
404:
description: account not found
500:
description: internal server error
/disable:
post:
tags:
- environment
security:
- key: []
operationId: disable
parameters:
- name: body
in: body
2022-09-20 19:51:54 +02:00
schema:
2022-11-30 17:43:00 +01:00
$ref: "#/definitions/disableRequest"
responses:
200:
description: environment disabled
401:
description: invalid environment
500:
description: internal server error
2022-09-20 19:51:54 +02:00
#
# metadata
#
/configuration:
get:
tags:
- metadata
operationId: configuration
responses:
200:
description: current configuration
schema:
$ref: "#/definitions/configuration"
/detail/account:
get:
tags:
- metadata
security:
- key: []
operationId: getAccountDetail
responses:
200:
description: ok
schema:
$ref: "#/definitions/environments"
500:
description: internal server error
2022-12-22 20:56:19 +01:00
/detail/environment/{envZId}:
get:
tags:
- metadata
security:
- key: []
operationId: getEnvironmentDetail
parameters:
2022-12-22 20:56:19 +01:00
- name: envZId
in: path
type: string
required: true
responses:
200:
description: ok
schema:
$ref: "#/definitions/environmentAndResources"
401:
description: unauthorized
404:
description: not found
500:
description: internal server error
2023-05-17 19:53:18 +02:00
/detail/frontend/{feId}:
get:
tags:
- metadata
security:
- key: []
operationId: getFrontendDetail
parameters:
- name: feId
in: path
type: integer
required: true
responses:
200:
description: ok
schema:
$ref: "#/definitions/frontend"
401:
description: unauthorized
404:
description: not found
500:
description: internal server error
/detail/share/{shrToken}:
2022-12-22 21:09:37 +01:00
get:
tags:
- metadata
security:
- key: []
operationId: getShareDetail
2022-12-22 21:09:37 +01:00
parameters:
- name: shrToken
2022-12-22 21:09:37 +01:00
in: path
type: string
required: true
responses:
200:
description: ok
schema:
$ref: "#/definitions/share"
2022-12-22 21:09:37 +01:00
401:
description: unauthorized
404:
description: not found
500:
description: internal server error
2022-09-20 19:51:54 +02:00
/overview:
get:
tags:
- metadata
security:
- key: []
operationId: overview
responses:
200:
description: overview returned
schema:
$ref: "#/definitions/overview"
2022-09-20 19:42:34 +02:00
500:
description: internal server error
schema:
$ref: "#/definitions/errorMessage"
/metrics/account:
get:
tags:
2023-05-09 20:16:01 +02:00
- metadata
security:
- key: []
operationId: getAccountMetrics
2023-05-09 17:36:53 +02:00
parameters:
- name: duration
in: query
2023-05-09 20:16:01 +02:00
type: string
responses:
200:
description: account metrics
schema:
$ref: "#/definitions/metrics"
2023-05-09 20:16:01 +02:00
400:
description: bad request
500:
description: internal server error
/metrics/environment/{envId}:
get:
tags:
2023-05-09 20:16:01 +02:00
- metadata
security:
- key: []
operationId: getEnvironmentMetrics
parameters:
- name: envId
in: path
type: string
required: true
2023-05-09 17:36:53 +02:00
- name: duration
in: query
2023-05-09 20:16:01 +02:00
type: string
responses:
200:
description: environment metrics
schema:
$ref: "#/definitions/metrics"
2023-05-09 22:36:50 +02:00
400:
description: bad request
401:
description: unauthorized
2023-05-09 22:36:50 +02:00
500:
description: internal server error
/metrics/share/{shrToken}:
get:
tags:
2023-05-09 20:16:01 +02:00
- metadata
security:
- key: []
operationId: getShareMetrics
parameters:
- name: shrToken
in: path
type: string
required: true
2023-05-09 17:36:53 +02:00
- name: duration
in: query
2023-05-09 20:16:01 +02:00
type: string
responses:
200:
description: share metrics
schema:
$ref: "#/definitions/metrics"
2023-05-09 22:36:50 +02:00
400:
description: bad request
401:
description: unauthorized
2023-05-09 22:36:50 +02:00
500:
description: internal server error
2023-05-09 20:16:01 +02:00
2022-09-20 19:51:54 +02:00
/version:
get:
tags:
- metadata
operationId: version
responses:
200:
description: current server version
schema:
$ref: "#/definitions/version"
2023-05-09 20:16:01 +02:00
2022-09-20 19:51:54 +02:00
#
# share
2022-09-20 19:51:54 +02:00
#
2022-11-23 18:12:11 +01:00
/access:
post:
tags:
- share
2022-11-23 18:12:11 +01:00
security:
- key: []
operationId: access
parameters:
- name: body
in: body
schema:
$ref: "#/definitions/accessRequest"
responses:
201:
description: access created
schema:
$ref: "#/definitions/accessResponse"
2022-11-23 18:12:11 +01:00
401:
description: unauthorized
2022-11-23 18:24:35 +01:00
404:
description: not found
2022-11-23 18:12:11 +01:00
500:
description: internal server error
/share:
2022-07-26 21:38:35 +02:00
post:
tags:
- share
security:
- key: []
operationId: share
2022-07-26 21:38:35 +02:00
parameters:
- name: body
in: body
schema:
$ref: "#/definitions/shareRequest"
2022-07-26 21:38:35 +02:00
responses:
201:
description: share created
2022-07-26 21:38:35 +02:00
schema:
$ref: "#/definitions/shareResponse"
2022-08-01 21:44:26 +02:00
401:
description: unauthorized
404:
description: not found
409:
description: conflict
422:
2023-09-21 18:57:14 +02:00
description: unprocessable
2022-07-27 19:17:47 +02:00
500:
description: internal server error
2022-07-27 19:38:35 +02:00
schema:
$ref: "#/definitions/errorMessage"
2022-12-02 19:21:05 +01:00
patch:
tags:
- share
2022-12-02 19:21:05 +01:00
security:
- key: []
operationId: updateShare
parameters:
- name: body
in: body
schema:
$ref: "#/definitions/updateShareRequest"
responses:
200:
description: share updated
400:
description: bad request
2022-12-02 19:21:05 +01:00
401:
description: unauthorized
404:
description: not found
500:
description: internal server error
2022-11-23 18:12:11 +01:00
2022-11-30 17:17:09 +01:00
/unaccess:
delete:
tags:
- share
2022-11-30 17:17:09 +01:00
security:
- key: []
operationId: unaccess
parameters:
- name: body
in: body
schema:
$ref: "#/definitions/unaccessRequest"
responses:
200:
description: access removed
401:
description: unauthorized
404:
description: not found
500:
description: internal server error
/unshare:
2022-07-27 17:35:28 +02:00
delete:
tags:
- share
security:
- key: []
operationId: unshare
2022-07-27 17:35:28 +02:00
parameters:
- name: body
in: body
schema:
$ref: "#/definitions/unshareRequest"
2022-07-27 17:35:28 +02:00
responses:
200:
description: share removed
401:
description: unauthorized
2022-08-01 21:44:26 +02:00
404:
description: not found
2022-07-27 17:35:28 +02:00
500:
description: internal server error
2022-07-27 19:38:35 +02:00
schema:
$ref: "#/definitions/errorMessage"
2022-07-22 16:52:36 +02:00
definitions:
2022-11-23 18:12:11 +01:00
accessRequest:
type: object
properties:
envZId:
2022-11-23 18:12:11 +01:00
type: string
shrToken:
2022-11-23 18:12:11 +01:00
type: string
accessResponse:
type: object
properties:
frontendToken:
type: string
2023-05-01 18:19:06 +02:00
backendMode:
type: string
authUser:
type: object
properties:
username:
type: string
password:
type: string
changePasswordRequest:
type: object
properties:
email:
type: string
oldPassword:
type: string
newPassword:
type: string
configuration:
type: object
properties:
version:
type: string
touLink:
type: string
invitesOpen:
type: boolean
requiresInviteToken:
type: boolean
inviteTokenContact:
type: string
passwordRequirements:
$ref: "#/definitions/passwordRequirements"
createFrontendRequest:
type: object
properties:
zId:
type: string
url_template:
type: string
public_name:
type: string
createFrontendResponse:
type: object
properties:
token:
type: string
deleteFrontendRequest:
type: object
properties:
frontendToken:
type: string
2022-11-30 17:43:00 +01:00
disableRequest:
type: object
properties:
identity:
type: string
2022-08-03 20:25:27 +02:00
enableRequest:
type: object
properties:
description:
type: string
host:
type: string
2022-11-30 17:43:00 +01:00
2022-07-25 22:42:06 +02:00
enableResponse:
type: object
properties:
identity:
type: string
cfg:
type: string
2022-08-03 17:54:11 +02:00
environment:
type: object
properties:
2022-08-03 19:48:17 +02:00
description:
type: string
host:
type: string
address:
type: string
2022-10-19 18:35:29 +02:00
zId:
type: string
activity:
$ref: "#/definitions/sparkData"
limited:
type: boolean
createdAt:
type: integer
updatedAt:
type: integer
2022-08-03 17:54:11 +02:00
environments:
type: array
items:
$ref: "#/definitions/environment"
environmentAndResources:
2022-08-03 20:36:40 +02:00
type: object
properties:
environment:
$ref: "#/definitions/environment"
frontends:
$ref: "#/definitions/frontends"
shares:
$ref: "#/definitions/shares"
2022-08-03 20:36:40 +02:00
2022-08-03 17:54:11 +02:00
errorMessage:
type: string
frontend:
type: object
properties:
id:
type: integer
token:
type: string
shrToken:
type: string
zId:
type: string
createdAt:
type: integer
updatedAt:
type: integer
frontends:
type: array
items:
$ref: "#/definitions/frontend"
2023-01-10 19:26:22 +01:00
inviteTokenGenerateRequest:
type: object
properties:
tokens:
type: array
items:
type: string
2022-11-30 17:43:00 +01:00
inviteRequest:
type: object
properties:
email:
type: string
2023-01-09 20:23:02 +01:00
token:
type: string
2022-11-30 17:43:00 +01:00
2022-08-02 19:23:31 +02:00
loginRequest:
type: object
properties:
email:
type: string
password:
type: string
2022-08-02 19:23:31 +02:00
loginResponse:
type: string
2022-08-03 17:54:11 +02:00
metrics:
type: object
properties:
scope:
type: string
id:
type: string
period:
type: number
samples:
type: array
items:
$ref: "#/definitions/metricsSample"
metricsSample:
type: object
properties:
rx:
type: number
tx:
type: number
timestamp:
type: number
overview:
type: object
properties:
accountLimited:
type: boolean
environments:
type: array
items:
$ref: "#/definitions/environmentAndResources"
passwordRequirements:
type: object
properties:
length:
type: integer
requireCapital:
type: boolean
requireNumeric:
type: boolean
requireSpecial:
type: boolean
validSpecialCharacters:
type: string
principal:
2022-07-28 18:12:50 +02:00
type: object
properties:
id:
type: integer
2022-09-09 16:20:05 +02:00
email:
2022-07-28 18:12:50 +02:00
type: string
token:
type: string
2023-01-13 19:16:10 +01:00
limitless:
type: boolean
admin:
type: boolean
2022-08-03 17:54:11 +02:00
2022-12-02 15:30:06 +01:00
publicFrontend:
type: object
properties:
token:
type: string
zId:
type: string
2022-12-02 16:46:53 +01:00
urlTemplate:
2022-12-02 15:30:06 +01:00
type: string
2022-12-02 16:46:53 +01:00
publicName:
2022-12-02 15:30:06 +01:00
type: string
2022-12-02 16:46:53 +01:00
createdAt:
2022-12-02 15:30:06 +01:00
type: integer
2022-12-02 16:46:53 +01:00
updatedAt:
2022-12-02 15:30:06 +01:00
type: integer
publicFrontendList:
type: array
items:
$ref: "#/definitions/publicFrontend"
2022-09-20 19:42:34 +02:00
registerRequest:
type: object
properties:
token:
type: string
password:
type: string
registerResponse:
type: object
properties:
token:
type: string
2022-09-20 19:42:34 +02:00
2023-01-18 20:05:10 +01:00
resetPasswordRequest:
type: object
properties:
token:
type: string
password:
type: string
share:
2022-11-30 17:17:09 +01:00
type: object
properties:
token:
type: string
zId:
type: string
shareMode:
type: string
backendMode:
type: string
frontendSelection:
type: string
frontendEndpoint:
type: string
backendProxyEndpoint:
type: string
reserved:
type: boolean
2023-05-11 21:41:21 +02:00
activity:
2023-05-11 21:21:10 +02:00
$ref: "#/definitions/sparkData"
limited:
type: boolean
2022-08-03 20:36:40 +02:00
createdAt:
type: integer
2022-08-03 20:36:40 +02:00
updatedAt:
type: integer
2022-08-03 20:36:40 +02:00
shares:
type: array
items:
$ref: "#/definitions/share"
shareRequest:
2022-07-26 21:38:35 +02:00
type: object
properties:
envZId:
2022-07-26 21:38:35 +02:00
type: string
shareMode:
type: string
enum: ["public", "private"]
frontendSelection:
type: array
items:
type: string
backendMode:
type: string
enum: ["proxy", "web", "tcpTunnel", "udpTunnel", "caddy", "drive", "socks", "vpn"]
backendProxyEndpoint:
2022-07-26 21:38:35 +02:00
type: string
authScheme:
type: string
authUsers:
type: array
items:
$ref: "#/definitions/authUser"
oauthProvider:
type: string
2023-09-21 18:57:14 +02:00
enum: ["github", "google"]
oauthEmailDomains:
type: array
items:
type: string
2023-09-05 16:55:55 +02:00
oauthAuthorizationCheckInterval:
type: string
2022-11-30 19:45:57 +01:00
reserved:
type: boolean
permissionMode:
type: string
enum: ["open", "closed"]
accessGrants:
type: array
items:
type: string
uniqueName:
type: string
shareResponse:
2022-07-26 21:38:35 +02:00
type: object
properties:
frontendProxyEndpoints:
type: array
items:
type: string
shrToken:
2022-07-26 21:38:35 +02:00
type: string
2022-08-03 17:54:11 +02:00
sparkData:
type: array
items:
$ref: "#/definitions/sparkDataSample"
sparkDataSample:
type: object
properties:
rx:
type: number
tx:
type: number
2022-11-23 18:12:11 +01:00
unaccessRequest:
type: object
properties:
frontendToken:
type: string
envZId:
2022-11-23 18:12:11 +01:00
type: string
shrToken:
2022-11-23 18:12:11 +01:00
type: string
2022-12-02 19:21:05 +01:00
unshareRequest:
type: object
properties:
envZId:
type: string
shrToken:
2022-12-02 19:21:05 +01:00
type: string
reserved:
type: boolean
2022-12-02 16:46:53 +01:00
updateFrontendRequest:
type: object
properties:
frontendToken:
type: string
publicName:
type: string
urlTemplate:
type: string
2022-12-02 19:21:05 +01:00
updateShareRequest:
2022-07-27 17:35:28 +02:00
type: object
properties:
shrToken:
2022-08-03 20:58:11 +02:00
type: string
2022-12-02 19:21:05 +01:00
backendProxyEndpoint:
2022-07-27 17:35:28 +02:00
type: string
addAccessGrants:
type: array
items:
type: string
removeAccessGrants:
type: array
items:
type: string
2022-08-03 17:54:11 +02:00
2022-09-19 21:58:52 +02:00
verifyRequest:
type: object
properties:
token:
type: string
verifyResponse:
type: object
properties:
email:
type: string
version:
type: string
2022-07-22 16:52:36 +02:00
produces:
2022-07-22 17:45:37 +02:00
- application/zrok.v1+json
2022-07-22 16:52:36 +02:00
consumes:
2022-07-22 17:45:37 +02:00
- application/zrok.v1+json
2022-07-22 16:52:36 +02:00
schemes:
- http
2022-08-03 17:54:11 +02:00
swagger: "2.0"