Improve authentication by supporting external servers

Update Replit authentication to use environment variables for domains and REPL ID.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 42d8028a-fa71-4ec2-938c-e43eedf7df01
Replit-Commit-Checkpoint-Type: intermediate_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/6d543d2c-20b9-4ea6-93fe-70fe9b1d9f80/42d8028a-fa71-4ec2-938c-e43eedf7df01/AwjfjCW
This commit is contained in:
marco370 2025-10-16 16:05:48 +00:00
parent 7c9ba798ed
commit c82fafd438
3 changed files with 195 additions and 7 deletions

View File

@ -23,6 +23,10 @@ externalPort = 3001
localPort = 41343 localPort = 41343
externalPort = 3000 externalPort = 3000
[[ports]]
localPort = 42157
externalPort = 3003
[[ports]] [[ports]]
localPort = 42175 localPort = 42175
externalPort = 3002 externalPort = 3002

View File

@ -0,0 +1,185 @@
bash deploy/deploy.sh
🚀 Deployment VigilanzaTurni - Thu Oct 16 11:58:04 EDT 2025
📥 Pull ultime modifiche da GitLab...
From https://git.alfacom.it/marco/VigilanzaTurni
* branch main -> FETCH_HEAD
Already up to date.
💾 Backup database pre-deployment...
✅ Backup salvato: /var/backups/vigilanza-turni/backup_20251016_115804.sql
✅ Backup compresso: /var/backups/vigilanza-turni/backup_20251016_115804.sql.gz
🧹 Backup vecchi eliminati (retention: 30 giorni)
📥 Installazione dipendenze (include devDependencies)...
added 399 packages, and audited 400 packages in 12s
57 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
🏗️ Build frontend Vite...
> rest-express@1.0.0 build
> node node_modules/vite/bin/vite.js build && node_modules/.bin/esbuild server/index.ts --platform=node --packages=external --bundle --format=esm --outdir=dist
node:internal/modules/cjs/loader:1215
throw err;
^
Error: Cannot find module '/var/www/vigilanza-turni/node_modules/vite/bin/vite.js'
at Module._resolveFilename (node:internal/modules/cjs/loader:1212:15)
at Module._load (node:internal/modules/cjs/loader:1043:27)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:164:12)
at node:internal/main/run_main_module:28:49 {
code: 'MODULE_NOT_FOUND',
requireStack: []
}
Node.js v20.19.2
[root@localhost vigilanza-turni]# nano deploy/deploy.sh
[root@localhost vigilanza-turni]# bash deploy/deploy.sh
🚀 Deployment VigilanzaTurni - Thu Oct 16 12:01:24 EDT 2025
📥 Pull ultime modifiche da GitLab...
From https://git.alfacom.it/marco/VigilanzaTurni
* branch main -> FETCH_HEAD
Already up to date.
💾 Backup database pre-deployment...
✅ Backup salvato: /var/backups/vigilanza-turni/backup_20251016_120124.sql
✅ Backup compresso: /var/backups/vigilanza-turni/backup_20251016_120124.sql.gz
🧹 Backup vecchi eliminati (retention: 30 giorni)
📥 Installazione dipendenze (include devDependencies)...
npm warn deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm warn deprecated glob@8.1.0: Glob versions prior to v9 are no longer supported
added 521 packages, and audited 522 packages in 12s
74 packages are looking for funding
run `npm fund` for details
2 moderate severity vulnerabilities
To address all issues (including breaking changes), run:
npm audit fix --force
Run `npm audit` for details.
🏗️ Build frontend Vite...
> rest-express@1.0.0 build
> node node_modules/vite/bin/vite.js build && node_modules/.bin/esbuild server/index.ts --platform=node --packages=external --bundle --format=esm --outdir=dist
vite v6.4.0 building for production...
A PostCSS plugin did not pass the `from` option to `postcss.parse`. This may cause imported assets to be incorrectly
transformed. If you've recently added a PostCSS plugin that raised this warning, please contact the package author to fix the issue.
✓ 2683 modules transformed.
../dist/public/index.html 1.49 kB │ gzip: 0.63 kB
../dist/public/assets/index-DqscHyOA.css 75.10 kB │ gzip: 12.16 kB
../dist/public/assets/index-VRh79lEQ.js 597.11 kB │ gzip: 175.56 kB
(!) Some chunks are larger than 500 kB after minification. Consider:
- Using dynamic import() to code-split the application
- Use build.rollupOptions.output.manualChunks to improve chunking: https://rollupjs.org/configuration-options/#output-manualchunks
- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.
✓ built in 9.75s
dist/index.js 56.6kb
⚡ Done in 15ms
🗄️ Verifica database schema...
> rest-express@1.0.0 db:push
> node node_modules/drizzle-kit/bin.cjs push
node:internal/modules/cjs/loader:1215
throw err;
^
Error: Cannot find module '/var/www/vigilanza-turni/node_modules/drizzle-kit/bin.cjs'
at Module._resolveFilename (node:internal/modules/cjs/loader:1212:15)
at Module._load (node:internal/modules/cjs/loader:1043:27)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:164:12)
at node:internal/main/run_main_module:28:49 {
code: 'MODULE_NOT_FOUND',
requireStack: []
}
Node.js v20.19.2
⚠️ Schema push skipped (database già aggiornato)
🔍 Usando PM2: /usr/local/bin/pm2
🔄 Restart applicazione...
[PM2] Applying action deleteProcessId on app [vigilanza-turni](ids: [ 0 ])
[PM2] [vigilanza-turni](0) ✓
┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name │ mode │ ↺ │ status │ cpu │ memory │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘
[PM2] Starting /usr/bin/npm in fork_mode (1 instance)
[PM2] Done.
┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name │ mode │ ↺ │ status │ cpu │ memory │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 0 │ vigilanza-turni │ fork │ 0 │ online │ 0% │ 5.4mb │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘
[PM2] Saving current process list...
[PM2] Successfully saved in /root/.pm2/dump.pm2
🏥 Health check...
✅ Deployment completato con successo!
[TAILING] Tailing last 20 lines for [vigilanza-turni] process (change the value with --lines option)
/root/.pm2/logs/vigilanza-turni-error.log last 20 lines:
0|vigilanz | ^
0|vigilanz |
0|vigilanz | Error: Environment variable REPLIT_DOMAINS not provided
0|vigilanz | at file:///var/www/vigilanza-turni/dist/index.js:821:9
0|vigilanz | at ModuleJob.run (node:internal/modules/esm/module_job:263:25)
0|vigilanz | at async ModuleLoader.import (node:internal/modules/esm/loader:540:24)
0|vigilanz | at async asyncRunEntryPointWithESMLoader (node:internal/modules/run_main:117:5)
0|vigilanz |
0|vigilanz | Node.js v20.19.2
0|vigilanz | file:///var/www/vigilanza-turni/dist/index.js:821
0|vigilanz | throw new Error("Environment variable REPLIT_DOMAINS not provided");
0|vigilanz | ^
0|vigilanz |
0|vigilanz | Error: Environment variable REPLIT_DOMAINS not provided
0|vigilanz | at file:///var/www/vigilanza-turni/dist/index.js:821:9
0|vigilanz | at ModuleJob.run (node:internal/modules/esm/module_job:263:25)
0|vigilanz | at async ModuleLoader.import (node:internal/modules/esm/loader:540:24)
0|vigilanz | at async asyncRunEntryPointWithESMLoader (node:internal/modules/run_main:117:5)
0|vigilanz |
0|vigilanz | Node.js v20.19.2
/root/.pm2/logs/vigilanza-turni-out.log last 20 lines:
0|vigilanz |
0|vigilanz | > rest-express@1.0.0 start
0|vigilanz | > NODE_ENV=production node dist/index.js
0|vigilanz |
0|vigilanz |
0|vigilanz | > rest-express@1.0.0 start
0|vigilanz | > NODE_ENV=production node dist/index.js
0|vigilanz |
0|vigilanz |
0|vigilanz | > rest-express@1.0.0 start
0|vigilanz | > NODE_ENV=production node dist/index.js
0|vigilanz |
0|vigilanz |
0|vigilanz | > rest-express@1.0.0 start
0|vigilanz | > NODE_ENV=production node dist/index.js
0|vigilanz |
0|vigilanz |
0|vigilanz | > rest-express@1.0.0 start
0|vigilanz | > NODE_ENV=production node dist/index.js
0|vigilanz |
📊 Status PM2:
┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name │ mode │ ↺ │ status │ cpu │ memory │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 0 │ vigilanza-turni │ fork │ 4 │ online │ 0% │ 66.1mb │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘
📈 Ultimi backup disponibili:
-rw-r--r-- 1 root root 3.4K Oct 16 12:01 /var/backups/vigilanza-turni/backup_20251016_120124.sql.gz
-rw-r--r-- 1 root root 3.4K Oct 16 11:58 /var/backups/vigilanza-turni/backup_20251016_115804.sql.gz
-rw-r--r-- 1 root root 3.4K Oct 16 11:56 /var/backups/vigilanza-turni/backup_20251016_115644.sql.gz
-rw-r--r-- 1 root root 3.4K Oct 16 11:55 /var/backups/vigilanza-turni/backup_20251016_115524.sql.gz
-rw-r--r-- 1 root root 3.4K Oct 16 11:52 /var/backups/vigilanza-turni/backup_20251016_115244.sql.gz
🌐 Applicazione disponibile su: https://vt.alfacom.it

View File

@ -9,15 +9,15 @@ import memoize from "memoizee";
import connectPg from "connect-pg-simple"; import connectPg from "connect-pg-simple";
import { storage } from "./storage"; import { storage } from "./storage";
if (!process.env.REPLIT_DOMAINS) { // Supporto deployment Replit e server esterni
throw new Error("Environment variable REPLIT_DOMAINS not provided"); const REPLIT_DOMAINS = process.env.REPLIT_DOMAINS || process.env.DOMAIN || "vt.alfacom.it";
} const REPL_ID = process.env.REPL_ID || "vigilanza-turni";
const getOidcConfig = memoize( const getOidcConfig = memoize(
async () => { async () => {
return await client.discovery( return await client.discovery(
new URL(process.env.ISSUER_URL ?? "https://replit.com/oidc"), new URL(process.env.ISSUER_URL ?? "https://replit.com/oidc"),
process.env.REPL_ID! REPL_ID
); );
}, },
{ maxAge: 3600 * 1000 } { maxAge: 3600 * 1000 }
@ -85,8 +85,7 @@ export async function setupAuth(app: Express) {
verified(null, user); verified(null, user);
}; };
for (const domain of process.env for (const domain of REPLIT_DOMAINS.split(",")) {
.REPLIT_DOMAINS!.split(",")) {
const strategy = new Strategy( const strategy = new Strategy(
{ {
name: `replitauth:${domain}`, name: `replitauth:${domain}`,
@ -120,7 +119,7 @@ export async function setupAuth(app: Express) {
req.logout(() => { req.logout(() => {
res.redirect( res.redirect(
client.buildEndSessionUrl(config, { client.buildEndSessionUrl(config, {
client_id: process.env.REPL_ID!, client_id: REPL_ID,
post_logout_redirect_uri: `${req.protocol}://${req.hostname}`, post_logout_redirect_uri: `${req.protocol}://${req.hostname}`,
}).href }).href
); );