#!/bin/sh # Schreibt config.json aus den Umgebungsvariablen — läuft vor nginx. # # Das nginx-Image führt alles in /docker-entrypoint.d/ beim Start aus. Damit # braucht HoneyOS keinen eigenen Entrypoint und kein Backend: die Konfiguration # entsteht einmal beim Hochfahren, danach ist es wieder reines Ausliefern. # # Ohne HONEYOS_APP_1_URL bleibt die eingebackene config.json unangetastet — # ein `docker run` ohne .env zeigt also weiter die Standard-Apps. set -eu TARGET=/usr/share/nginx/html/config.json MAX_APPS=12 # Wert einer Variablen holen, deren Name erst zur Laufzeit feststeht. get() { eval "printf '%s' \"\${$1:-}\""; } # Für JSON entschärfen: Backslash und Anführungszeichen. Zeilenumbrüche haben # in diesen Feldern nichts zu suchen und fliegen raus. esc() { printf '%s' "$1" | tr -d '\n\r' | sed -e 's/\\/\\\\/g' -e 's/"/\\"/g'; } # Ein Feld nur schreiben, wenn es gesetzt ist — leere Schlüssel wären Lärm. field() { [ -n "$2" ] || return 0 printf ',"%s":"%s"' "$1" "$(esc "$2")" } if [ -z "$(get HONEYOS_APP_1_URL)" ]; then echo "honeyos: keine HONEYOS_APP_*-Variablen gesetzt — eingebackene config.json bleibt" exit 0 fi if [ ! -w "$(dirname "$TARGET")" ]; then echo "honeyos: $(dirname "$TARGET") ist nicht beschreibbar (read-only mount?) — config.json bleibt wie sie ist" exit 0 fi tmp="${TARGET}.tmp" { printf '{' printf '"user":"%s"' "$(esc "$(get HONEYOS_USER)")" printf ',"hostname":"%s"' "$(esc "${HONEYOS_HOSTNAME:-honeyos}")" printf ',"version":"%s"' "$(esc "${HONEYOS_VERSION:-0.1}")" printf ',"apps":[' n=1 first=1 while [ "$n" -le "$MAX_APPS" ]; do url=$(get "HONEYOS_APP_${n}_URL") if [ -z "$url" ]; then n=$((n + 1)) continue fi id=$(get "HONEYOS_APP_${n}_ID") [ -n "$id" ] || id="app${n}" name=$(get "HONEYOS_APP_${n}_NAME") [ -n "$name" ] || name=$(printf '%s' "$id" | tr '[:lower:]' '[:upper:]') [ "$first" -eq 1 ] || printf ',' first=0 printf '{"id":"%s","name":"%s","url":"%s"' "$(esc "$id")" "$(esc "$name")" "$(esc "$url")" field subtitle "$(get "HONEYOS_APP_${n}_SUBTITLE")" field glyph "$(get "HONEYOS_APP_${n}_GLYPH")" field key "$(get "HONEYOS_APP_${n}_KEY")" field me "$(get "HONEYOS_APP_${n}_ME")" field tokenKey "$(get "HONEYOS_APP_${n}_TOKEN_KEY")" printf '}' n=$((n + 1)) done printf ']}' } > "$tmp" mv "$tmp" "$TARGET" count=$(tr -cd '{' < "$TARGET" | wc -c) echo "honeyos: config.json geschrieben ($((count - 1)) App(s))"