219 lines
6.8 KiB
JSON
219 lines
6.8 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft-07/schema#",
|
|
"title": ".digital_hq",
|
|
"description": "My network's specification v0.1",
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {"$ref": "#/$defs/name"},
|
|
"domain": {"$ref": "#/$defs/domain"},
|
|
"home_url": {
|
|
"description": "the first url to enter the network",
|
|
"$ref": "#/$defs/url"
|
|
},
|
|
"regions": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/$defs/region"
|
|
}
|
|
},
|
|
|
|
"machines": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/$defs/machine"
|
|
},
|
|
"minItems": 1
|
|
},
|
|
|
|
"services": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/$defs/service"
|
|
},
|
|
"minItems": 1
|
|
},
|
|
|
|
"groups": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/$defs/group"
|
|
},
|
|
"minItems": 3
|
|
},
|
|
|
|
"users": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/$defs/user"
|
|
},
|
|
"minItems": 1
|
|
}
|
|
},
|
|
|
|
"$defs": {
|
|
"id": {
|
|
"type": "string",
|
|
"examples": ["cortex", "maurane", "postgres-shared"]
|
|
},
|
|
|
|
"ip": {
|
|
"type": "string",
|
|
"pattern": "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"
|
|
},
|
|
|
|
"name": {
|
|
"type": "string",
|
|
"examples": ["Maurane", "AFFiNE", "Gaufre"]
|
|
},
|
|
|
|
"domain": {
|
|
"type": "string",
|
|
"pattern": "^[a-z]+\\.([a-z]*\\.)*[a-z]{2,10}"
|
|
},
|
|
|
|
"url": {
|
|
"type": "string",
|
|
"pattern": "^(https?|postgres)://[a-z0-9.-]+(\\.[a-z]{2,10})?(:[0-9]+)?(/.*)?$"
|
|
},
|
|
|
|
"email": {
|
|
"type": "string",
|
|
"pattern": "^[a-z0-9-\\.]+@[a-z]+\\.[a-z]{2,10}"
|
|
},
|
|
|
|
"service": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {"$ref": "#/$defs/id"},
|
|
"name": {"$ref": "#/$defs/name"},
|
|
"machine_id": {"$ref": "#/$defs/id"},
|
|
"ports": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number",
|
|
"minimum": 1
|
|
},
|
|
"minItems": 1
|
|
},
|
|
"public_url": {"$ref": "#/$defs/url"},
|
|
"internal_url": {"$ref": "#/$defs/url"},
|
|
"status": {
|
|
"type": "string",
|
|
"enum": ["active", "inactive", "planned", "wip" , "tested", "broken"]
|
|
},
|
|
"auth": {
|
|
"type": "string",
|
|
"enum": ["session cookie", "trusted headers", "oidc", "vpn", "internal", "none"]
|
|
},
|
|
"installation_mode": {
|
|
"type": "string",
|
|
"enum": ["docker", "native"]
|
|
},
|
|
"categories": {
|
|
"type": "array",
|
|
"items": {
|
|
"enum": ["ai", "auth", "automation", "backup", "caldav", "communication", "database", "dev", "experimental", "finance", "media", "monitoring", "network", "productivity", "storage"]
|
|
}
|
|
},
|
|
"dependencies": {
|
|
"type": "array",
|
|
"items": {"$ref": "#/$defs/name"}
|
|
},
|
|
"allowed_groups": {
|
|
"type": "array",
|
|
"items": {"$ref": "#/$defs/name"},
|
|
"minItems": 1
|
|
}
|
|
},
|
|
"required": ["id", "name", "machine_id", "status", "allowed_groups"]
|
|
},
|
|
|
|
"machine": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {"$ref": "#/$defs/id"},
|
|
"name": {"$ref": "#/$defs/name"},
|
|
"ip": {
|
|
"description": "private ip addresss of a server",
|
|
"$ref": "#/$defs/ip"
|
|
},
|
|
"public_ip": {
|
|
"description": "public ip address of a server",
|
|
"$ref": "#/$defs/ip"
|
|
},
|
|
"provider": {
|
|
"type": "string",
|
|
"enum": ["ovh", "hostinger", "aws", "hertzner"]
|
|
},
|
|
"role": {
|
|
"type": "string"
|
|
},
|
|
"domains": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"internal": {
|
|
"$ref": "#/$defs/domain"
|
|
},
|
|
"external": {
|
|
"$ref": "#/$defs/domain"
|
|
}
|
|
},
|
|
"minProperties": 1,
|
|
"maxProperties": 1,
|
|
"additionalProperties": false
|
|
},
|
|
"contains": {"required": ["internal"]},
|
|
"uniqueItems": true
|
|
}
|
|
},
|
|
"required": ["id", "ip", "name", "domains"]
|
|
},
|
|
|
|
"region": {
|
|
"description": "sub part of the main digital hq land",
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {"$ref": "#/$defs/id"},
|
|
"region_type": {"type": "string"},
|
|
"vn": {"type": "string"},
|
|
"fr": {"type": "string"},
|
|
"kre": {"type": "string"},
|
|
"en": {"type": "string"}
|
|
},
|
|
"required": ["id"]
|
|
},
|
|
|
|
"group": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {"$ref": "#/$defs/id"},
|
|
"name": {"$ref": "#/$defs/name"},
|
|
"group_description": {"type": "string"},
|
|
"region": {"$ref": "#/$defs/name"}
|
|
},
|
|
"required": ["id", "name", "region"]
|
|
},
|
|
|
|
"user": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {"$ref": "#/$defs/id"},
|
|
"name": {"$ref": "#/$defs/name"},
|
|
"nickname": {"$ref": "#/$defs/name"},
|
|
"email": {"$ref": "#/$defs/email"},
|
|
"groups": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"minItems": 1
|
|
}
|
|
},
|
|
"required": ["id", "name", "groups", "email"]
|
|
}
|
|
},
|
|
|
|
"additionalProperties": false
|
|
} |