""" The schema against which the TLJH config file can be validated. Validation occurs when changing values with tljh-config. """ config_schema = { "$schema": "http://json-schema.org/draft-07/schema#", "title": "Littlest JupyterHub YAML config file", "definitions": { "BaseURL": { "type": "string", }, "Users": { "type": "object", "additionalProperties": False, "properties": { "extra_user_groups": {"type": "object", "items": {"type": "string"}}, "allowed": {"type": "array", "items": {"type": "string"}}, "banned": {"type": "array", "items": {"type": "string"}}, "admin": {"type": "array", "items": {"type": "string"}}, }, }, "Services": { "type": "object", "properties": { "cull": { "type": "object", "additionalProperties": False, "properties": { "enabled": {"type": "boolean"}, "timeout": {"type": "integer"}, "every": {"type": "integer"}, "concurrency": {"type": "integer"}, "users": {"type": "boolean"}, "max_age": {"type": "integer"}, "remove_named_servers": {"type": "boolean"}, }, } }, }, "HTTP": { "type": "object", "additionalProperties": False, "properties": { "address": {"type": "string", "format": "ipv4"}, "port": {"type": "integer"}, }, }, "HTTPS": { "type": "object", "additionalProperties": False, "properties": { "enabled": {"type": "boolean"}, "address": {"type": "string", "format": "ipv4"}, "port": {"type": "integer"}, "tls": {"$ref": "#/definitions/TLS"}, "letsencrypt": {"$ref": "#/definitions/LetsEncrypt"}, }, }, "LetsEncrypt": { "type": "object", "additionalProperties": False, "properties": { "email": {"type": "string", "format": "email"}, "domains": { "type": "array", "items": {"type": "string", "format": "hostname"}, }, "staging": {"type": "boolean"}, }, }, "TLS": { "type": "object", "additionalProperties": False, "properties": {"key": {"type": "string"}, "cert": {"type": "string"}}, }, "Limits": { "description": "User CPU and memory limits.", "type": "object", "additionalProperties": False, "properties": {"memory": {"type": "string"}, "cpu": {"type": "integer"}}, }, "UserEnvironment": { "type": "object", "additionalProperties": False, "properties": { "default_app": { "type": "string", "enum": ["jupyterlab", "classic"], "default": "jupyterlab", } }, }, "TraefikAPI": { "type": "object", "additionalProperties": False, "properties": { "ip": {"type": "string", "format": "ipv4"}, "port": {"type": "integer"}, "username": {"type": "string"}, "password": {"type": "string"}, }, }, }, "properties": { "additionalProperties": False, "base_url": {"$ref": "#/definitions/BaseURL"}, "user_environment": {"$ref": "#/definitions/UserEnvironment"}, "users": {"$ref": "#/definitions/Users"}, "limits": {"$ref": "#/definitions/Limits"}, "https": {"$ref": "#/definitions/HTTPS"}, "http": {"$ref": "#/definitions/HTTP"}, "traefik_api": {"$ref": "#/definitions/TraefikAPI"}, "services": {"$ref": "#/definitions/Services"}, }, }