mirror of
https://github.com/okxlin/appstore.git
synced 2026-09-24 00:01:00 +00:00
45 lines
1.5 KiB
Bash
Executable File
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"
|