mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2025-06-17 17:56:27 +00:00
Refactor API Schema and validation
- /schema now returns full openapi/swagger schema - That schema is used to validate incoming requests - And used as a contract in future integration tests - Moved route files up one level - Fixed incorrect 404 reponses when getting objects - Fixed saving new objects and passing jsonschemavalidation
This commit is contained in:
53
backend/schema/components/access-list-object.json
Normal file
53
backend/schema/components/access-list-object.json
Normal file
@ -0,0 +1,53 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "Access List object",
|
||||
"required": ["id", "created_on", "modified_on", "owner_user_id", "name", "directive", "address", "satisfy_any", "pass_auth", "meta"],
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"id": {
|
||||
"$ref": "../common.json#/definitions/id"
|
||||
},
|
||||
"created_on": {
|
||||
"$ref": "../common.json#/definitions/created_on"
|
||||
},
|
||||
"modified_on": {
|
||||
"$ref": "../common.json#/definitions/modified_on"
|
||||
},
|
||||
"owner_user_id": {
|
||||
"$ref": "../common.json#/definitions/user_id"
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
},
|
||||
"directive": {
|
||||
"type": "string",
|
||||
"enum": ["allow", "deny"]
|
||||
},
|
||||
"address": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string",
|
||||
"pattern": "^([0-9]{1,3}\\.){3}[0-9]{1,3}(/([0-9]|[1-2][0-9]|3[0-2]))?$"
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"pattern": "^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8]))?$"
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"pattern": "^all$"
|
||||
}
|
||||
]
|
||||
},
|
||||
"satisfy_any": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"pass_auth": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"meta": {
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
}
|
32
backend/schema/components/audit-log-object.json
Normal file
32
backend/schema/components/audit-log-object.json
Normal file
@ -0,0 +1,32 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "Audit Log object",
|
||||
"required": ["id", "created_on", "modified_on", "user_id", "object_type", "object_id", "action", "meta"],
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"id": {
|
||||
"$ref": "../common.json#/definitions/id"
|
||||
},
|
||||
"created_on": {
|
||||
"$ref": "../common.json#/definitions/created_on"
|
||||
},
|
||||
"modified_on": {
|
||||
"$ref": "../common.json#/definitions/modified_on"
|
||||
},
|
||||
"user_id": {
|
||||
"$ref": "../common.json#/definitions/user_id"
|
||||
},
|
||||
"object_type": {
|
||||
"type": "string"
|
||||
},
|
||||
"object_id": {
|
||||
"$ref": "../common.json#/definitions/id"
|
||||
},
|
||||
"action": {
|
||||
"type": "string"
|
||||
},
|
||||
"meta": {
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
}
|
7
backend/schema/components/certificate-list.json
Normal file
7
backend/schema/components/certificate-list.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type": "array",
|
||||
"description": "Certificates list",
|
||||
"items": {
|
||||
"$ref": "./certificate-object.json"
|
||||
}
|
||||
}
|
66
backend/schema/components/certificate-object.json
Normal file
66
backend/schema/components/certificate-object.json
Normal file
@ -0,0 +1,66 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "Certificate object",
|
||||
"required": ["id", "created_on", "modified_on", "owner_user_id", "provider", "nice_name", "domain_names", "expires_on", "meta"],
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"id": {
|
||||
"$ref": "../common.json#/definitions/id"
|
||||
},
|
||||
"created_on": {
|
||||
"$ref": "../common.json#/definitions/created_on"
|
||||
},
|
||||
"modified_on": {
|
||||
"$ref": "../common.json#/definitions/modified_on"
|
||||
},
|
||||
"owner_user_id": {
|
||||
"$ref": "../common.json#/definitions/user_id"
|
||||
},
|
||||
"provider": {
|
||||
"$ref": "../common.json#/definitions/ssl_provider"
|
||||
},
|
||||
"nice_name": {
|
||||
"type": "string",
|
||||
"description": "Nice Name for the custom certificate"
|
||||
},
|
||||
"domain_names": {
|
||||
"$ref": "../common.json#/definitions/domain_names"
|
||||
},
|
||||
"expires_on": {
|
||||
"description": "Date and time of expiration",
|
||||
"format": "date-time",
|
||||
"readOnly": true,
|
||||
"type": "string"
|
||||
},
|
||||
"meta": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"letsencrypt_email": {
|
||||
"type": "string",
|
||||
"format": "email"
|
||||
},
|
||||
"letsencrypt_agree": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"dns_challenge": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"dns_provider": {
|
||||
"type": "string"
|
||||
},
|
||||
"dns_provider_credentials": {
|
||||
"type": "string"
|
||||
},
|
||||
"propagation_seconds": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "integer",
|
||||
"minimum": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
7
backend/schema/components/dead-host-list.json
Normal file
7
backend/schema/components/dead-host-list.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type": "array",
|
||||
"description": "404 Hosts list",
|
||||
"items": {
|
||||
"$ref": "./dead-host-object.json"
|
||||
}
|
||||
}
|
47
backend/schema/components/dead-host-object.json
Normal file
47
backend/schema/components/dead-host-object.json
Normal file
@ -0,0 +1,47 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "404 Host object",
|
||||
"required": ["id", "created_on", "modified_on", "owner_user_id", "domain_names", "certificate_id", "ssl_forced", "hsts_enabled", "hsts_subdomains", "http2_support", "advanced_config", "enabled", "meta"],
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"id": {
|
||||
"$ref": "../common.json#/definitions/id"
|
||||
},
|
||||
"created_on": {
|
||||
"$ref": "../common.json#/definitions/created_on"
|
||||
},
|
||||
"modified_on": {
|
||||
"$ref": "../common.json#/definitions/modified_on"
|
||||
},
|
||||
"owner_user_id": {
|
||||
"$ref": "../common.json#/definitions/user_id"
|
||||
},
|
||||
"domain_names": {
|
||||
"$ref": "../common.json#/definitions/domain_names"
|
||||
},
|
||||
"certificate_id": {
|
||||
"$ref": "../common.json#/definitions/certificate_id"
|
||||
},
|
||||
"ssl_forced": {
|
||||
"$ref": "../common.json#/definitions/ssl_forced"
|
||||
},
|
||||
"hsts_enabled": {
|
||||
"$ref": "../common.json#/definitions/hsts_enabled"
|
||||
},
|
||||
"hsts_subdomains": {
|
||||
"$ref": "../common.json#/definitions/hsts_subdomains"
|
||||
},
|
||||
"http2_support": {
|
||||
"$ref": "../common.json#/definitions/http2_support"
|
||||
},
|
||||
"advanced_config": {
|
||||
"type": "string"
|
||||
},
|
||||
"enabled": {
|
||||
"$ref": "../common.json#/definitions/enabled"
|
||||
},
|
||||
"meta": {
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
}
|
14
backend/schema/components/error-object.json
Normal file
14
backend/schema/components/error-object.json
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "Error object",
|
||||
"additionalProperties": false,
|
||||
"required": ["code", "message"],
|
||||
"properties": {
|
||||
"code": {
|
||||
"type": "integer"
|
||||
},
|
||||
"message": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
38
backend/schema/components/health-object.json
Normal file
38
backend/schema/components/health-object.json
Normal file
@ -0,0 +1,38 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "Health object",
|
||||
"additionalProperties": false,
|
||||
"required": ["status", "version"],
|
||||
"properties": {
|
||||
"status": {
|
||||
"type": "string",
|
||||
"description": "Healthy",
|
||||
"example": "OK"
|
||||
},
|
||||
"version": {
|
||||
"type": "object",
|
||||
"description": "The version object",
|
||||
"example": {
|
||||
"major": 2,
|
||||
"minor": 0,
|
||||
"revision": 0
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"required": ["major", "minor", "revision"],
|
||||
"properties": {
|
||||
"major": {
|
||||
"type": "integer",
|
||||
"minimum": 0
|
||||
},
|
||||
"minor": {
|
||||
"type": "integer",
|
||||
"minimum": 0
|
||||
},
|
||||
"revision": {
|
||||
"type": "integer",
|
||||
"minimum": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
41
backend/schema/components/permission-object.json
Normal file
41
backend/schema/components/permission-object.json
Normal file
@ -0,0 +1,41 @@
|
||||
{
|
||||
"type": "object",
|
||||
"minProperties": 1,
|
||||
"properties": {
|
||||
"visibility": {
|
||||
"type": "string",
|
||||
"description": "Visibility Type",
|
||||
"enum": ["all", "user"]
|
||||
},
|
||||
"access_lists": {
|
||||
"type": "string",
|
||||
"description": "Access Lists Permissions",
|
||||
"enum": ["hidden", "view", "manage"]
|
||||
},
|
||||
"dead_hosts": {
|
||||
"type": "string",
|
||||
"description": "404 Hosts Permissions",
|
||||
"enum": ["hidden", "view", "manage"]
|
||||
},
|
||||
"proxy_hosts": {
|
||||
"type": "string",
|
||||
"description": "Proxy Hosts Permissions",
|
||||
"enum": ["hidden", "view", "manage"]
|
||||
},
|
||||
"redirection_hosts": {
|
||||
"type": "string",
|
||||
"description": "Redirection Permissions",
|
||||
"enum": ["hidden", "view", "manage"]
|
||||
},
|
||||
"streams": {
|
||||
"type": "string",
|
||||
"description": "Streams Permissions",
|
||||
"enum": ["hidden", "view", "manage"]
|
||||
},
|
||||
"certificates": {
|
||||
"type": "string",
|
||||
"description": "Certificates Permissions",
|
||||
"enum": ["hidden", "view", "manage"]
|
||||
}
|
||||
}
|
||||
}
|
7
backend/schema/components/proxy-host-list.json
Normal file
7
backend/schema/components/proxy-host-list.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type": "array",
|
||||
"description": "Proxy Hosts list",
|
||||
"items": {
|
||||
"$ref": "./proxy-host-object.json"
|
||||
}
|
||||
}
|
148
backend/schema/components/proxy-host-object.json
Normal file
148
backend/schema/components/proxy-host-object.json
Normal file
@ -0,0 +1,148 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "Proxy Host object",
|
||||
"required": [
|
||||
"id",
|
||||
"created_on",
|
||||
"modified_on",
|
||||
"owner_user_id",
|
||||
"domain_names",
|
||||
"forward_host",
|
||||
"forward_port",
|
||||
"access_list_id",
|
||||
"certificate_id",
|
||||
"ssl_forced",
|
||||
"caching_enabled",
|
||||
"block_exploits",
|
||||
"advanced_config",
|
||||
"meta",
|
||||
"allow_websocket_upgrade",
|
||||
"http2_support",
|
||||
"forward_scheme",
|
||||
"enabled",
|
||||
"locations",
|
||||
"hsts_enabled",
|
||||
"hsts_subdomains",
|
||||
"certificate",
|
||||
"use_default_location",
|
||||
"ipv6"
|
||||
],
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"id": {
|
||||
"$ref": "../common.json#/definitions/id"
|
||||
},
|
||||
"created_on": {
|
||||
"$ref": "../common.json#/definitions/created_on"
|
||||
},
|
||||
"modified_on": {
|
||||
"$ref": "../common.json#/definitions/modified_on"
|
||||
},
|
||||
"owner_user_id": {
|
||||
"$ref": "../common.json#/definitions/user_id"
|
||||
},
|
||||
"domain_names": {
|
||||
"$ref": "../common.json#/definitions/domain_names"
|
||||
},
|
||||
"forward_host": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 255
|
||||
},
|
||||
"forward_port": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"maximum": 65535
|
||||
},
|
||||
"access_list_id": {
|
||||
"$ref": "../common.json#/definitions/access_list_id"
|
||||
},
|
||||
"certificate_id": {
|
||||
"$ref": "../common.json#/definitions/certificate_id"
|
||||
},
|
||||
"ssl_forced": {
|
||||
"$ref": "../common.json#/definitions/ssl_forced"
|
||||
},
|
||||
"caching_enabled": {
|
||||
"$ref": "../common.json#/definitions/caching_enabled"
|
||||
},
|
||||
"block_exploits": {
|
||||
"$ref": "../common.json#/definitions/block_exploits"
|
||||
},
|
||||
"advanced_config": {
|
||||
"type": "string"
|
||||
},
|
||||
"meta": {
|
||||
"type": "object"
|
||||
},
|
||||
"allow_websocket_upgrade": {
|
||||
"description": "Allow Websocket Upgrade for all paths",
|
||||
"example": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"http2_support": {
|
||||
"$ref": "../common.json#/definitions/http2_support"
|
||||
},
|
||||
"forward_scheme": {
|
||||
"type": "string",
|
||||
"enum": ["http", "https"]
|
||||
},
|
||||
"enabled": {
|
||||
"$ref": "../common.json#/definitions/enabled"
|
||||
},
|
||||
"locations": {
|
||||
"type": "array",
|
||||
"minItems": 0,
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["forward_scheme", "forward_host", "forward_port", "path"],
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": ["integer", "null"]
|
||||
},
|
||||
"path": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
},
|
||||
"forward_scheme": {
|
||||
"$ref": "#/properties/forward_scheme"
|
||||
},
|
||||
"forward_host": {
|
||||
"$ref": "#/properties/forward_host"
|
||||
},
|
||||
"forward_port": {
|
||||
"$ref": "#/properties/forward_port"
|
||||
},
|
||||
"forward_path": {
|
||||
"type": "string"
|
||||
},
|
||||
"advanced_config": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"hsts_enabled": {
|
||||
"$ref": "../common.json#/definitions/hsts_enabled"
|
||||
},
|
||||
"hsts_subdomains": {
|
||||
"$ref": "../common.json#/definitions/hsts_subdomains"
|
||||
},
|
||||
"certificate": {
|
||||
"$ref": "./certificate-object.json"
|
||||
},
|
||||
"owner": {
|
||||
"$ref": "./user-object.json"
|
||||
},
|
||||
"access_list": {
|
||||
"$ref": "./access-list-object.json"
|
||||
},
|
||||
"use_default_location": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"ipv6": {
|
||||
"type": "boolean"
|
||||
}
|
||||
}
|
||||
}
|
7
backend/schema/components/redirection-host-list.json
Normal file
7
backend/schema/components/redirection-host-list.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type": "array",
|
||||
"description": "Redirection Hosts list",
|
||||
"items": {
|
||||
"$ref": "./redirection-host-object.json"
|
||||
}
|
||||
}
|
72
backend/schema/components/redirection-host-object.json
Normal file
72
backend/schema/components/redirection-host-object.json
Normal file
@ -0,0 +1,72 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "Redirection Host object",
|
||||
"required": ["id", "created_on", "modified_on", "owner_user_id", "domain_names", "forward_http_code", "forward_scheme", "forward_domain_name", "preserve_path", "certificate_id", "ssl_forced", "hsts_enabled", "hsts_subdomains", "http2_support", "block_exploits", "advanced_config", "enabled", "meta"],
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"id": {
|
||||
"$ref": "../common.json#/definitions/id"
|
||||
},
|
||||
"created_on": {
|
||||
"$ref": "../common.json#/definitions/created_on"
|
||||
},
|
||||
"modified_on": {
|
||||
"$ref": "../common.json#/definitions/modified_on"
|
||||
},
|
||||
"owner_user_id": {
|
||||
"$ref": "../common.json#/definitions/user_id"
|
||||
},
|
||||
"domain_names": {
|
||||
"$ref": "../common.json#/definitions/domain_names"
|
||||
},
|
||||
"forward_http_code": {
|
||||
"description": "Redirect HTTP Status Code",
|
||||
"example": 302,
|
||||
"type": "integer",
|
||||
"minimum": 300,
|
||||
"maximum": 308
|
||||
},
|
||||
"forward_scheme": {
|
||||
"type": "string",
|
||||
"enum": ["http", "https"]
|
||||
},
|
||||
"forward_domain_name": {
|
||||
"description": "Domain Name",
|
||||
"example": "jc21.com",
|
||||
"type": "string",
|
||||
"pattern": "^(?:[^.*]+\\.?)+[^.]$"
|
||||
},
|
||||
"preserve_path": {
|
||||
"description": "Should the path be preserved",
|
||||
"example": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"certificate_id": {
|
||||
"$ref": "../common.json#/definitions/certificate_id"
|
||||
},
|
||||
"ssl_forced": {
|
||||
"$ref": "../common.json#/definitions/ssl_forced"
|
||||
},
|
||||
"hsts_enabled": {
|
||||
"$ref": "../common.json#/definitions/hsts_enabled"
|
||||
},
|
||||
"hsts_subdomains": {
|
||||
"$ref": "../common.json#/definitions/hsts_subdomains"
|
||||
},
|
||||
"http2_support": {
|
||||
"$ref": "../common.json#/definitions/http2_support"
|
||||
},
|
||||
"block_exploits": {
|
||||
"$ref": "../common.json#/definitions/block_exploits"
|
||||
},
|
||||
"advanced_config": {
|
||||
"type": "string"
|
||||
},
|
||||
"enabled": {
|
||||
"$ref": "../common.json#/definitions/enabled"
|
||||
},
|
||||
"meta": {
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
}
|
6
backend/schema/components/security-schemes.json
Normal file
6
backend/schema/components/security-schemes.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"BearerAuth": {
|
||||
"type": "http",
|
||||
"scheme": "bearer"
|
||||
}
|
||||
}
|
7
backend/schema/components/setting-list.json
Normal file
7
backend/schema/components/setting-list.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type": "array",
|
||||
"description": "Setting list",
|
||||
"items": {
|
||||
"$ref": "./setting-object.json"
|
||||
}
|
||||
}
|
53
backend/schema/components/setting-object.json
Normal file
53
backend/schema/components/setting-object.json
Normal file
@ -0,0 +1,53 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "Setting object",
|
||||
"required": ["id", "name", "description", "value", "meta"],
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "string",
|
||||
"description": "Setting ID",
|
||||
"minLength": 1,
|
||||
"example": "default-site"
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Setting Display Name",
|
||||
"minLength": 1,
|
||||
"example": "Default Site"
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"description": "Meaningful description",
|
||||
"minLength": 1,
|
||||
"example": "What to show when Nginx is hit with an unknown Host"
|
||||
},
|
||||
"value": {
|
||||
"description": "Value in almost any form",
|
||||
"example": "congratulations",
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
},
|
||||
{
|
||||
"type": "integer"
|
||||
},
|
||||
{
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "array"
|
||||
}
|
||||
]
|
||||
},
|
||||
"meta": {
|
||||
"description": "Extra metadata",
|
||||
"example": {},
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
}
|
7
backend/schema/components/stream-list.json
Normal file
7
backend/schema/components/stream-list.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type": "array",
|
||||
"description": "Proxy Hosts list",
|
||||
"items": {
|
||||
"$ref": "./proxy-host-object.json"
|
||||
}
|
||||
}
|
60
backend/schema/components/stream-object.json
Normal file
60
backend/schema/components/stream-object.json
Normal file
@ -0,0 +1,60 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "Stream object",
|
||||
"required": ["id", "created_on", "modified_on", "owner_user_id", "incoming_port", "forwarding_host", "forwarding_port", "tcp_forwarding", "udp_forwarding", "enabled", "meta"],
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"id": {
|
||||
"$ref": "../common.json#/definitions/id"
|
||||
},
|
||||
"created_on": {
|
||||
"$ref": "../common.json#/definitions/created_on"
|
||||
},
|
||||
"modified_on": {
|
||||
"$ref": "../common.json#/definitions/modified_on"
|
||||
},
|
||||
"owner_user_id": {
|
||||
"$ref": "../common.json#/definitions/user_id"
|
||||
},
|
||||
"incoming_port": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"maximum": 65535
|
||||
},
|
||||
"forwarding_host": {
|
||||
"anyOf": [
|
||||
{
|
||||
"description": "Domain Name",
|
||||
"example": "jc21.com",
|
||||
"type": "string",
|
||||
"pattern": "^(?:[^.*]+\\.?)+[^.]$"
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"format": "ipv4"
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"format": "ipv6"
|
||||
}
|
||||
]
|
||||
},
|
||||
"forwarding_port": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"maximum": 65535
|
||||
},
|
||||
"tcp_forwarding": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"udp_forwarding": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"enabled": {
|
||||
"$ref": "../common.json#/definitions/enabled"
|
||||
},
|
||||
"meta": {
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
}
|
19
backend/schema/components/token-object.json
Normal file
19
backend/schema/components/token-object.json
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "Token object",
|
||||
"required": ["expires", "token"],
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"expires": {
|
||||
"description": "Token Expiry Unix Time",
|
||||
"example": 1566540249,
|
||||
"minimum": 1,
|
||||
"type": "number"
|
||||
},
|
||||
"token": {
|
||||
"description": "JWT Token",
|
||||
"example": "eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9.ey...xaHKYr3Kk6MvkUjcC4",
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
7
backend/schema/components/user-list.json
Normal file
7
backend/schema/components/user-list.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type": "array",
|
||||
"description": "User list",
|
||||
"items": {
|
||||
"$ref": "./user-object.json"
|
||||
}
|
||||
}
|
61
backend/schema/components/user-object.json
Normal file
61
backend/schema/components/user-object.json
Normal file
@ -0,0 +1,61 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "User object",
|
||||
"required": ["id", "created_on", "modified_on", "is_disabled", "email", "name", "nickname", "avatar", "roles"],
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "integer",
|
||||
"description": "User ID",
|
||||
"minimum": 1,
|
||||
"example": 1
|
||||
},
|
||||
"created_on": {
|
||||
"type": "string",
|
||||
"description": "Created Date",
|
||||
"example": "2020-01-30T09:36:08.000Z"
|
||||
},
|
||||
"modified_on": {
|
||||
"type": "string",
|
||||
"description": "Modified Date",
|
||||
"example": "2020-01-30T09:41:04.000Z"
|
||||
},
|
||||
"is_disabled": {
|
||||
"type": "integer",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"description": "Is user Disabled (0 = false, 1 = true)",
|
||||
"example": 0
|
||||
},
|
||||
"email": {
|
||||
"type": "string",
|
||||
"description": "Email",
|
||||
"minLength": 3,
|
||||
"example": "jc@jc21.com"
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Name",
|
||||
"minLength": 1,
|
||||
"example": "Jamie Curnow"
|
||||
},
|
||||
"nickname": {
|
||||
"type": "string",
|
||||
"description": "Nickname",
|
||||
"example": "James"
|
||||
},
|
||||
"avatar": {
|
||||
"type": "string",
|
||||
"description": "Gravatar URL based on email, without scheme",
|
||||
"example": "//www.gravatar.com/avatar/6193176330f8d38747f038c170ddb193?default=mm"
|
||||
},
|
||||
"roles": {
|
||||
"description": "Roles applied",
|
||||
"example": ["admin"],
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user