Files
appstore/apps/gomodel/latest/scripts/init.sh
T
2026-07-31 05:00:58 +08:00

45 lines
1.5 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd -P)"
ENV_FILE="${ENV_FILE:-$ROOT_DIR/.env}"
fail() {
printf '%s\n' "$1" >&2
exit 1
}
read_env_value() {
local key="$1"
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"
}
[[ -f "$ENV_FILE" && ! -L "$ENV_FILE" ]] || fail "$ENV_FILE must be a regular file"
master_key="${GOMODEL_MASTER_KEY:-$(read_env_value GOMODEL_MASTER_KEY)}"
data_value="${APP_DATA_DIR:-$(read_env_value APP_DATA_DIR)}"
[[ -n "$data_value" ]] || data_value='./data'
[[ ${#master_key} -ge 24 && ${#master_key} -le 512 ]] || fail 'GOMODEL_MASTER_KEY must contain 24 to 512 characters'
[[ "$master_key" != *$'\n'* && "$master_key" != *$'\r'* ]] || fail 'GOMODEL_MASTER_KEY must not contain line breaks'
[[ "$data_value" != /* ]] || fail 'APP_DATA_DIR must remain relative to the application version directory'
data_candidate="$ROOT_DIR/${data_value#./}"
[[ ! -L "$data_candidate" ]] || fail 'APP_DATA_DIR must not be a symbolic link'
data_dir="$(realpath -m -- "$data_candidate")"
case "$data_dir" in
"$ROOT_DIR"/*) ;;
*) fail 'APP_DATA_DIR must remain inside the application version directory' ;;
esac
[[ ! -e "$data_dir" || -d "$data_dir" ]] || fail 'APP_DATA_DIR must be a directory'
install -d -m 0750 -- "$data_dir"
chown 65532:65532 -- "$data_dir"
chmod 0750 -- "$data_dir"