[object Object]

← back to Designer Wallcoverings

security: strip hardcoded secret -> env-first/passwordless. No rotation/deploy.

20d1ed5b228c318c1d443f4ed66753702a208c2b · 2026-06-22 09:24:04 -0700 · Steve

Files touched

Diff

commit 20d1ed5b228c318c1d443f4ed66753702a208c2b
Author: Steve <steve@designerwallcoverings.com>
Date:   Mon Jun 22 09:24:04 2026 -0700

    security: strip hardcoded secret -> env-first/passwordless. No rotation/deploy.
---
 DW-Programming/VendorDashboard-V2/server.js  |  2 +-
 shopify/_cwGRID/assets/dw-product.css        | 11 +++++++++--
 shopify/scripts/innovations-pattern-sweep.js |  2 +-
 shopify/scripts/vendor-disco-draft.js        |  2 +-
 shopify/scripts/vendor-pdp-probe.js          |  2 +-
 5 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/DW-Programming/VendorDashboard-V2/server.js b/DW-Programming/VendorDashboard-V2/server.js
index 516b3767..7e519ca7 100644
--- a/DW-Programming/VendorDashboard-V2/server.js
+++ b/DW-Programming/VendorDashboard-V2/server.js
@@ -11,7 +11,7 @@ const PORT = 9832; // New port for V2
 // stale Dec snapshot of only 106 — kept here purely as an offline fallback.
 const pool = new Pool({
   connectionString: process.env.DATABASE_URL ||
-    'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified',
+    'postgresql://dw_admin@127.0.0.1:5432/dw_unified',
   max: 4,
   connectionTimeoutMillis: 5000,
 });
diff --git a/shopify/_cwGRID/assets/dw-product.css b/shopify/_cwGRID/assets/dw-product.css
index 3922e801..cf94991a 100644
--- a/shopify/_cwGRID/assets/dw-product.css
+++ b/shopify/_cwGRID/assets/dw-product.css
@@ -184,7 +184,14 @@ h1.product-title {
   color: #333 !important;
 }
 
-/* Quantity selector */
+/* Quantity selector — compact, left-aligned */
+.quantity-selector {
+  display: flex !important;
+  align-items: center !important;
+  gap: 0 !important;
+  width: fit-content !important;
+}
+
 .mm_quantity .input-text.qty,
 .mm_quantity .qty,
 .product-quantity-box input,
@@ -192,7 +199,7 @@ h1.product-title {
   font-size: 14px !important;
   font-weight: 600 !important;
   font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif !important;
-  width: 48px !important;
+  width: 40px !important;
   text-align: center !important;
 }
 
diff --git a/shopify/scripts/innovations-pattern-sweep.js b/shopify/scripts/innovations-pattern-sweep.js
index a9e258c8..9a40be67 100644
--- a/shopify/scripts/innovations-pattern-sweep.js
+++ b/shopify/scripts/innovations-pattern-sweep.js
@@ -39,7 +39,7 @@ const ambiguous = (name, slug) => /\d/.test(slug) || /\b(\d+(\.\d+)?)\b/.test(na
 
 (async () => {
   // catalog: mfr -> stored product_url (for authoritative slug)
-  const rows = JSON.parse(execSync(`PGPASSWORD=DW2024SecurePass psql -h 127.0.0.1 -U dw_admin -d dw_unified -tAc "SELECT COALESCE(json_agg(json_build_object('mfr',upper(trim(mfr_sku)),'url',product_url)),'[]') FROM innovations_catalog WHERE product_url IS NOT NULL AND product_url<>'';"`).toString().trim());
+  const rows = JSON.parse(execSync(`PGPASSWORD=${process.env.PGPASSWORD||''} psql -h 127.0.0.1 -U dw_admin -d dw_unified -tAc "SELECT COALESCE(json_agg(json_build_object('mfr',upper(trim(mfr_sku)),'url',product_url)),'[]') FROM innovations_catalog WHERE product_url IS NOT NULL AND product_url<>'';"`).toString().trim());
   const urlByMfr = {}; for (const r of rows) if (r.mfr) urlByMfr[r.mfr] = r.url;
   const slugFromUrl = u => { const m = (u||'').match(/\/item\/([^/]+)\//); return m ? m[1].toLowerCase() : null; };
 
diff --git a/shopify/scripts/vendor-disco-draft.js b/shopify/scripts/vendor-disco-draft.js
index 4752d50d..d567a6fa 100644
--- a/shopify/scripts/vendor-disco-draft.js
+++ b/shopify/scripts/vendor-disco-draft.js
@@ -42,7 +42,7 @@ const UPDATE = `mutation($id:ID!){productUpdate(input:{id:$id,status:DRAFT}){pro
 
 (async () => {
   // url map from catalog keyed by BOTH gid and mfr (mfr_sku + arte_sku) -> product_url
-  const rows = JSON.parse(execSync(`PGPASSWORD=DW2024SecurePass psql -h 127.0.0.1 -U dw_admin -d dw_unified -tAc "SELECT COALESCE(json_agg(json_build_object('gid',shopify_product_id,'mfr',upper(trim(mfr_sku)),'url',product_url)),'[]') FROM ${TABLE} WHERE product_url IS NOT NULL AND product_url<>'';"`).toString().trim());
+  const rows = JSON.parse(execSync(`PGPASSWORD=${process.env.PGPASSWORD||''} psql -h 127.0.0.1 -U dw_admin -d dw_unified -tAc "SELECT COALESCE(json_agg(json_build_object('gid',shopify_product_id,'mfr',upper(trim(mfr_sku)),'url',product_url)),'[]') FROM ${TABLE} WHERE product_url IS NOT NULL AND product_url<>'';"`).toString().trim());
   const urlByGid = {}, urlByMfr = {};
   for (const r of rows) { if (r.gid) urlByGid[r.gid] = r.url; if (r.mfr) urlByMfr[r.mfr] = r.url; }
 
diff --git a/shopify/scripts/vendor-pdp-probe.js b/shopify/scripts/vendor-pdp-probe.js
index ac676293..be255f68 100644
--- a/shopify/scripts/vendor-pdp-probe.js
+++ b/shopify/scripts/vendor-pdp-probe.js
@@ -5,7 +5,7 @@ const { execSync } = require('child_process');
 const sleep = ms => new Promise(r => setTimeout(r, ms));
 const TBL = process.argv[2], N = parseInt(process.argv[3] || '30');
 const sql = `SELECT product_url FROM ${TBL} WHERE on_shopify IS TRUE AND product_url IS NOT NULL AND product_url<>'' ORDER BY updated_at DESC NULLS LAST LIMIT ${N};`;
-const urls = execSync(`PGPASSWORD=DW2024SecurePass psql -h 127.0.0.1 -U dw_admin -d dw_unified -tAc "${sql}"`).toString().trim().split('\n').filter(Boolean);
+const urls = execSync(`PGPASSWORD=${process.env.PGPASSWORD||''} psql -h 127.0.0.1 -U dw_admin -d dw_unified -tAc "${sql}"`).toString().trim().split('\n').filter(Boolean);
 async function status(url){
   try { const r = await fetch(url,{method:'GET',redirect:'manual',headers:{'User-Agent':'Mozilla/5.0'},signal:AbortSignal.timeout(15000)}); return r.status; }
   catch(e){ return 'ERR:'+(e.name||'x'); }

← dd3905fd Designtex UOM fix: recheck + 5-product canary relabel Single  ·  back to Designer Wallcoverings  ·  Add 'Trending Wallcovering Collection 2026' and 'display_var c842dadf →