mirror of
https://github.com/harivansh-afk/betterNAS.git
synced 2026-04-15 06:04:40 +00:00
Split node enrollment from export sync and issue Finder-compatible DAV credentials so the stack proves the real backend seam before any web UI consumes it.
145 lines
4.2 KiB
Bash
145 lines
4.2 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
betternas_default_clone_name() {
|
|
local repo_path="${1-}"
|
|
local repo_name
|
|
|
|
repo_name="$(basename "$repo_path")"
|
|
|
|
case "$repo_name" in
|
|
betterNAS)
|
|
printf '%s' "betternas-main"
|
|
;;
|
|
*)
|
|
printf '%s' "$repo_name"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
betternas_default_compose_project_seed() {
|
|
local repo_path="${1-}"
|
|
local clone_name="${2-}"
|
|
|
|
if [[ -n "$clone_name" ]]; then
|
|
printf '%s' "$clone_name"
|
|
return 0
|
|
fi
|
|
|
|
betternas_default_clone_name "$repo_path"
|
|
}
|
|
|
|
betternas_normalize_compose_project_name() {
|
|
local raw_value="${1-}"
|
|
local value
|
|
|
|
value="${raw_value,,}"
|
|
value="$(
|
|
printf '%s' "$value" | sed -E \
|
|
-e 's/[^a-z0-9_-]+/-/g' \
|
|
-e 's/^[^a-z0-9]+//' \
|
|
-e 's/[-_]+$//' \
|
|
-e 's/-+/-/g'
|
|
)"
|
|
|
|
if [[ -z "$value" ]]; then
|
|
printf 'Unable to derive a valid Docker Compose project name from %q.\n' "$raw_value" >&2
|
|
return 1
|
|
fi
|
|
|
|
printf '%s' "$value"
|
|
}
|
|
|
|
betternas_resolve_compose_project_name() {
|
|
local repo_path="${1-}"
|
|
local override="${2-}"
|
|
local clone_name="${3-}"
|
|
local seed
|
|
|
|
if [[ -n "$override" ]]; then
|
|
seed="$override"
|
|
else
|
|
seed="$(betternas_default_compose_project_seed "$repo_path" "$clone_name")"
|
|
fi
|
|
|
|
betternas_normalize_compose_project_name "$seed"
|
|
}
|
|
|
|
betternas_default_ports() {
|
|
local repo_path="${1-}"
|
|
local clone_name="${2-}"
|
|
local hash
|
|
local slot
|
|
local base
|
|
|
|
if [[ -z "$clone_name" ]]; then
|
|
clone_name="$(betternas_default_clone_name "$repo_path")"
|
|
fi
|
|
|
|
case "$clone_name" in
|
|
betternas-main)
|
|
printf '%s %s %s\n' "8080" "3090" "3001"
|
|
return 0
|
|
;;
|
|
betterNAS-runtime)
|
|
printf '%s %s %s\n' "41080" "41090" "41001"
|
|
return 0
|
|
;;
|
|
betterNAS-control)
|
|
printf '%s %s %s\n' "42080" "42090" "42001"
|
|
return 0
|
|
;;
|
|
betterNAS-node)
|
|
printf '%s %s %s\n' "43080" "43090" "43001"
|
|
return 0
|
|
;;
|
|
esac
|
|
|
|
hash="$(printf '%s' "$repo_path" | cksum | awk '{print $1}')"
|
|
slot=$((hash % 1000))
|
|
base=$((45000 + slot * 20))
|
|
|
|
printf '%s %s %s\n' "$base" "$((base + 10))" "$((base + 1))"
|
|
}
|
|
|
|
betternas_write_env_assignment() {
|
|
local key="${1-}"
|
|
local value="${2-}"
|
|
|
|
printf '%s=%q\n' "$key" "$value"
|
|
}
|
|
|
|
betternas_write_agent_env_file() {
|
|
local env_path="${1-}"
|
|
local repo_path="${2-}"
|
|
local clone_name
|
|
local compose_project_name
|
|
local nextcloud_port
|
|
local node_agent_port
|
|
local control_plane_port
|
|
|
|
clone_name="$(betternas_default_clone_name "$repo_path")"
|
|
compose_project_name="$(betternas_resolve_compose_project_name "$repo_path" "" "$clone_name")"
|
|
read -r nextcloud_port node_agent_port control_plane_port <<<"$(betternas_default_ports "$repo_path" "$clone_name")"
|
|
|
|
{
|
|
echo "# Generated by pnpm agent:bootstrap"
|
|
betternas_write_env_assignment "BETTERNAS_CLONE_NAME" "$clone_name"
|
|
betternas_write_env_assignment "COMPOSE_PROJECT_NAME" "$compose_project_name"
|
|
betternas_write_env_assignment "BETTERNAS_CONTROL_PLANE_PORT" "$control_plane_port"
|
|
betternas_write_env_assignment "BETTERNAS_NODE_AGENT_PORT" "$node_agent_port"
|
|
betternas_write_env_assignment "BETTERNAS_NEXTCLOUD_PORT" "$nextcloud_port"
|
|
betternas_write_env_assignment "BETTERNAS_EXPORT_PATH" ".state/${clone_name}/export"
|
|
betternas_write_env_assignment "BETTERNAS_VERSION" "local-dev"
|
|
betternas_write_env_assignment "BETTERNAS_CONTROL_PLANE_CLIENT_TOKEN" "${clone_name}-local-client-token"
|
|
betternas_write_env_assignment "BETTERNAS_CONTROL_PLANE_NODE_BOOTSTRAP_TOKEN" "${clone_name}-local-node-bootstrap-token"
|
|
betternas_write_env_assignment "BETTERNAS_DAV_AUTH_SECRET" "${clone_name}-local-dav-auth-secret"
|
|
betternas_write_env_assignment "BETTERNAS_DAV_CREDENTIAL_TTL" "1h"
|
|
betternas_write_env_assignment "BETTERNAS_NODE_MACHINE_ID" "${clone_name}-node"
|
|
betternas_write_env_assignment "BETTERNAS_NODE_DISPLAY_NAME" "${clone_name} node"
|
|
betternas_write_env_assignment "BETTERNAS_NODE_DIRECT_ADDRESS" "http://localhost:${node_agent_port}"
|
|
betternas_write_env_assignment "BETTERNAS_EXAMPLE_MOUNT_URL" "http://localhost:${node_agent_port}/dav/"
|
|
betternas_write_env_assignment "NEXTCLOUD_BASE_URL" "http://localhost:${nextcloud_port}"
|
|
betternas_write_env_assignment "NEXTCLOUD_ADMIN_USER" "admin"
|
|
betternas_write_env_assignment "NEXTCLOUD_ADMIN_PASSWORD" "admin"
|
|
} >"$env_path"
|
|
}
|