aboutsummaryrefslogtreecommitdiff
path: root/docs/config-schema.json
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--docs/config-schema.json618
1 files changed, 618 insertions, 0 deletions
diff --git a/docs/config-schema.json b/docs/config-schema.json
new file mode 100644
index 0000000..f804081
--- /dev/null
+++ b/docs/config-schema.json
@@ -0,0 +1,618 @@
+{
+ "$schema": "http://json-schema.org/draft-07/schema",
+ "$id": "https://c3voc.de/streaming-website/config",
+ "type": "object",
+ "title": "VOC streaming-website configuration",
+ "description": " deployed at https://streaming.media.ccc.de",
+ "required": ["conference"],
+ "properties": {
+ "conference": {
+ "type": "object",
+ "required": ["title", "acronym"],
+ "additionalProperties": false,
+ "properties": {
+ "title": {
+ "type": "string",
+ "title": "Titel der Konferenz",
+ "description": "Kann Leer- und Sonderzeichen enthalten. Dieser wird im Seiten-Header, im <title>-Tag, in der About-Seite und ggf. ab weiteren Stellen als Anzeigetext benutzt.",
+ "examples": ["DiVOC - Reboot to Respawn"]
+ },
+ "acronym": {
+ "title": "Acronym",
+ "description": "VOC Kürzel für die Konferenz, falls nicht bekannt bitte nicht selbst ausdenken sondern nachfragen. Wird in den URLs als Slug für die Konferenz verwendet.",
+ "type": "string",
+ "examples": ["36c3", "rc3", "divoc-ptt"],
+ "pattern": "^[a-z0-9_-]+$"
+ },
+ "organizer": {
+ "type": "string",
+ "title": "Veranstalter",
+ "description": "Wird für den <meta name=\"author\">-Tag verwendt. Ist das Feld leer, wird kein solcher &ltmeta>-Tag generiert.",
+ "examples": ["CCC", "DiVOC"]
+ },
+ "description": {
+ "type": "string",
+ "title": "Beschreibungstext",
+ "description": "Wird für den <meta name=\"description\">-Tag verwendet. Wird diese Option ignoriert, wird kein solcher <meta>-Tag generiert.",
+ "examples": [
+ "Livestream des Digital verteilten Online-Chaos",
+ "Live streaming from the 36th Chaos Communication Congress"
+ ]
+ },
+ "start": {
+ "type": "string",
+ "format": "datetime-local",
+ "title": "Startzeitpunkt der Konferenz",
+ "description": "Befinden wir uns davor, wird die Closed-Seite mit einem Text der Art 'hat noch nicht angefangen' angezeigt. Wird dieser Zeitpunkt nicht angegeben, gilt die Konferenz immer als angefangen. ",
+ "examples": ["2021-04-02T09:30:00+02:00"],
+ "options": {
+ "grid_columns": 2,
+ "inputAttributes": {
+ "placeholder": "Enter datetime"
+ },
+ "flatpickr": {
+ "wrap": true,
+ "time_24hr": true,
+ "allowInput": true
+ }
+ }
+ },
+ "end": {
+ "type": "string",
+ "format": "datetime-local",
+ "examples": ["2021-04-05T18:30:00+02:00"],
+ "options": {
+ "grid_columns": 2,
+ "inputAttributes": {
+ "placeholder": "Enter datetime"
+ },
+ "flatpickr": {
+ "wrap": true,
+ "time_24hr": true,
+ "allowInput": true
+ }
+ }
+ },
+ "time_zone_name": {
+ "title": "Zeitzone",
+ "type": "string",
+ "examples": ["Europe/Amsterdam", "Europe/Berlin"],
+ "default": "Europe/Amsterdam",
+ "pattern": "^[A-Z][a-z+]/[A-Z][a-z+]$"
+ },
+ "colors": {
+ "type": "object",
+ "properties": {
+ "main": {
+ "type": "string",
+ "format": "color"
+ },
+ "background": {
+ "type": "string",
+ "format": "color"
+ }
+ }
+ },
+ "keywords" :{
+ "type":"array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "rooms": {
+ "type": "array",
+ "title": "Räume",
+ "description": "(= Audio & Video Produktionen, also auch DJ-Sets o.ä.)",
+ "default": [],
+ "additionalItems": true,
+ "items": {
+ "anyOf": [
+ {
+ "type": "object",
+ "default": {},
+ "required": ["name", "slug", "streamId", "streamingConfig"],
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Raum Name",
+ "description": "(aus Schedule)",
+ "default": "",
+ "examples": ["Piscopia"]
+ },
+ "slug": {
+ "type": "string",
+ "title": "Raum-Slug",
+ "description": "Wird in den URLs oder im Feedback verwendet",
+ "default": "",
+ "examples": ["halla", "vortrag", "piscopia"]
+ },
+ "streamId": {
+ "type": "string",
+ "title": "Stream ID",
+ "description": "Der Name des Kanals im VOC Streaming CDN z.B. s1",
+ "default": "",
+ "examples": ["s1", "s2", "s3", "s4", "q1", "divoc", "cccb"]
+ },
+ "streamingConfig": {
+ "$ref": "#/definitions/RoomStreamingConfig"
+ }
+ }
+ }
+ ]
+ }
+ },
+ "streamingConfig": {
+ "$ref": "#/definitions/StreamingConfig"
+ }
+
+ },
+ "definitions": {
+ "Room": {
+ "type": "object",
+ "description": "Liste der Räume (= Audio & Video Produktionen, also auch DJ-Sets o.ä.)",
+ "additionalProperties": false,
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "slug": {
+ "type": "string"
+ },
+ "streamId": {
+ "type": "string"
+ },
+ "streamingConfig": {
+ "$ref": "#/definitions/RoomStreamingConfig"
+ }
+ },
+ "required": ["streamId", "name", "slug", "streamingConfig"]
+ },
+ "Features": {
+ "type": "object",
+ "additionalProperties": false,
+ "title": "Globale Schalter",
+ "description": "",
+ "properties": {
+ "relive": {
+ "type": "boolean",
+ "title": "Relive aktiv",
+ "description": "Wird diese Option deaktivert, wird die UI für temporäre Mitschnitte nicht angezeigt",
+ "default": false
+ },
+ "embed": {
+ "type": "boolean",
+ "title": "Embedding",
+ "description": "Wird diese Option deaktivert, werden alle Embedding-Funktionen deaktiviert.",
+ "default": true
+ },
+ "feedback": {
+ "type": "boolean",
+ "title": "Feedback Formular",
+ "description": "Wird diese Option deaktivert, wird das gesamte Feedback-System deaktiviert",
+ "default": false
+ },
+ "chat": {
+ "type": "object",
+ "title": "Globale Konfiguration für Chat und Social Media",
+ "properties": {
+ "hashtag": {
+ "type": "string",
+ "title": "Hashtag der Konferenz",
+ "examples": ["#36C3", "#divoc-r2r"]
+ },
+ "twitter": {
+ "type": ["boolean", "object"]
+ },
+ "mastodon":{
+ "type": "boolean"
+ },
+ "matrix": {
+ "type": "boolean"
+ },
+ "irc": {
+ "$ref": "#/definitions/IrcConfig",
+ "title": "Globale Konfiguration der IRC-Links",
+ "description": "Wird dieser Block auf null gesetzt, werden keine IRC-Links mehr erzeugt. Sollen die IRC-Links für jeden Raum einzeln konfiguriert werden, muss dieser Block trotzdem existieren sein. ggf. einfach auf true setzen.",
+ "required": ["display", "url"],
+ "properties": {
+ "url": {
+ "title": "URL für die IRC-Links",
+ "description": "Hierbei kann sowohl ein irc://-Link als auch ein Link zu einem WebIrc-Provider wie z.B. 'https://webirc.hackint.org/#irc://irc.hackint.org/#36C3-%s' verwendet werden. %s wird durch den urlencodeten Raum-Slug ersetzt. Eine Anpassung kann ebenfalls in der Raum-Konfiguration vorgenommen werden.",
+ "examples": ["https://webirc.hackint.org/#irc://irc.hackint.org/#36C3-%s", "ircs://irc.hackint.eu:6667/36C3-%s"]
+ },
+ "display": {
+ "type": "string",
+ "title": "Anzeigetext für die IRC-Links",
+ "description": "%s wird durch den Raum-Slug ersetzt. Ist eine weitere Anpassung erfoderlich, kann ein IRC_CONFIG-Block in der Raum-Konfiguration zum Überschreiben dieser Angaben verwendet werden."
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "StreamingConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "title": "Konfigurationen",
+ "description": "",
+ "default": {},
+ "required": ["features", "overviewPage"],
+ "properties": {
+ "schedule": {
+ "type": "object",
+ "title": "Konferenz-Fahrplan",
+ "required": ["url", "scale"],
+ "properties": {
+ "url": {
+ "type": "string",
+ "title": "URL zum Fahrplan-XML",
+ "description": "Diese URL muss immer verfügbar sein, sonst können kann die Programm-Ansicht aufhören zu funktionieren. Wenn die Quelle unverlässlich ist ;) sollte ein externer HTTP-Cache vorgeschaltet werden.",
+ "default": "",
+ "examples": [
+ "https://data.c3voc.de/divoc/everything.schedule.xml"
+ ]
+ },
+ "scale": {
+ "$id": "#/properties/conference/properties/streamingConfig/properties/schedule/properties/scale",
+ "type": "integer",
+ "title": "Skalierung der Programm-Vorschau ",
+ "description": "in Sekunden pro Pixel",
+ "default": 7
+ },
+ "roomfilter": {
+ "type": "array",
+ "title": "Nur die angegebenen Räume aus dem Fahrplan beachten",
+ "description": "Wird diese Option ignoriert, werden alle Räume angezeigt",
+ "default": [],
+ "additionalItems": true,
+ "items": {
+ "type": "string",
+ "description": "",
+ "default": "",
+ "examples": ["Piscopia"]
+ }
+ }
+ },
+ "additionalProperties": true
+ },
+ "features": {
+ "$ref": "#/definitions/Features"
+ },
+ "overviewPage": {
+ "$ref": "#/definitions/Page"
+ },
+ "html": {
+ "type": "object",
+ "description": "Anpassung der Standard-Texte",
+ "properties": {
+ "banner": {
+ "type": ["string", "null"],
+ "format": "text",
+ "title": "HTML-Code für den Banner (nur auf der Startseite, direkt unter dem Header)",
+ "description": "wird üblicherweise für KeyVisuals oder Textmarke verwendet (vgl. Hintergrund des Sliders oben auf http://media.ccc.de/)\nDieser HTML-Block wird üblicherweise in der main.less speziell für die Konferenz umgestaltet.\nWird diese Zeile nicht konnfiguriert, wird kein Banner ausgegeben.",
+ "examples": [
+ "<img src=\"../configs/conferences/fiffkon16/logo.png\" class=\"FIfFKon\">",
+ "<div class=\"congress\"></div><div class=\"congress-motto\"></div>"
+ ]
+ },
+ "footer": {
+ "type": ["string", "null"],
+ "format": "html",
+ "title": "HTML-Code für den Footer (z.B. für spezielle Attribuierung mit <a>-Tags)",
+ "description": "Sollte üblicherweise nur Inline-Elemente enthalten. Wird diese Zeile gelassen, wird die Standard-Attribuierung für (c3voc.de) verwendet",
+ "default": null,
+ "examples": [
+ "by <a href=\"https://di.c3voc.de\">DiVOC Organizers</a> &\n\t\t<a href=\"https://c3voc.de\">C3VOC</a>\n\t"
+ ]
+ },
+ "not_started": {
+ "$id": "#/properties/conference/properties/streamingConfig/properties/html/properties/not_started",
+ "type": ["string", "null"],
+ "format": "textarea",
+ "title": "HTML-Code für die 'Event has not started yet' Seite",
+ "description": "Ersetzt den Standardtext",
+ "examples": [
+ "<h1>Sonoj 2019 has not started yet</h1>\n<p>Live streams will be available here throughout the event. During and leading up to the event <a href=\"ircs://chat.freenode.net/sonoj\">#sonoj on Freenode</a>\nwill be a place for discussion and questions.\nIf you do not have an IRC client installed, try out <a href=\"https://webchat.freenode.net/#sonoj\">freenode webchat</a>. So even if you are not able to visit in person, please feel free to participate remotely.\n</p>"
+ ]
+ }
+ }
+ },
+ "extraFiles": {
+ "type": "object",
+ "additionalProperties": true
+ }
+ }
+ },
+ "RoomStreamingConfig": {
+ "type": "object",
+ "title": "RoomStreamingConfig",
+ "description": "",
+ "default": {},
+ "examples": [
+ {
+ "schedule_name": "Piscopia",
+ "display": "Piscopia",
+ "stream": "divocr2r",
+ "preview": true,
+ "stereo": false,
+ "sd_video": true,
+ "hd_video": true,
+ "slides": false,
+ "dash": true,
+ "audio": true
+ }
+ ],
+ "required": ["display", "stream", "preview", "slides", "schedule"],
+ "properties": {
+ "display": {
+ "type": "string",
+ "title": "Anzeige-Name",
+ "description": "",
+ "default": "",
+ "examples": ["Piscopia"]
+ },
+ "display_short": {
+ "type": "string"
+ },
+ "wide": {
+ "type": "boolean",
+ "title": "16:9",
+ "description": "",
+ "default": true
+ },
+ "preview": {
+ "type": "boolean",
+ "title": "Stream-Vorschaubildchen auf der Übersichtsseite anzeigen",
+ "description": "",
+ "default": true
+ },
+ "translation": {
+ "type": "array",
+ "title": "Übersetzungstonspur aktivieren",
+ "description": "Betrifft video sd / hd, slides, audio",
+ "items": {
+ "$ref": "#/definitions/TranslationConfig"
+ }
+ },
+ "stereo": {
+ "type": "boolean",
+ "title": "Stereo",
+ "description": "",
+ "default": false
+ },
+ "dash": {
+ "type": "boolean",
+ "title": "DASH",
+ "description": "",
+ "default": true
+ },
+ "hd_video": {
+ "type": "boolean",
+ "title": "HD",
+ "description": "Wenn dieses Flag deaktiviert wird kein HD-Video (1920×1080) angeboten. Wird auch SD-Video und DASH deaktivert, wird für diesen Raum überhaupt kein Video angeboten. In diesem Fall wird Slides, Audio und zuletzt Musik als Default-Stream angenommen – sofern aktiviert.",
+ "default": true
+ },
+ "sd_video": {
+ "type": "boolean",
+ "title": "SD",
+ "description": "",
+ "default": true
+ },
+ "slides": {
+ "type": "boolean",
+ "title": "Slide-Only-Stream",
+ "description": "Getrennter Stream für Vortragsfolien verfügbar",
+ "default": false
+ },
+ "audio": {
+ "type": "boolean",
+ "title": "Audio-Only-Stream",
+ "description": "",
+ "default": false
+ },
+ "music": {
+ "type": "boolean",
+ "title": "Musik-Stream",
+ "description": "",
+ "default": false
+ },
+ "schedule": {
+ "type": "boolean",
+ "title": "Fahrplan-Ansicht auf der Raum-Seite aktivieren",
+ "description": "Wenn diese Option deaktivert wird der Raum nicht im Fahrplan gesucht und auch auf der Startseite findet keine Darstellung statt. Ebenso können alle Fahrplan-Funktionialitäten durch auskommentieren des globalen Flags deaktiviert werden.",
+ "default": true
+ },
+ "schedule_name": {
+ "type": "string",
+ "title": "Name des Raums im Fahrplan",
+ "description": "Wenn dieses Feld ignoriert wird der Raum-Display-Name verwendet",
+ "examples": ["Piscopia"]
+ },
+ "feedback": {
+ "type": "boolean",
+ "title": "Feedback anzeigen",
+ "description": "Wenn diese Option deaktivert taucht der Raum auch im globalen Feedback-Formular nicht auf. Hängt vom Feedback-Flag in den globalen Optionen ab.",
+ "default": true
+ },
+ "subtitles": {
+ "type": "boolean",
+ "title": "Subtitles-Player aktivieren",
+ "description": "Subtitles-Button und die damit verbundenen Funktionen. Hängt vom Subtitles-Flag in den globalen Optionen ab.",
+ "default": false
+ },
+ "subtitles_room_id": {
+ "type": "integer",
+ "title": "ID des Raumes im L2S2-System",
+ "description": "",
+ "examples": [1]
+ },
+ "embed": {
+ "type": "boolean",
+ "title": "Embed-Form aktivieren",
+ "description": "Ist dieses Option aktiviert, wird ein Embed-Tab unter dem Video angezeigt. Darüber kann der Player als iframe eingebunden werden. Wenn diese Option deaktivert ist, wird kein Embed-Tab angeboten und die URL zum Einbetten existiert nicht. Ebenso können alle Embedding-Funktionialitäten durch deaktiveren des globalen EMBED-Blocks deaktiviert werden.",
+ "default": true
+ },
+ "chat": {
+ "type": ["boolean", "object"],
+ "title": "Chat-Tab aktivieren/konfigurieren",
+ "description": "Ist diese Option aktiviert, wird ein Chat-Tab mit den jeweiligen Links angezeigt.",
+ "default": false,
+ "$ref": "#/definitions/ChatConfig"
+ }
+ }
+ },
+ "TranslationConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["endpoint", "label"],
+ "properties": {
+ "endpoint": {
+ "type": "string"
+ },
+ "label": {
+ "type": "string"
+ }
+ }
+ },
+ "ChatConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "irc": {
+
+ },
+ "twitter": {
+
+ },
+ "mastodon":{
+
+ },
+ "matrix": {
+
+ }
+ }
+ },
+ "IrcConfig": {
+ "title": "IRC",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "display": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string",
+ "format": "uri"
+ }
+ },
+ "required": ["display", "url"]
+ },
+ "TwitterConfig": {
+ "title": "Twitter",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "display": {
+ "type": "string"
+ },
+ "text": {
+ "type": "string"
+ }
+ },
+ "required": ["display", "text"]
+ },
+ "Page": {
+ "type": "object",
+ "title": "Konfiguration der Stream-Übersicht auf der Startseite",
+ "description": "",
+ "default": {},
+ "required": ["sections"],
+ "properties": {
+ "sections": {
+ "type": "array",
+ "title": "Abschnitte und darunter aufgeführte Räume",
+ "description": "Es können beliebig neue Gruppen und Räume hinzugefügt werden",
+ "default": [],
+ "examples": [
+ [
+ {
+ "title": "Live",
+ "rooms": [
+ {
+ "slug": "halla"
+ },
+ {
+ "slug": "hallb"
+ },
+ {
+ "slug": "hallc"
+ },
+ {
+ "slug": "halld"
+ },
+ {
+ "slug": "halle"
+ }
+ ]
+ },
+ {
+ "title": "Assemblies Live",
+ "rooms": [
+ {
+ "slug": "chaoswest"
+ },
+ {
+ "slug": "wikipakawg"
+ },
+ {
+ "slug": "oio"
+ },
+ {
+ "slug": "sz"
+ },
+ {
+ "slug": "cdc"
+ }
+ ]
+ }
+ ]
+ ],
+ "items": {
+ "type": "object",
+ "title": "Abschnitt",
+ "description": "",
+ "default": {},
+ "required": ["title", "items"],
+ "properties": {
+ "title": {
+ "type": "string",
+ "title": "Titel der Gruppe",
+ "description": "",
+ "default": "Live",
+ "examples": ["Live", "Audio"]
+ },
+ "items": {
+ "type": "array",
+ "title": "Räume / Channels",
+ "description": "",
+ "items": {
+ "type": "object",
+ "required": ["slug"],
+ "additionalProperties": true,
+ "properties": {
+ "slug": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}