← back to Designer Wallcoverings
security: strip hardcoded dw_admin pw across 27 files (parent + nested) — env-first
59c3ba19c44d5cb4f9aebbac8aa12eef3eac2de9 · 2026-05-30 23:31:22 -0700 · Steve
Combined parent-level sweep that mirrors nested commits:
- DW-Programming (nested) 3e3124d: 16 .py/.sh files
- shopify (nested) 0f0a91a: 2 scripts
- parent-only: 7 files in scripts/, lib/, vendor-monthly/, README.md
- 7 stale .pyc bytecode files untracked (kept on disk via .gitignore rule)
Patterns covered (all mechanical sed):
- bare DSN: ':PASS@host' -> '@host'
- export PGPASSWORD='PASS' -> export PGPASSWORD="${PGPASSWORD:-}"
- inline PGPASSWORD='PASS' psql -> ${PGPASSWORD:-} (env-first)
- DB_PASS="PASS" -> DB_PASS="${DB_PASS:-${PGPASSWORD:-}}"
- README.md env-example -> placeholder
Host + DB name preserved in every DSN per secret-strip skill convention.
Caller must now supply PGPASSWORD (or DATABASE_URL) via env on first run.
Added __pycache__/ + *.pyc to parent .gitignore (was missing — stale .pyc
files in tree carried pre-strip dw_admin pw in compiled bytecode form).
NO rotation, NO deploy. The dw_admin pw rotation itself remains Steve-gated
(~/Projects/_shared/docs/pg-rotation-runbook.md). Post-rotation these
scripts inherit the new pw without further code changes.
Closes wallco-ai TODO line 14 + CNCP _shared item 13.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Files touched
M .gitignoreM DW-Programming/ImportNewSkufromURL/ralph-vendor-summary.shM DW-Programming/ImportNewSkufromURL/test-all-vendors-ralph.shM DW-Programming/ImportNewSkufromURL/test-vendor-product-data-ralph.shM DW-Programming/enrich-anna-french.js.backup-20260319-013920M DW-Programming/generate-justindavid-rooms.pyM DW-Programming/phase3-ai-enrich-batch.pyM DW-Programming/phase3-ai-enrich-batch.shM DW-Programming/pr-logo-crop.pyD DW-Programming/room-setting-app/__pycache__/batch-room-gen-v2.cpython-314.pycD DW-Programming/room-setting-app/__pycache__/batch-room-generator.cpython-314.pycD DW-Programming/room-setting-app/__pycache__/batch-room-settings.cpython-314.pycD DW-Programming/room-setting-app/__pycache__/generate-phillipe-romano-rooms.cpython-314.pycM DW-Programming/room-setting-app/batch-room-gen-v2.pyM DW-Programming/room-setting-app/batch-room-generator.pyM DW-Programming/room-setting-app/batch-room-settings.pyM DW-Programming/room-setting-app/generate-phillipe-romano-rooms.pyD DW-Programming/room-setting-app/scripts/__pycache__/batch-room-generator.cpython-314.pycM DW-Programming/room-setting-app/scripts/batch-room-generator.pyM DW-Programming/scripts/versa-image-enrichment.shM DW-Programming/scripts/william-morris-image-enrichment.shM DW-Programming/vendor-crawlers/scripts/monthly-vendor-update.shM lib/architectural-vendor-update/README.mdD scripts/__pycache__/batch-room-generator.cpython-314.pycD scripts/__pycache__/batch-room-settings.cpython-314.pycM scripts/archive-thibaut-unknown.js.DISABLED-2026-04-24M scripts/batch-room-generator.pyM scripts/batch-room-settings.pyM scripts/justindavid-daily-cron.shM scripts/rw-drapery-daily-cron.shM scripts/vendor-monthly/elitis-recrawl.shM scripts/vendor-monthly/thibaut-recrawl.shM shopify/scripts/batch-room-settings.pyM shopify/scripts/dedup-phillipe-romano.js.DISABLED-2026-04-24
Diff
commit 59c3ba19c44d5cb4f9aebbac8aa12eef3eac2de9
Author: Steve <steve@designerwallcoverings.com>
Date: Sat May 30 23:31:22 2026 -0700
security: strip hardcoded dw_admin pw across 27 files (parent + nested) — env-first
Combined parent-level sweep that mirrors nested commits:
- DW-Programming (nested) 3e3124d: 16 .py/.sh files
- shopify (nested) 0f0a91a: 2 scripts
- parent-only: 7 files in scripts/, lib/, vendor-monthly/, README.md
- 7 stale .pyc bytecode files untracked (kept on disk via .gitignore rule)
Patterns covered (all mechanical sed):
- bare DSN: ':PASS@host' -> '@host'
- export PGPASSWORD='PASS' -> export PGPASSWORD="${PGPASSWORD:-}"
- inline PGPASSWORD='PASS' psql -> ${PGPASSWORD:-} (env-first)
- DB_PASS="PASS" -> DB_PASS="${DB_PASS:-${PGPASSWORD:-}}"
- README.md env-example -> placeholder
Host + DB name preserved in every DSN per secret-strip skill convention.
Caller must now supply PGPASSWORD (or DATABASE_URL) via env on first run.
Added __pycache__/ + *.pyc to parent .gitignore (was missing — stale .pyc
files in tree carried pre-strip dw_admin pw in compiled bytecode form).
NO rotation, NO deploy. The dw_admin pw rotation itself remains Steve-gated
(~/Projects/_shared/docs/pg-rotation-runbook.md). Post-rotation these
scripts inherit the new pw without further code changes.
Closes wallco-ai TODO line 14 + CNCP _shared item 13.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---
.gitignore | 4 ++++
.../ImportNewSkufromURL/ralph-vendor-summary.sh | 2 +-
.../ImportNewSkufromURL/test-all-vendors-ralph.sh | 2 +-
.../test-vendor-product-data-ralph.sh | 2 +-
.../enrich-anna-french.js.backup-20260319-013920 | 2 +-
DW-Programming/generate-justindavid-rooms.py | 2 +-
DW-Programming/phase3-ai-enrich-batch.py | 2 +-
DW-Programming/phase3-ai-enrich-batch.sh | 2 +-
DW-Programming/pr-logo-crop.py | 2 +-
.../__pycache__/batch-room-gen-v2.cpython-314.pyc | Bin 22884 -> 0 bytes
.../__pycache__/batch-room-generator.cpython-314.pyc | Bin 22808 -> 0 bytes
.../__pycache__/batch-room-settings.cpython-314.pyc | Bin 21052 -> 0 bytes
.../generate-phillipe-romano-rooms.cpython-314.pyc | Bin 18437 -> 0 bytes
DW-Programming/room-setting-app/batch-room-gen-v2.py | 2 +-
DW-Programming/room-setting-app/batch-room-generator.py | 2 +-
DW-Programming/room-setting-app/batch-room-settings.py | 2 +-
.../room-setting-app/generate-phillipe-romano-rooms.py | 2 +-
.../__pycache__/batch-room-generator.cpython-314.pyc | Bin 24695 -> 0 bytes
.../room-setting-app/scripts/batch-room-generator.py | 2 +-
DW-Programming/scripts/versa-image-enrichment.sh | 2 +-
.../scripts/william-morris-image-enrichment.sh | 2 +-
.../vendor-crawlers/scripts/monthly-vendor-update.sh | 2 +-
lib/architectural-vendor-update/README.md | 2 +-
.../__pycache__/batch-room-generator.cpython-314.pyc | Bin 19815 -> 0 bytes
scripts/__pycache__/batch-room-settings.cpython-314.pyc | Bin 17534 -> 0 bytes
scripts/archive-thibaut-unknown.js.DISABLED-2026-04-24 | 2 +-
scripts/batch-room-generator.py | 2 +-
scripts/batch-room-settings.py | 2 +-
scripts/justindavid-daily-cron.sh | 6 +++---
scripts/rw-drapery-daily-cron.sh | 4 ++--
scripts/vendor-monthly/elitis-recrawl.sh | 4 ++--
scripts/vendor-monthly/thibaut-recrawl.sh | 4 ++--
shopify/scripts/batch-room-settings.py | 2 +-
.../dedup-phillipe-romano.js.DISABLED-2026-04-24 | 2 +-
34 files changed, 35 insertions(+), 31 deletions(-)
diff --git a/.gitignore b/.gitignore
index b78aa783..8d7806e5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -32,3 +32,7 @@ shopify/scripts/bulk-products-variants.jsonl
shopify/scripts/sheets-service-account.json
**/*service-account*.json
**/*service_account*.json
+
+# Python bytecode (added 2026-05-30 — stale .pyc still contained pre-strip dw_admin pw)
+__pycache__/
+*.pyc
diff --git a/DW-Programming/ImportNewSkufromURL/ralph-vendor-summary.sh b/DW-Programming/ImportNewSkufromURL/ralph-vendor-summary.sh
index 1e7c24ee..c957b069 100755
--- a/DW-Programming/ImportNewSkufromURL/ralph-vendor-summary.sh
+++ b/DW-Programming/ImportNewSkufromURL/ralph-vendor-summary.sh
@@ -1,7 +1,7 @@
#!/bin/bash
# Ralph Wiggum Vendor URL Summary Report
-export PGPASSWORD='DW2024SecurePass'
+export PGPASSWORD="${PGPASSWORD:-}"
echo "🍭 RALPH WIGGUM VENDOR URL SUMMARY REPORT"
echo "=========================================="
diff --git a/DW-Programming/ImportNewSkufromURL/test-all-vendors-ralph.sh b/DW-Programming/ImportNewSkufromURL/test-all-vendors-ralph.sh
index 302e7281..6de1245f 100755
--- a/DW-Programming/ImportNewSkufromURL/test-all-vendors-ralph.sh
+++ b/DW-Programming/ImportNewSkufromURL/test-all-vendors-ralph.sh
@@ -12,7 +12,7 @@ echo ""
# Configuration
DB_USER="dw_admin"
-DB_PASS="DW2024SecurePass"
+DB_PASS="${DB_PASS:-${PGPASSWORD:-}}"
DB_HOST="127.0.0.1"
DB_NAME="dw_unified"
BASE_URL="http://45.61.58.125:3002/api/vendor-skills"
diff --git a/DW-Programming/ImportNewSkufromURL/test-vendor-product-data-ralph.sh b/DW-Programming/ImportNewSkufromURL/test-vendor-product-data-ralph.sh
index 15b96bfe..11b3cc32 100755
--- a/DW-Programming/ImportNewSkufromURL/test-vendor-product-data-ralph.sh
+++ b/DW-Programming/ImportNewSkufromURL/test-vendor-product-data-ralph.sh
@@ -12,7 +12,7 @@ echo ""
# Configuration
DB_USER="dw_admin"
-DB_PASS="DW2024SecurePass"
+DB_PASS="${DB_PASS:-${PGPASSWORD:-}}"
DB_HOST="127.0.0.1"
DB_NAME="dw_unified"
RESULTS_DIR="/root/Projects/Designer-Wallcoverings/DW-Programming/ImportNewSkufromURL/ralph-test-results"
diff --git a/DW-Programming/enrich-anna-french.js.backup-20260319-013920 b/DW-Programming/enrich-anna-french.js.backup-20260319-013920
index 7b63b7c8..8cfda94d 100644
--- a/DW-Programming/enrich-anna-french.js.backup-20260319-013920
+++ b/DW-Programming/enrich-anna-french.js.backup-20260319-013920
@@ -9,7 +9,7 @@
const https = require('https');
const { Client } = require('pg');
-const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
+const DB_URL = 'postgresql://dw_admin@127.0.0.1:5432/dw_unified';
const DELAY_MS = 600; // 600ms between requests
const BATCH_SIZE = 50; // Log progress every N products
const MAX_RETRIES = 2;
diff --git a/DW-Programming/generate-justindavid-rooms.py b/DW-Programming/generate-justindavid-rooms.py
index d48b2e93..13f13660 100644
--- a/DW-Programming/generate-justindavid-rooms.py
+++ b/DW-Programming/generate-justindavid-rooms.py
@@ -27,7 +27,7 @@ from concurrent.futures import ThreadPoolExecutor, as_completed
# ─── Configuration ───────────────────────────────────────────────────
ROOM_API = "http://127.0.0.1:3075/api/generate-room"
-DB_CONN = "postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified"
+DB_CONN = "postgresql://dw_admin@127.0.0.1:5432/dw_unified"
SLACK_WEBHOOK = "${SLACK_WEBHOOK_URL}"
PRODUCTS_JSON = "/tmp/justindavid-rooms-products.json"
PROGRESS_FILE = "/tmp/justindavid-rooms-progress.json"
diff --git a/DW-Programming/phase3-ai-enrich-batch.py b/DW-Programming/phase3-ai-enrich-batch.py
index 9410bb99..5548f6d6 100644
--- a/DW-Programming/phase3-ai-enrich-batch.py
+++ b/DW-Programming/phase3-ai-enrich-batch.py
@@ -14,7 +14,7 @@ from datetime import datetime, timezone, timedelta
import psycopg2
-DB_DSN = "postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified"
+DB_DSN = "postgresql://dw_admin@127.0.0.1:5432/dw_unified"
GEMINI_KEY = "${GOOGLE_API_KEY}"
GEMINI_URL = f"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key={GEMINI_KEY}"
BATCH_SIZE = 20
diff --git a/DW-Programming/phase3-ai-enrich-batch.sh b/DW-Programming/phase3-ai-enrich-batch.sh
index 291bbca3..0d85ee5e 100644
--- a/DW-Programming/phase3-ai-enrich-batch.sh
+++ b/DW-Programming/phase3-ai-enrich-batch.sh
@@ -5,7 +5,7 @@ set -euo pipefail
GEMINI_KEY="${GOOGLE_API_KEY}"
GEMINI_URL="https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${GEMINI_KEY}"
-DB="postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified"
+DB="postgresql://dw_admin@127.0.0.1:5432/dw_unified"
TMPDIR="/tmp/ai-enrich-$$"
mkdir -p "$TMPDIR"
diff --git a/DW-Programming/pr-logo-crop.py b/DW-Programming/pr-logo-crop.py
index e2299f03..7cd1e000 100644
--- a/DW-Programming/pr-logo-crop.py
+++ b/DW-Programming/pr-logo-crop.py
@@ -31,7 +31,7 @@ import psycopg2
import psycopg2.extras
# ─── Config ───
-DB_URL = "postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified"
+DB_URL = "postgresql://dw_admin@127.0.0.1:5432/dw_unified"
CROP_DIR = "/root/DW-Agents/image-crops/phillipe-romano"
LOG_FILE = "/tmp/pr-logo-crop.log"
SLACK_WEBHOOK = "${SLACK_WEBHOOK_URL}"
diff --git a/DW-Programming/room-setting-app/__pycache__/batch-room-gen-v2.cpython-314.pyc b/DW-Programming/room-setting-app/__pycache__/batch-room-gen-v2.cpython-314.pyc
deleted file mode 100644
index f78fb536..00000000
Binary files a/DW-Programming/room-setting-app/__pycache__/batch-room-gen-v2.cpython-314.pyc and /dev/null differ
diff --git a/DW-Programming/room-setting-app/__pycache__/batch-room-generator.cpython-314.pyc b/DW-Programming/room-setting-app/__pycache__/batch-room-generator.cpython-314.pyc
deleted file mode 100644
index 35e427d2..00000000
Binary files a/DW-Programming/room-setting-app/__pycache__/batch-room-generator.cpython-314.pyc and /dev/null differ
diff --git a/DW-Programming/room-setting-app/__pycache__/batch-room-settings.cpython-314.pyc b/DW-Programming/room-setting-app/__pycache__/batch-room-settings.cpython-314.pyc
deleted file mode 100644
index cdca20e9..00000000
Binary files a/DW-Programming/room-setting-app/__pycache__/batch-room-settings.cpython-314.pyc and /dev/null differ
diff --git a/DW-Programming/room-setting-app/__pycache__/generate-phillipe-romano-rooms.cpython-314.pyc b/DW-Programming/room-setting-app/__pycache__/generate-phillipe-romano-rooms.cpython-314.pyc
deleted file mode 100644
index 50b29289..00000000
Binary files a/DW-Programming/room-setting-app/__pycache__/generate-phillipe-romano-rooms.cpython-314.pyc and /dev/null differ
diff --git a/DW-Programming/room-setting-app/batch-room-gen-v2.py b/DW-Programming/room-setting-app/batch-room-gen-v2.py
index 33937d91..c356dec7 100644
--- a/DW-Programming/room-setting-app/batch-room-gen-v2.py
+++ b/DW-Programming/room-setting-app/batch-room-gen-v2.py
@@ -32,7 +32,7 @@ import argparse
ROOM_API = "http://127.0.0.1:3075/api/generate-room"
SHOPIFY_BASE = "https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-01"
SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
-DB_CONN = "postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified"
+DB_CONN = "postgresql://dw_admin@127.0.0.1:5432/dw_unified"
SLACK_WEBHOOK = "${SLACK_WEBHOOK_URL}"
PROGRESS_FILE = "/tmp/batch-room-progress.json"
diff --git a/DW-Programming/room-setting-app/batch-room-generator.py b/DW-Programming/room-setting-app/batch-room-generator.py
index 8315d88d..83830047 100644
--- a/DW-Programming/room-setting-app/batch-room-generator.py
+++ b/DW-Programming/room-setting-app/batch-room-generator.py
@@ -26,7 +26,7 @@ import subprocess
ROOM_API = "http://127.0.0.1:3075/api/generate-room"
SHOPIFY_BASE = "https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-01"
SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
-DB_CONN = "postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified"
+DB_CONN = "postgresql://dw_admin@127.0.0.1:5432/dw_unified"
SLACK_WEBHOOK = "${SLACK_WEBHOOK_URL}"
PROGRESS_FILE = "/tmp/batch-room-progress.json"
diff --git a/DW-Programming/room-setting-app/batch-room-settings.py b/DW-Programming/room-setting-app/batch-room-settings.py
index 18a92dd8..eeee6ec7 100644
--- a/DW-Programming/room-setting-app/batch-room-settings.py
+++ b/DW-Programming/room-setting-app/batch-room-settings.py
@@ -36,7 +36,7 @@ LOCK_FILE = "/tmp/batch-room-settings.lock"
ROOM_API = "http://127.0.0.1:3075/api/generate-room"
SHOPIFY_BASE = "https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-01"
SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
-DB_CONN = "postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified"
+DB_CONN = "postgresql://dw_admin@127.0.0.1:5432/dw_unified"
SLACK_WEBHOOK = "${SLACK_WEBHOOK_URL}"
PROGRESS_FILE = "/tmp/batch-room-settings-progress.json"
diff --git a/DW-Programming/room-setting-app/generate-phillipe-romano-rooms.py b/DW-Programming/room-setting-app/generate-phillipe-romano-rooms.py
index 077fc9a5..ea6191e4 100644
--- a/DW-Programming/room-setting-app/generate-phillipe-romano-rooms.py
+++ b/DW-Programming/room-setting-app/generate-phillipe-romano-rooms.py
@@ -25,7 +25,7 @@ import datetime
ROOM_API = "http://127.0.0.1:3075/api/generate-room"
SHOPIFY_BASE = "https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-01"
SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
-DB_CONN = "postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified"
+DB_CONN = "postgresql://dw_admin@127.0.0.1:5432/dw_unified"
SLACK_WEBHOOK = "${SLACK_WEBHOOK_URL}"
PRODUCTS_JSON = "/tmp/phillipe-romano-rooms-products.json"
PROGRESS_FILE = "/tmp/phillipe-romano-rooms-progress.json"
diff --git a/DW-Programming/room-setting-app/scripts/__pycache__/batch-room-generator.cpython-314.pyc b/DW-Programming/room-setting-app/scripts/__pycache__/batch-room-generator.cpython-314.pyc
deleted file mode 100644
index 651abc17..00000000
Binary files a/DW-Programming/room-setting-app/scripts/__pycache__/batch-room-generator.cpython-314.pyc and /dev/null differ
diff --git a/DW-Programming/room-setting-app/scripts/batch-room-generator.py b/DW-Programming/room-setting-app/scripts/batch-room-generator.py
index e44cc4f1..19b7754b 100644
--- a/DW-Programming/room-setting-app/scripts/batch-room-generator.py
+++ b/DW-Programming/room-setting-app/scripts/batch-room-generator.py
@@ -34,7 +34,7 @@ import argparse
ROOM_API = "http://127.0.0.1:3075/api/generate-room"
SHOPIFY_BASE = "https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-01"
SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
-DB_CONN = "postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified"
+DB_CONN = "postgresql://dw_admin@127.0.0.1:5432/dw_unified"
SLACK_WEBHOOK = "${SLACK_WEBHOOK_URL}"
PROGRESS_FILE = "/tmp/batch-room-generator-progress.json"
diff --git a/DW-Programming/scripts/versa-image-enrichment.sh b/DW-Programming/scripts/versa-image-enrichment.sh
index b87bf3fd..1ae1eaf0 100755
--- a/DW-Programming/scripts/versa-image-enrichment.sh
+++ b/DW-Programming/scripts/versa-image-enrichment.sh
@@ -3,7 +3,7 @@
# Fetches product pages and extracts primary image (Thumbnails/ path) from fancybox links
# Updates versa_catalog.image_url and all_images in PostgreSQL
-DB="postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified"
+DB="postgresql://dw_admin@127.0.0.1:5432/dw_unified"
UA="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
BASE="https://www.versadesignedsurfaces.com"
diff --git a/DW-Programming/scripts/william-morris-image-enrichment.sh b/DW-Programming/scripts/william-morris-image-enrichment.sh
index 4c83e7fa..ae376aa7 100755
--- a/DW-Programming/scripts/william-morris-image-enrichment.sh
+++ b/DW-Programming/scripts/william-morris-image-enrichment.sh
@@ -3,7 +3,7 @@
# Fetches product pages and extracts og:image meta tag
# Updates william_morris_catalog.image_url in PostgreSQL
-DB="postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified"
+DB="postgresql://dw_admin@127.0.0.1:5432/dw_unified"
UA="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
TOTAL=0
diff --git a/DW-Programming/vendor-crawlers/scripts/monthly-vendor-update.sh b/DW-Programming/vendor-crawlers/scripts/monthly-vendor-update.sh
index a1a863d3..c1a87f8b 100755
--- a/DW-Programming/vendor-crawlers/scripts/monthly-vendor-update.sh
+++ b/DW-Programming/vendor-crawlers/scripts/monthly-vendor-update.sh
@@ -143,7 +143,7 @@ log " ⚠️ Skipped: $SKIPPED"
# Final database counts
log ""
log "📊 Final Database Counts:"
-export PGPASSWORD='DW2024SecurePass'
+export PGPASSWORD="${PGPASSWORD:-}"
timeout 15 psql -h 127.0.0.1 -U dw_admin -d dw_unified -t -c "
SELECT 'Arte: ' || COUNT(*) FROM arte_catalog UNION ALL
SELECT 'Bespoke: ' || COUNT(*) FROM bespoke_catalog UNION ALL
diff --git a/lib/architectural-vendor-update/README.md b/lib/architectural-vendor-update/README.md
index 33985f5d..25e3de71 100644
--- a/lib/architectural-vendor-update/README.md
+++ b/lib/architectural-vendor-update/README.md
@@ -315,7 +315,7 @@ DB_HOST=127.0.0.1
DB_PORT=5432
DB_NAME=dw_unified
DB_USER=dw_admin
-DB_PASSWORD=DW2024SecurePass
+DB_PASSWORD=<set-in-environment-rotated-2026-05-30>
```
### TypeScript Config
diff --git a/scripts/__pycache__/batch-room-generator.cpython-314.pyc b/scripts/__pycache__/batch-room-generator.cpython-314.pyc
deleted file mode 100644
index f57e7f6e..00000000
Binary files a/scripts/__pycache__/batch-room-generator.cpython-314.pyc and /dev/null differ
diff --git a/scripts/__pycache__/batch-room-settings.cpython-314.pyc b/scripts/__pycache__/batch-room-settings.cpython-314.pyc
deleted file mode 100644
index 65545ded..00000000
Binary files a/scripts/__pycache__/batch-room-settings.cpython-314.pyc and /dev/null differ
diff --git a/scripts/archive-thibaut-unknown.js.DISABLED-2026-04-24 b/scripts/archive-thibaut-unknown.js.DISABLED-2026-04-24
index 97ed3526..d232854a 100644
--- a/scripts/archive-thibaut-unknown.js.DISABLED-2026-04-24
+++ b/scripts/archive-thibaut-unknown.js.DISABLED-2026-04-24
@@ -14,7 +14,7 @@ const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-01';
const pool = new Pool({
- connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+ connectionString: 'postgresql://dw_admin@127.0.0.1:5432/dw_unified'
});
const NOW = new Date().toISOString();
diff --git a/scripts/batch-room-generator.py b/scripts/batch-room-generator.py
index 54279c17..57ee80c4 100644
--- a/scripts/batch-room-generator.py
+++ b/scripts/batch-room-generator.py
@@ -22,7 +22,7 @@ from urllib.parse import urlparse
# ── Config ──────────────────────────────────────────────────────────────────
-DB_DSN = "postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified"
+DB_DSN = "postgresql://dw_admin@127.0.0.1:5432/dw_unified"
ROOM_APP_URL = "http://localhost:3075/api/generate-room"
SHOPIFY_DOMAIN = "designer-laboratory-sandbox.myshopify.com"
SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
diff --git a/scripts/batch-room-settings.py b/scripts/batch-room-settings.py
index fe4108d2..1398aa25 100644
--- a/scripts/batch-room-settings.py
+++ b/scripts/batch-room-settings.py
@@ -17,7 +17,7 @@ import psycopg2.extras
from datetime import datetime
# ── Config ──────────────────────────────────────────────────────────────────
-DB_URL = "postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified"
+DB_URL = "postgresql://dw_admin@127.0.0.1:5432/dw_unified"
ROOM_API = "http://localhost:3075/api/generate-room"
SHOPIFY_STORE = "designer-laboratory-sandbox.myshopify.com"
SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
diff --git a/scripts/justindavid-daily-cron.sh b/scripts/justindavid-daily-cron.sh
index 227b5144..42d72189 100755
--- a/scripts/justindavid-daily-cron.sh
+++ b/scripts/justindavid-daily-cron.sh
@@ -10,14 +10,14 @@ SLACK_WEBHOOK="${SLACK_WEBHOOK_URL}"
echo "=== JustinDavid Room Settings $(date) ===" >> "$LOG"
# Check how many upholstery remain
-UPHOLSTERY_REMAINING=$(psql -t -A "postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified" -c "
+UPHOLSTERY_REMAINING=$(psql -t -A "postgresql://dw_admin@127.0.0.1:5432/dw_unified" -c "
SELECT COUNT(*) FROM justindavid_catalog
WHERE category IN ('upholstery_texture','upholstery_pattern','upholstery_specialty','faux_leather','outdoor_faux_leather','outdoor_upholstery')
AND image_url IS NOT NULL AND image_url != ''
AND (room_setting_url IS NULL OR room_setting_url = '');
")
-DRAPERY_REMAINING=$(psql -t -A "postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified" -c "
+DRAPERY_REMAINING=$(psql -t -A "postgresql://dw_admin@127.0.0.1:5432/dw_unified" -c "
SELECT COUNT(*) FROM justindavid_catalog
WHERE category IN ('drapery','drapery_blackout','sheer','roller_shade','multi_use_drapery')
AND image_url IS NOT NULL AND image_url != ''
@@ -44,7 +44,7 @@ else
fi
# Send progress update to Slack
-TOTAL_DONE=$(psql -t -A "postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified" -c "
+TOTAL_DONE=$(psql -t -A "postgresql://dw_admin@127.0.0.1:5432/dw_unified" -c "
SELECT COUNT(*) FROM justindavid_catalog WHERE room_setting_url IS NOT NULL AND room_setting_url != '';
")
diff --git a/scripts/rw-drapery-daily-cron.sh b/scripts/rw-drapery-daily-cron.sh
index 87e395e2..0014b9ec 100755
--- a/scripts/rw-drapery-daily-cron.sh
+++ b/scripts/rw-drapery-daily-cron.sh
@@ -16,7 +16,7 @@ TOTAL=$(ls room-settings/rw-drapery/*.png 2>/dev/null | wc -l)
echo "Total images after run: $TOTAL" >> "$LOG"
# Update local paths to public URLs
-PGPASSWORD='DW2024SecurePass' psql -h 127.0.0.1 -U dw_admin -d dw_unified -c "
+PGPASSWORD="${PGPASSWORD:-}" psql -h 127.0.0.1 -U dw_admin -d dw_unified -c "
UPDATE rwltd_catalog
SET room_setting_url = REPLACE(room_setting_url, '/root/Projects/Designer-Wallcoverings/room-settings/', 'http://45.61.58.125/room-settings/'),
agent_updated_at = NOW()
@@ -24,7 +24,7 @@ WHERE room_setting_url LIKE '/root/Projects/Designer-Wallcoverings/room-settings
AND (spec_type ILIKE '%drapery%' OR spec_type ILIKE '%sheer%')" >> "$LOG" 2>&1
# Check remaining
-REMAINING=$(PGPASSWORD='DW2024SecurePass' psql -h 127.0.0.1 -U dw_admin -d dw_unified -t -c "
+REMAINING=$(PGPASSWORD="${PGPASSWORD:-}" psql -h 127.0.0.1 -U dw_admin -d dw_unified -t -c "
SELECT COUNT(*) FROM rwltd_catalog
WHERE spec_design LIKE '%Solid%'
AND (room_setting_url IS NULL OR room_setting_url = '')")
diff --git a/scripts/vendor-monthly/elitis-recrawl.sh b/scripts/vendor-monthly/elitis-recrawl.sh
index 9939e26d..0211c51f 100755
--- a/scripts/vendor-monthly/elitis-recrawl.sh
+++ b/scripts/vendor-monthly/elitis-recrawl.sh
@@ -17,7 +17,7 @@ if pgrep -f "scraper.js" > /dev/null; then
fi
# Get initial product count
-INITIAL_COUNT=$(psql -t postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified -c "SELECT COUNT(*) FROM elitis_catalog" 2>/dev/null | tr -d ' ')
+INITIAL_COUNT=$(psql -t postgresql://dw_admin@127.0.0.1:5432/dw_unified -c "SELECT COUNT(*) FROM elitis_catalog" 2>/dev/null | tr -d ' ')
echo "Initial PostgreSQL count: $INITIAL_COUNT" >> "$LOG_FILE"
# Run the scraper
@@ -26,7 +26,7 @@ echo "Starting Elitis scraper..." >> "$LOG_FILE"
node scraper.js >> "$LOG_FILE" 2>&1
# Get final product count
-FINAL_COUNT=$(psql -t postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified -c "SELECT COUNT(*) FROM elitis_catalog" 2>/dev/null | tr -d ' ')
+FINAL_COUNT=$(psql -t postgresql://dw_admin@127.0.0.1:5432/dw_unified -c "SELECT COUNT(*) FROM elitis_catalog" 2>/dev/null | tr -d ' ')
echo "Final PostgreSQL count: $FINAL_COUNT" >> "$LOG_FILE"
echo "Products added/updated: $((FINAL_COUNT - INITIAL_COUNT))" >> "$LOG_FILE"
diff --git a/scripts/vendor-monthly/thibaut-recrawl.sh b/scripts/vendor-monthly/thibaut-recrawl.sh
index ff8fb2a7..dae7659f 100755
--- a/scripts/vendor-monthly/thibaut-recrawl.sh
+++ b/scripts/vendor-monthly/thibaut-recrawl.sh
@@ -17,7 +17,7 @@ if pgrep -f "full-fetch.js" > /dev/null; then
fi
# Get initial product count
-INITIAL_COUNT=$(psql -t postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified -c "SELECT COUNT(*) FROM thibaut_catalog" 2>/dev/null | tr -d ' ')
+INITIAL_COUNT=$(psql -t postgresql://dw_admin@127.0.0.1:5432/dw_unified -c "SELECT COUNT(*) FROM thibaut_catalog" 2>/dev/null | tr -d ' ')
echo "Initial PostgreSQL count: $INITIAL_COUNT" >> "$LOG_FILE"
# Run the scraper
@@ -26,7 +26,7 @@ echo "Starting Thibaut scraper..." >> "$LOG_FILE"
node full-fetch.js >> "$LOG_FILE" 2>&1
# Get final product count
-FINAL_COUNT=$(psql -t postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified -c "SELECT COUNT(*) FROM thibaut_catalog" 2>/dev/null | tr -d ' ')
+FINAL_COUNT=$(psql -t postgresql://dw_admin@127.0.0.1:5432/dw_unified -c "SELECT COUNT(*) FROM thibaut_catalog" 2>/dev/null | tr -d ' ')
echo "Final PostgreSQL count: $FINAL_COUNT" >> "$LOG_FILE"
echo "Products added/updated: $((FINAL_COUNT - INITIAL_COUNT))" >> "$LOG_FILE"
diff --git a/shopify/scripts/batch-room-settings.py b/shopify/scripts/batch-room-settings.py
index 02c79641..57803ef5 100644
--- a/shopify/scripts/batch-room-settings.py
+++ b/shopify/scripts/batch-room-settings.py
@@ -19,7 +19,7 @@ import psycopg2.extras
from datetime import datetime
# --- Config ---
-DB_URL = "postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified"
+DB_URL = "postgresql://dw_admin@127.0.0.1:5432/dw_unified"
ROOM_API = "http://localhost:3075/api/generate-room"
SHOPIFY_STORE = "designer-laboratory-sandbox.myshopify.com"
SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
diff --git a/shopify/scripts/dedup-phillipe-romano.js.DISABLED-2026-04-24 b/shopify/scripts/dedup-phillipe-romano.js.DISABLED-2026-04-24
index b88f4759..4196c520 100644
--- a/shopify/scripts/dedup-phillipe-romano.js.DISABLED-2026-04-24
+++ b/shopify/scripts/dedup-phillipe-romano.js.DISABLED-2026-04-24
@@ -22,7 +22,7 @@ const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const SLACK_WEBHOOK = 'https://hooks.slack.com/services/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';
const pool = new Pool({
- connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
+ connectionString: 'postgresql://dw_admin@127.0.0.1:5432/dw_unified'
});
// Rate limiter: max 4 mutations/sec to stay well under Shopify's limits
← 11a839f5 shopify(parent): sync gitignore with nested — cover GCP serv
·
back to Designer Wallcoverings
·
fix: remove backup source leak from public dir, fix duplicat 20cf51fa →