@simplehomelab/deployrr 6.0.23 → 6.0.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -13,6 +13,6 @@ sudo cp "$APP_DIR/files/config.json" "$DOCKER_FOLDER/appdata/ddns-updater/config
13
13
  CF_ZONE_ID=$(sudo cat "$DOCKER_FOLDER/secrets/cf_zone_identifier")
14
14
  CF_API_TOKEN=$(sudo cat "$DOCKER_FOLDER/secrets/cf_dns_api_token")
15
15
 
16
- sudo sed -i "s|CLOUDFLARE-ZONE-IDENTIFIER-PLACEHOLDER|${CF_ZONE_ID}|g" "$DOCKER_FOLDER/appdata/ddns-updater/config.json"
17
- sudo sed -i "s|CLOUDFLARE-DOMAIN-PLACEHOLDER|${DOMAINNAME_1}|g" "$DOCKER_FOLDER/appdata/ddns-updater/config.json"
18
- sudo sed -i "s|CLOUDFLARE-API-TOKEN-PLACEHOLDER|${CF_API_TOKEN}|g" "$DOCKER_FOLDER/appdata/ddns-updater/config.json"
16
+ f_safe_sed "s|CLOUDFLARE-ZONE-IDENTIFIER-PLACEHOLDER|${CF_ZONE_ID}|g" "$DOCKER_FOLDER/appdata/ddns-updater/config.json"
17
+ f_safe_sed "s|CLOUDFLARE-DOMAIN-PLACEHOLDER|${DOMAINNAME_1}|g" "$DOCKER_FOLDER/appdata/ddns-updater/config.json"
18
+ f_safe_sed "s|CLOUDFLARE-API-TOKEN-PLACEHOLDER|${CF_API_TOKEN}|g" "$DOCKER_FOLDER/appdata/ddns-updater/config.json"
@@ -32,53 +32,53 @@ f_print_substep "Injecting secrets into Langfuse compose files..."
32
32
  # --- Inject into main compose (langfuse-web) ---
33
33
  local web_compose="$COMPOSE_DIR/langfuse.yml"
34
34
  if [[ -f "$web_compose" ]]; then
35
- sudo sed -i "s|POSTGRESQL-PASSWORD-PLACEHOLDER|$POSTGRESQL_PASSWORD|g" "$web_compose"
36
- sudo sed -i "s|REDIS-PASSWORD-PLACEHOLDER|$REDIS_PASSWORD|g" "$web_compose"
37
- sudo sed -i "s|CLICKHOUSE-PASSWORD-PLACEHOLDER|$CLICKHOUSE_PASSWORD|g" "$web_compose"
38
- sudo sed -i "s|MINIO-PASSWORD-PLACEHOLDER|$MINIO_PASSWORD|g" "$web_compose"
39
- sudo sed -i "s|NEXTAUTH-SECRET-PLACEHOLDER|$NEXTAUTH_SECRET|g" "$web_compose"
40
- sudo sed -i "s|SALT-PLACEHOLDER|$SALT|g" "$web_compose"
41
- sudo sed -i "s|ENCRYPTION-KEY-PLACEHOLDER|$ENCRYPTION_KEY|g" "$web_compose"
35
+ f_safe_sed "s|POSTGRESQL-PASSWORD-PLACEHOLDER|$POSTGRESQL_PASSWORD|g" "$web_compose"
36
+ f_safe_sed "s|REDIS-PASSWORD-PLACEHOLDER|$REDIS_PASSWORD|g" "$web_compose"
37
+ f_safe_sed "s|CLICKHOUSE-PASSWORD-PLACEHOLDER|$CLICKHOUSE_PASSWORD|g" "$web_compose"
38
+ f_safe_sed "s|MINIO-PASSWORD-PLACEHOLDER|$MINIO_PASSWORD|g" "$web_compose"
39
+ f_safe_sed "s|NEXTAUTH-SECRET-PLACEHOLDER|$NEXTAUTH_SECRET|g" "$web_compose"
40
+ f_safe_sed "s|SALT-PLACEHOLDER|$SALT|g" "$web_compose"
41
+ f_safe_sed "s|ENCRYPTION-KEY-PLACEHOLDER|$ENCRYPTION_KEY|g" "$web_compose"
42
42
  log_info "langfuse" "Injected secrets into langfuse.yml"
43
43
  fi
44
44
 
45
45
  # --- Inject into worker compose ---
46
46
  local worker_compose="$COMPOSE_DIR/langfuse-worker.yml"
47
47
  if [[ -f "$worker_compose" ]]; then
48
- sudo sed -i "s|POSTGRESQL-PASSWORD-PLACEHOLDER|$POSTGRESQL_PASSWORD|g" "$worker_compose"
49
- sudo sed -i "s|REDIS-PASSWORD-PLACEHOLDER|$REDIS_PASSWORD|g" "$worker_compose"
50
- sudo sed -i "s|CLICKHOUSE-PASSWORD-PLACEHOLDER|$CLICKHOUSE_PASSWORD|g" "$worker_compose"
51
- sudo sed -i "s|MINIO-PASSWORD-PLACEHOLDER|$MINIO_PASSWORD|g" "$worker_compose"
52
- sudo sed -i "s|SALT-PLACEHOLDER|$SALT|g" "$worker_compose"
53
- sudo sed -i "s|ENCRYPTION-KEY-PLACEHOLDER|$ENCRYPTION_KEY|g" "$worker_compose"
48
+ f_safe_sed "s|POSTGRESQL-PASSWORD-PLACEHOLDER|$POSTGRESQL_PASSWORD|g" "$worker_compose"
49
+ f_safe_sed "s|REDIS-PASSWORD-PLACEHOLDER|$REDIS_PASSWORD|g" "$worker_compose"
50
+ f_safe_sed "s|CLICKHOUSE-PASSWORD-PLACEHOLDER|$CLICKHOUSE_PASSWORD|g" "$worker_compose"
51
+ f_safe_sed "s|MINIO-PASSWORD-PLACEHOLDER|$MINIO_PASSWORD|g" "$worker_compose"
52
+ f_safe_sed "s|SALT-PLACEHOLDER|$SALT|g" "$worker_compose"
53
+ f_safe_sed "s|ENCRYPTION-KEY-PLACEHOLDER|$ENCRYPTION_KEY|g" "$worker_compose"
54
54
  log_info "langfuse" "Injected secrets into langfuse-worker.yml"
55
55
  fi
56
56
 
57
57
  # --- Inject into PostgreSQL compose ---
58
58
  local pg_compose="$COMPOSE_DIR/langfuse-postgresql.yml"
59
59
  if [[ -f "$pg_compose" ]]; then
60
- sudo sed -i "s|POSTGRESQL-PASSWORD-PLACEHOLDER|$POSTGRESQL_PASSWORD|g" "$pg_compose"
60
+ f_safe_sed "s|POSTGRESQL-PASSWORD-PLACEHOLDER|$POSTGRESQL_PASSWORD|g" "$pg_compose"
61
61
  log_info "langfuse" "Injected secrets into langfuse-postgresql.yml"
62
62
  fi
63
63
 
64
64
  # --- Inject into Redis compose ---
65
65
  local redis_compose="$COMPOSE_DIR/langfuse-redis.yml"
66
66
  if [[ -f "$redis_compose" ]]; then
67
- sudo sed -i "s|REDIS-PASSWORD-PLACEHOLDER|$REDIS_PASSWORD|g" "$redis_compose"
67
+ f_safe_sed "s|REDIS-PASSWORD-PLACEHOLDER|$REDIS_PASSWORD|g" "$redis_compose"
68
68
  log_info "langfuse" "Injected secrets into langfuse-redis.yml"
69
69
  fi
70
70
 
71
71
  # --- Inject into ClickHouse compose ---
72
72
  local ch_compose="$COMPOSE_DIR/langfuse-clickhouse.yml"
73
73
  if [[ -f "$ch_compose" ]]; then
74
- sudo sed -i "s|CLICKHOUSE-PASSWORD-PLACEHOLDER|$CLICKHOUSE_PASSWORD|g" "$ch_compose"
74
+ f_safe_sed "s|CLICKHOUSE-PASSWORD-PLACEHOLDER|$CLICKHOUSE_PASSWORD|g" "$ch_compose"
75
75
  log_info "langfuse" "Injected secrets into langfuse-clickhouse.yml"
76
76
  fi
77
77
 
78
78
  # --- Inject into MinIO compose ---
79
79
  local minio_compose="$COMPOSE_DIR/langfuse-minio.yml"
80
80
  if [[ -f "$minio_compose" ]]; then
81
- sudo sed -i "s|MINIO-PASSWORD-PLACEHOLDER|$MINIO_PASSWORD|g" "$minio_compose"
81
+ f_safe_sed "s|MINIO-PASSWORD-PLACEHOLDER|$MINIO_PASSWORD|g" "$minio_compose"
82
82
  log_info "langfuse" "Injected secrets into langfuse-minio.yml"
83
83
  fi
84
84
 
@@ -158,20 +158,20 @@ if [[ "$headless_choice" == "1" ]]; then
158
158
  # --- Inject headless init values ---
159
159
  f_print_substep "Configuring headless initialization..."
160
160
 
161
- sudo sed -i "s|HEADLESS-ORG-PLACEHOLDER|$org_id|g" "$web_compose"
162
- sudo sed -i "s|HEADLESS-ORGNAME-PLACEHOLDER|$org_name|g" "$web_compose"
163
- sudo sed -i "s|HEADLESS-PROJECT-PLACEHOLDER|$project_id|g" "$web_compose"
164
- sudo sed -i "s|HEADLESS-PROJECTNAME-PLACEHOLDER|$project_name|g" "$web_compose"
165
- sudo sed -i "s|HEADLESS-EMAIL-PLACEHOLDER|$user_email|g" "$web_compose"
166
- sudo sed -i "s|HEADLESS-USERNAME-PLACEHOLDER|$basic_user|g" "$web_compose"
167
- sudo sed -i "s|HEADLESS-PASSWORD-PLACEHOLDER|$basic_pass|g" "$web_compose"
161
+ f_safe_sed "s|HEADLESS-ORG-PLACEHOLDER|$org_id|g" "$web_compose"
162
+ f_safe_sed "s|HEADLESS-ORGNAME-PLACEHOLDER|$org_name|g" "$web_compose"
163
+ f_safe_sed "s|HEADLESS-PROJECT-PLACEHOLDER|$project_id|g" "$web_compose"
164
+ f_safe_sed "s|HEADLESS-PROJECTNAME-PLACEHOLDER|$project_name|g" "$web_compose"
165
+ f_safe_sed "s|HEADLESS-EMAIL-PLACEHOLDER|$user_email|g" "$web_compose"
166
+ f_safe_sed "s|HEADLESS-USERNAME-PLACEHOLDER|$basic_user|g" "$web_compose"
167
+ f_safe_sed "s|HEADLESS-PASSWORD-PLACEHOLDER|$basic_pass|g" "$web_compose"
168
168
 
169
169
  f_print_success "Admin account will be created on first startup"
170
170
  log_info "langfuse" "Headless init configured: user=$basic_user email=$user_email"
171
171
  else
172
172
  # --- Remove headless init placeholders ---
173
173
  if [[ -f "$web_compose" ]]; then
174
- sudo sed -i "/HEADLESS-.*-PLACEHOLDER/d" "$web_compose"
174
+ f_safe_sed "/HEADLESS-.*-PLACEHOLDER/d" "$web_compose"
175
175
  log_info "langfuse" "Headless init skipped - placeholders removed"
176
176
  fi
177
177
  f_print_substep "Manual account setup selected - create your account via the web UI"
@@ -19,7 +19,7 @@ fi
19
19
  local n8n_compose="$COMPOSE_DIR/n8n.yml"
20
20
  if [[ -f "$n8n_compose" ]]; then
21
21
  f_print_substep "Injecting database password into n8n compose..."
22
- sudo sed -i "s|N8N-POSTGRESQL-PASSWORD-PLACEHOLDER|$POSTGRESQL_PASSWORD|g" "$n8n_compose"
22
+ f_safe_sed "s|N8N-POSTGRESQL-PASSWORD-PLACEHOLDER|$POSTGRESQL_PASSWORD|g" "$n8n_compose"
23
23
  log_info "n8n" "Injected PostgreSQL password into n8n.yml"
24
24
  fi
25
25
 
@@ -26,7 +26,7 @@ if [[ -n "$TRAEFIK_RUNNING" && -f "$TRAEFIK_PRODUCTION_STATUS" && -f "$FILE_PROV
26
26
  f_print_substep "Adding hostname: $PDFDING_HOSTNAME"
27
27
 
28
28
  if [[ -f "$APP_COMPOSE_FILE" ]]; then
29
- sudo sed -i "s|PDFDING_HOSTNAME_PLACEHOLDER|$PDFDING_HOSTNAME|g" "$APP_COMPOSE_FILE"
29
+ f_safe_sed "s|PDFDING_HOSTNAME_PLACEHOLDER|$PDFDING_HOSTNAME|g" "$APP_COMPOSE_FILE"
30
30
  f_print_substep "Updated HOST_NAME in: $APP_COMPOSE_FILE"
31
31
  f_print_substep "HOST_NAME set to: \$SERVER_LAN_IP,$PDFDING_HOSTNAME"
32
32
  else
@@ -38,7 +38,7 @@ else
38
38
  f_print_substep "Using SERVER_LAN_IP only for HOST_NAME"
39
39
 
40
40
  if [[ -f "$APP_COMPOSE_FILE" ]]; then
41
- sudo sed -i "s|,PDFDING_HOSTNAME_PLACEHOLDER||g" "$APP_COMPOSE_FILE"
41
+ f_safe_sed "s|,PDFDING_HOSTNAME_PLACEHOLDER||g" "$APP_COMPOSE_FILE"
42
42
  f_print_substep "Updated HOST_NAME in: $APP_COMPOSE_FILE"
43
43
  else
44
44
  f_print_warning "Compose file not found: $APP_COMPOSE_FILE"
@@ -12,11 +12,11 @@ if [[ -z "$PLEX_CLAIM" ]]; then
12
12
  f_print_substep "No Plex claim token provided, skipping claim configuration"
13
13
 
14
14
  # Comment out PLEX_CLAIM_FILE environment variable
15
- sed -i 's| PLEX_CLAIM_FILE: /run/secrets/plex_claim| # PLEX_CLAIM_FILE: /run/secrets/plex_claim|' "$APP_COMPOSE_FILE"
15
+ f_safe_sed 's| PLEX_CLAIM_FILE: /run/secrets/plex_claim| # PLEX_CLAIM_FILE: /run/secrets/plex_claim|' "$APP_COMPOSE_FILE"
16
16
 
17
17
  # Comment out secrets section
18
- sed -i 's| secrets:| # secrets:|' "$APP_COMPOSE_FILE"
19
- sed -i 's| - plex_claim| # - plex_claim|' "$APP_COMPOSE_FILE"
18
+ f_safe_sed 's| secrets:| # secrets:|' "$APP_COMPOSE_FILE"
19
+ f_safe_sed 's| - plex_claim| # - plex_claim|' "$APP_COMPOSE_FILE"
20
20
 
21
21
  f_print_substep "Secrets section commented out in: $APP_COMPOSE_FILE"
22
22
  else
@@ -22,17 +22,17 @@ else
22
22
  # Uncomment the ports section if commented
23
23
  if grep -q "^\s*#\s*ports:" "$GLUETUN_COMPOSE" 2>/dev/null; then
24
24
  f_print_substep "Enabling ports section in Gluetun"
25
- sudo sed -i 's/^\(\s*\)#\s*ports:/\1ports:/' "$GLUETUN_COMPOSE"
25
+ f_safe_sed 's/^\(\s*\)#\s*ports:/\1ports:/' "$GLUETUN_COMPOSE"
26
26
  fi
27
27
 
28
28
  # Uncomment the qbittorrent-vpn port if it exists commented
29
29
  if grep -q "^\s*#.*\$QBITTORRENTVPN_PORT:8080" "$GLUETUN_COMPOSE" 2>/dev/null; then
30
30
  f_print_substep "Enabling qBittorrent VPN port mapping"
31
- sudo sed -i 's/^\(\s*\)#\s*-\s*\$QBITTORRENTVPN_PORT:8080/\1- \$QBITTORRENTVPN_PORT:8080/' "$GLUETUN_COMPOSE"
31
+ f_safe_sed 's/^\(\s*\)#\s*-\s*\$QBITTORRENTVPN_PORT:8080/\1- \$QBITTORRENTVPN_PORT:8080/' "$GLUETUN_COMPOSE"
32
32
  elif ! grep -q "QBITTORRENTVPN_PORT:8080" "$GLUETUN_COMPOSE" 2>/dev/null; then
33
33
  # Port mapping doesn't exist, add it after the ports: line
34
34
  f_print_substep "Adding qBittorrent VPN port mapping to Gluetun"
35
- sudo sed -i '/^\s*ports:/a\ - $QBITTORRENTVPN_PORT:8080 # qBittorrent VPN' "$GLUETUN_COMPOSE"
35
+ f_safe_sed '/^\s*ports:/a\ - $QBITTORRENTVPN_PORT:8080 # qBittorrent VPN' "$GLUETUN_COMPOSE"
36
36
  fi
37
37
  fi
38
38
  echo
@@ -23,7 +23,7 @@ if [[ -n "$SABNZBD_CONTAINER_ID" && -f "$INI_FILE" ]]; then
23
23
  f_print_substep "Adding to whitelist: ${FILE_PROVIDER_APP_SUBDOMAIN}.${DOMAINNAME_1}"
24
24
  f_print_substep "Editing: $INI_FILE"
25
25
  # Add domain and app name to the whitelist (host_whitelist line)
26
- sudo sed -i "s/${SABNZBD_CONTAINER_ID},/${SABNZBD_CONTAINER_ID},${FILE_PROVIDER_APP_SUBDOMAIN}.${DOMAINNAME_1},${APP_SNAME}/g" "$INI_FILE"
26
+ f_safe_sed "s/${SABNZBD_CONTAINER_ID},/${SABNZBD_CONTAINER_ID},${FILE_PROVIDER_APP_SUBDOMAIN}.${DOMAINNAME_1},${APP_SNAME}/g" "$INI_FILE"
27
27
  else
28
28
  f_print_substep "Container ID or config file not found, skipping whitelist update"
29
29
  fi
@@ -19,7 +19,7 @@ sudo mkdir -p "$DOCKER_FOLDER/appdata/searxng/cache"
19
19
  # Copy preconfigured settings.yml and substitute secret key placeholder
20
20
  f_print_substep "Deploying $APP_PNAME configuration files..."
21
21
  sudo cp "$APP_DIR/files/settings.yml" "$DOCKER_FOLDER/appdata/searxng/settings/settings.yml"
22
- sudo sed -i "s|SEARXNG-SECRET-KEY-PLACEHOLDER|$SEARXNG_SECRET_VALUE|g" "$DOCKER_FOLDER/appdata/searxng/settings/settings.yml"
22
+ f_safe_sed "s|SEARXNG-SECRET-KEY-PLACEHOLDER|$SEARXNG_SECRET_VALUE|g" "$DOCKER_FOLDER/appdata/searxng/settings/settings.yml"
23
23
 
24
24
  # Copy limiter.toml for bot detection
25
25
  sudo cp "$APP_DIR/files/limiter.toml" "$DOCKER_FOLDER/appdata/searxng/settings/limiter.toml"
@@ -163,38 +163,38 @@ for composeFile in "${COMPOSE_FILES[@]}"; do
163
163
  [[ ! -f "$filePath" ]] && continue
164
164
 
165
165
  # Postgres password
166
- sudo sed -i "s|POSTGRES-PASSWORD-PLACEHOLDER|${POSTGRES_PASSWORD}|g" "$filePath"
166
+ f_safe_sed "s|POSTGRES-PASSWORD-PLACEHOLDER|${POSTGRES_PASSWORD}|g" "$filePath"
167
167
 
168
168
  # JWT secret
169
- sudo sed -i "s|JWT-SECRET-PLACEHOLDER|${JWT_SECRET}|g" "$filePath"
169
+ f_safe_sed "s|JWT-SECRET-PLACEHOLDER|${JWT_SECRET}|g" "$filePath"
170
170
 
171
171
  # JWT tokens (ANON + SERVICE_ROLE)
172
- sudo sed -i "s|ANON-KEY-PLACEHOLDER|${ANON_KEY}|g" "$filePath"
173
- sudo sed -i "s|SERVICE-ROLE-KEY-PLACEHOLDER|${SERVICE_ROLE_KEY}|g" "$filePath"
172
+ f_safe_sed "s|ANON-KEY-PLACEHOLDER|${ANON_KEY}|g" "$filePath"
173
+ f_safe_sed "s|SERVICE-ROLE-KEY-PLACEHOLDER|${SERVICE_ROLE_KEY}|g" "$filePath"
174
174
 
175
175
  # Dashboard credentials
176
- sudo sed -i "s|DASHBOARD-USERNAME-PLACEHOLDER|${DASHBOARD_USERNAME}|g" "$filePath"
177
- sudo sed -i "s|DASHBOARD-PASSWORD-PLACEHOLDER|${DASHBOARD_PASSWORD}|g" "$filePath"
176
+ f_safe_sed "s|DASHBOARD-USERNAME-PLACEHOLDER|${DASHBOARD_USERNAME}|g" "$filePath"
177
+ f_safe_sed "s|DASHBOARD-PASSWORD-PLACEHOLDER|${DASHBOARD_PASSWORD}|g" "$filePath"
178
178
 
179
179
  # Secret key base (Realtime + Supavisor)
180
- sudo sed -i "s|SECRET-KEY-BASE-PLACEHOLDER|${SECRET_KEY_BASE}|g" "$filePath"
180
+ f_safe_sed "s|SECRET-KEY-BASE-PLACEHOLDER|${SECRET_KEY_BASE}|g" "$filePath"
181
181
 
182
182
  # Vault encryption key (Supavisor)
183
- sudo sed -i "s|VAULT-ENC-KEY-PLACEHOLDER|${VAULT_ENC_KEY}|g" "$filePath"
183
+ f_safe_sed "s|VAULT-ENC-KEY-PLACEHOLDER|${VAULT_ENC_KEY}|g" "$filePath"
184
184
 
185
185
  # PG Meta crypto key
186
- sudo sed -i "s|PG-META-CRYPTO-KEY-PLACEHOLDER|${PG_META_CRYPTO_KEY}|g" "$filePath"
186
+ f_safe_sed "s|PG-META-CRYPTO-KEY-PLACEHOLDER|${PG_META_CRYPTO_KEY}|g" "$filePath"
187
187
 
188
188
  # Logflare tokens
189
- sudo sed -i "s|LOGFLARE-PUBLIC-TOKEN-PLACEHOLDER|${LOGFLARE_PUBLIC_TOKEN}|g" "$filePath"
190
- sudo sed -i "s|LOGFLARE-PRIVATE-TOKEN-PLACEHOLDER|${LOGFLARE_PRIVATE_TOKEN}|g" "$filePath"
189
+ f_safe_sed "s|LOGFLARE-PUBLIC-TOKEN-PLACEHOLDER|${LOGFLARE_PUBLIC_TOKEN}|g" "$filePath"
190
+ f_safe_sed "s|LOGFLARE-PRIVATE-TOKEN-PLACEHOLDER|${LOGFLARE_PRIVATE_TOKEN}|g" "$filePath"
191
191
 
192
192
  # Storage S3 credentials
193
- sudo sed -i "s|S3-ACCESS-KEY-ID-PLACEHOLDER|${S3_ACCESS_KEY_ID}|g" "$filePath"
194
- sudo sed -i "s|S3-ACCESS-KEY-SECRET-PLACEHOLDER|${S3_ACCESS_KEY_SECRET}|g" "$filePath"
193
+ f_safe_sed "s|S3-ACCESS-KEY-ID-PLACEHOLDER|${S3_ACCESS_KEY_ID}|g" "$filePath"
194
+ f_safe_sed "s|S3-ACCESS-KEY-SECRET-PLACEHOLDER|${S3_ACCESS_KEY_SECRET}|g" "$filePath"
195
195
 
196
196
  # Pooler tenant ID
197
- sudo sed -i "s|POOLER-TENANT-ID-PLACEHOLDER|${POOLER_TENANT_ID}|g" "$filePath"
197
+ f_safe_sed "s|POOLER-TENANT-ID-PLACEHOLDER|${POOLER_TENANT_ID}|g" "$filePath"
198
198
  done
199
199
 
200
200
  f_print_success "Supabase secrets configured"
@@ -15,13 +15,13 @@ f_print_substep "Admin token created"
15
15
 
16
16
  # Uncomment ADMIN_TOKEN line in compose
17
17
  f_print_substep "Updating compose file: $APP_COMPOSE_FILE"
18
- sed -i 's|# - ADMIN_TOKEN=|- ADMIN_TOKEN=|' "$APP_COMPOSE_FILE"
18
+ f_safe_sed 's|# - ADMIN_TOKEN=|- ADMIN_TOKEN=|' "$APP_COMPOSE_FILE"
19
19
  sleep 1
20
20
 
21
21
  # Replace placeholder with hashed token
22
- sed -i "s|ADMIN-TOKEN-PLACEHOLDER|$VAULTWARDEN_ADMIN_TOKEN|" "$APP_COMPOSE_FILE"
22
+ f_safe_sed "s|ADMIN-TOKEN-PLACEHOLDER|$VAULTWARDEN_ADMIN_TOKEN|" "$APP_COMPOSE_FILE"
23
23
  sleep 1
24
24
 
25
25
  # Escape $ signs for Docker Compose (argon2 hash contains $ characters)
26
- sed -i '/.*ADMIN_TOKEN.*/s/\$/\$\$/g' "$APP_COMPOSE_FILE"
26
+ f_safe_sed '/.*ADMIN_TOKEN.*/s/\$/\$\$/g' "$APP_COMPOSE_FILE"
27
27
  f_print_substep "Admin token added to compose file"
@@ -18,11 +18,11 @@ echo
18
18
 
19
19
  f_print_step "3/3" "Updating compose file with password hash..."
20
20
  # Replace placeholder with hashed password
21
- sudo sed -i "s|WG-EASY-PASSWORD-HASH-PLACEHOLDER|$WGEASY_PASSWORD_HASH|g" "$APP_COMPOSE_FILE"
21
+ f_safe_sed "s|WG-EASY-PASSWORD-HASH-PLACEHOLDER|$WGEASY_PASSWORD_HASH|g" "$APP_COMPOSE_FILE"
22
22
  # Escape $ signs for Docker Compose (bcrypt hashes contain $ characters)
23
23
  if ! grep -q 'PASSWORD_HASH=\$\$' "$APP_COMPOSE_FILE"; then
24
24
  f_print_substep "Escaping special characters in password hash"
25
- sudo sed -i '/.*PASSWORD_HASH.*/s/\$/\$\$/g' "$APP_COMPOSE_FILE"
25
+ f_safe_sed '/.*PASSWORD_HASH.*/s/\$/\$\$/g' "$APP_COMPOSE_FILE"
26
26
  fi
27
27
  echo
28
28
 
@@ -54,7 +54,7 @@ f_print_substep "Configuring 9Router secrets..."
54
54
 
55
55
  JWT_SECRET=$(sudo cat "$DOCKER_FOLDER/secrets/ninerouter_jwt_secret" 2>/dev/null)
56
56
  if [[ -n "$JWT_SECRET" ]]; then
57
- sudo sed -i "s|JWT-SECRET-PLACEHOLDER|$JWT_SECRET|" "$APP_COMPOSE_FILE"
57
+ f_safe_sed "s|JWT-SECRET-PLACEHOLDER|$JWT_SECRET|" "$APP_COMPOSE_FILE"
58
58
  f_print_substep "JWT secret injected into compose file"
59
59
  else
60
60
  f_print_error "JWT secret not found in secrets"
@@ -63,7 +63,7 @@ fi
63
63
 
64
64
  INITIAL_PASSWORD=$(sudo cat "$DOCKER_FOLDER/secrets/ninerouter_password" 2>/dev/null)
65
65
  if [[ -n "$INITIAL_PASSWORD" ]]; then
66
- sudo sed -i "s|INITIAL-PASSWORD-PLACEHOLDER|$INITIAL_PASSWORD|" "$APP_COMPOSE_FILE"
66
+ f_safe_sed "s|INITIAL-PASSWORD-PLACEHOLDER|$INITIAL_PASSWORD|" "$APP_COMPOSE_FILE"
67
67
  export INITIAL_PASSWORD # Export so envsubst can substitute in post-install messages
68
68
  f_print_substep "Initial password injected into compose file"
69
69
  else
@@ -74,8 +74,8 @@ fi
74
74
  # Generate unique API key secret and machine ID salt
75
75
  API_KEY_SECRET=$(openssl rand -hex 16 2>/dev/null || head -c 32 /dev/urandom | xxd -p | head -c 32)
76
76
  MACHINE_ID_SALT=$(openssl rand -hex 16 2>/dev/null || head -c 32 /dev/urandom | xxd -p | head -c 32)
77
- sudo sed -i "s|API-KEY-SECRET-PLACEHOLDER|$API_KEY_SECRET|" "$APP_COMPOSE_FILE"
78
- sudo sed -i "s|MACHINE-ID-SALT-PLACEHOLDER|$MACHINE_ID_SALT|" "$APP_COMPOSE_FILE"
77
+ f_safe_sed "s|API-KEY-SECRET-PLACEHOLDER|$API_KEY_SECRET|" "$APP_COMPOSE_FILE"
78
+ f_safe_sed "s|MACHINE-ID-SALT-PLACEHOLDER|$MACHINE_ID_SALT|" "$APP_COMPOSE_FILE"
79
79
  f_print_substep "API key secret and machine ID salt generated"
80
80
 
81
81
  # Step 5: Set ownership of ALL volume-mounted directories
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simplehomelab/deployrr",
3
- "version": "6.0.23",
3
+ "version": "6.0.25",
4
4
  "description": "Deployrr - Docker homelab deployment manager",
5
5
  "bin": {
6
6
  "deployrr": "./bin/deployrr-init.sh"