54 lines
1.6 KiB
TypeScript
54 lines
1.6 KiB
TypeScript
import express from 'express';
|
|
import cookieParser from 'cookie-parser';
|
|
import path from 'path';
|
|
import { cfg } from './env';
|
|
import { Issuer } from 'openid-client';
|
|
import { setupAuthRoutes } from './auth';
|
|
|
|
async function bootstrap() {
|
|
const app = express();
|
|
app.use(cookieParser(cfg.cookieSecret));
|
|
app.use(express.json());
|
|
|
|
// OIDC discovery e client
|
|
const issuer = await Issuer.discover(cfg.issuerDiscoveryUrl);
|
|
const client = new issuer.Client({
|
|
client_id: cfg.clientId,
|
|
client_secret: cfg.clientSecret,
|
|
redirect_uris: [cfg.redirectUri],
|
|
response_types: ['code'],
|
|
tokenendpointauthmethod: 'clientsecret_basic'
|
|
});
|
|
|
|
const cookieOptionsBase = {
|
|
httpOnly: true,
|
|
signed: true,
|
|
sameSite: 'lax' as const,
|
|
secure: cfg.isProd
|
|
};
|
|
|
|
setupAuthRoutes(app, client, cfg.redirectUri, cfg.scope, cookieOptionsBase);
|
|
|
|
// Vite middleware in dev, static in prod
|
|
if (!cfg.isProd) {
|
|
const vite = await (await import('vite')).createServer({
|
|
root: path.join(process.cwd(), 'client'),
|
|
server: { middlewareMode: true, hmr: false, host: '0.0.0.0' },
|
|
plugins: [(await import('@vitejs/plugin-react')).default()]
|
|
});
|
|
app.use(vite.middlewares);
|
|
} else {
|
|
const dist = path.join(process.cwd(), 'client', 'dist');
|
|
app.use(express.static(dist));
|
|
app.get('*', (_req, res) => res.sendFile(path.join(dist, 'index.html')));
|
|
}
|
|
|
|
app.listen(cfg.port, '192.168.1.3', () =>
|
|
console.log(`Server running on http://192.168.1.3:${cfg.port}`)
|
|
);
|
|
}
|
|
|
|
bootstrap().catch((err) => {
|
|
console.error('Bootstrap failed:', err);
|
|
process.exit(1);
|
|
});
|