Files
appstore/apps/homebox/latest/scripts/init.sh
T

83 lines
2.1 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
umask 077
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
ENV_FILE="${ENV_FILE:-$ROOT_DIR/.env}"
read_env_value() {
local key="$1"
[[ -f "$ENV_FILE" ]] || return 0
local value
value="$(sed -n "s/^${key}=//p" "$ENV_FILE" | tail -n 1)"
case "$value" in
\"*\") value="${value#\"}"; value="${value%\"}" ;;
\'*\') value="${value#\'}"; value="${value%\'}" ;;
esac
printf '%s\n' "$value"
}
configured_value() {
local key="$1"
local default_value="$2"
local value
value="${!key:-}"
if [[ -z "$value" ]]; then
value="$(read_env_value "$key")"
fi
printf '%s\n' "${value:-$default_value}"
}
resolve_app_path() {
local raw="$1"
if [[ "$raw" = /* ]]; then
printf '%s\n' "$raw"
else
printf '%s\n' "$ROOT_DIR/${raw#./}"
fi
}
ensure_dir() {
local path
path="$(resolve_app_path "$(configured_value "$1" "$2")")"
mkdir -p "$path"
}
DATA_DIR="$(resolve_app_path "$(configured_value "APP_DATA_DIR" "./data")")"
ensure_dir "APP_DATA_DIR" "./data"
chown -R 65532:65532 "$DATA_DIR"
# HomeBox requires a stable API-key pepper of at least 32 bytes. The panel's
# generic random field can be shorter, so normalize it once and persist it.
PEPPER_FILE="$DATA_DIR/.hbox-auth-api-key-pepper"
PEPPER=""
if [[ -f "$PEPPER_FILE" ]]; then
PEPPER="$(head -n 1 "$PEPPER_FILE")"
fi
if [[ ! "$PEPPER" =~ ^[A-Za-z0-9+/=]{32,}$ ]]; then
PEPPER="$(openssl rand -base64 48 | tr -d '\n')"
printf '%s\n' "$PEPPER" > "$PEPPER_FILE"
fi
chmod 600 "$PEPPER_FILE"
if [[ -f "$ENV_FILE" ]]; then
ENV_TMP="${ENV_FILE}.tmp.$$"
: > "$ENV_TMP"
ENV_FOUND=0
while IFS= read -r line || [[ -n "$line" ]]; do
case "$line" in
HBOX_AUTH_API_KEY_PEPPER=*)
printf 'HBOX_AUTH_API_KEY_PEPPER="%s"\n' "$PEPPER" >> "$ENV_TMP"
ENV_FOUND=1
;;
*) printf '%s\n' "$line" >> "$ENV_TMP" ;;
esac
done < "$ENV_FILE"
if [[ "$ENV_FOUND" -eq 0 ]]; then
printf 'HBOX_AUTH_API_KEY_PEPPER="%s"\n' "$PEPPER" >> "$ENV_TMP"
fi
mv "$ENV_TMP" "$ENV_FILE"
else
printf 'HBOX_AUTH_API_KEY_PEPPER="%s"\n' "$PEPPER" > "$ENV_FILE"
fi