← back to Astek Landing
auto-save: 2026-07-02T06:11:23 (1 files) — server.js
cc88a35a12a439f06bd05a5840ef6c6ae53e097d · 2026-07-02 06:11:23 -0700 · Steve Abrams
Files touched
Diff
commit cc88a35a12a439f06bd05a5840ef6c6ae53e097d
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Thu Jul 2 06:11:23 2026 -0700
auto-save: 2026-07-02T06:11:23 (1 files) — server.js
---
server.js | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/server.js b/server.js
index 75de3e5..9381ce9 100644
--- a/server.js
+++ b/server.js
@@ -10,6 +10,21 @@ const PORT = process.env.PORT || 0; // 0 = OS-assigned free port
const DATA = path.join(__dirname, 'data', 'products.json');
const app = express();
+
+// HTTP Basic Auth — internal-only gate (username + password). Override via
+// BASIC_AUTH="user:pass"; defaults to the DW standard admin / DW2024!.
+const [AUTH_USER, AUTH_PASS] = (process.env.BASIC_AUTH || 'admin:DW2024!').split(':');
+app.use((req, res, next) => {
+ const hdr = req.headers.authorization || '';
+ const [scheme, b64] = hdr.split(' ');
+ if (scheme === 'Basic' && b64) {
+ const [u, p] = Buffer.from(b64, 'base64').toString('utf8').split(':');
+ if (u === AUTH_USER && p === AUTH_PASS) return next();
+ }
+ res.set('WWW-Authenticate', 'Basic realm="Astek — Designer Wallcoverings (internal)"');
+ return res.status(401).send('Authentication required.');
+});
+
app.use(express.json({ limit: '256kb' }));
let SNAP = { products: [], facets: { total: 0, books: [], series: [], colors: [] } };
← 392ee7a add .deploy.conf (gated deploy target)
·
back to Astek Landing
·
Add HTTP Basic Auth gate (username+password) — internal-only 5ece5ee →