icynet-auth-server/src/main.ts

79 lines
2.4 KiB
TypeScript

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<NestExpressApplication>(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<string>('app.session_name'),
secret: config.get<string>('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<number>('app.port') ||
3000,
process.env.NEST_HOST || config.get<string>('app.host') || '0.0.0.0',
);
}
bootstrap();