import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; import * as dotenv from 'dotenv'; import * as session from 'express-session'; import * as connectRedis from 'connect-redis'; import * as redis from 'redis'; import * as cookieParser from 'cookie-parser'; import { join } from 'path'; import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger'; import { NestExpressApplication } from '@nestjs/platform-express'; import { AdminApiModule } from './modules/api/admin/admin.module'; import { OAuth2RouterModule } from './modules/static-front-end/oauth2-router/oauth2-router.module'; import { ConfigurationService } from './modules/config/config.service'; dotenv.config(); async function bootstrap() { const app = await NestFactory.create(AppModule); app.enableCors({ origin: false }); const config = app.get(ConfigurationService); const docBuilder = new DocumentBuilder() .setTitle('Icy Network Authentication Server') .setDescription('Central authentication and management server') .setVersion('1.0') .addTag('admin') .addTag('oauth2') .build(); const document = SwaggerModule.createDocument(app, docBuilder, { include: [AdminApiModule, OAuth2RouterModule], }); SwaggerModule.setup('api', app, document); const RedisStore = connectRedis(session); const redisClient = redis.createClient({ url: process.env.REDIS_URL || 'redis://localhost:6379', legacyMode: true, }); redisClient.connect(); // app.use(express.urlencoded()); app.use(cookieParser()); // Production servers have to be behind a proxy. if (process.env.NODE_ENV === 'production') { app.set('trust proxy', 1); app.disable('x-powered-by'); } app.use( /\/((?!api).)*/, session({ name: config.get('app.session_name'), secret: config.get('app.session_secret'), resave: true, saveUninitialized: false, store: new RedisStore({ client: redisClient }), cookie: { sameSite: 'strict', secure: process.env.NODE_ENV === 'production', }, }), ); app.useStaticAssets(join(__dirname, '..', 'public'), { prefix: '/public/', }); app.setBaseViewsDir(join(__dirname, '..', 'views')); app.setViewEngine('pug'); await app.listen( parseInt(process.env.NEST_PORT, 10) || config.get('app.port') || 3000, process.env.NEST_HOST || config.get('app.host') || '0.0.0.0', ); } bootstrap();