mirror of
https://github.com/okxlin/appstore.git
synced 2026-09-23 08:01:00 +00:00
83 lines
2.1 KiB
Bash
Executable File
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
|