100 lines
3.6 KiB
TypeScript
100 lines
3.6 KiB
TypeScript
import 'reflect-metadata';
|
|
import * as nodeCrypto from 'crypto';
|
|
if (!(globalThis as any).crypto) {
|
|
(globalThis as any).crypto = nodeCrypto;
|
|
}
|
|
import { ensureAttachmentsTmpDir } from './time-and-attendance/attachments/config/attachment.fs';
|
|
import { NestFactory, Reflector } from '@nestjs/core';
|
|
import { AppModule } from './app.module';
|
|
// import { JwtAuthGuard } from './modules/authentication/guards/jwt-auth.guard';
|
|
import { ModulesGuard } from './common/guards/modules.guard';
|
|
// import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
|
|
// import { writeFileSync } from 'fs';
|
|
import * as session from 'express-session';
|
|
import * as passport from 'passport';
|
|
import { PrismaService } from 'src/prisma/prisma.service';
|
|
import { PrismaSessionStore } from '@quixo3/prisma-session-store';
|
|
// import { extractOldShifts } from 'scripts/migrate-shifts';
|
|
// import { extractOldTimesheets } from 'scripts/migrate-timesheets';
|
|
// import { extractOldExpenses } from 'scripts/migrate-expenses';
|
|
|
|
const SESSION_TOKEN_DURATION_MINUTES = 180
|
|
|
|
async function bootstrap() {
|
|
const app = await NestFactory.create(AppModule);
|
|
const prisma_service = app.get(PrismaService);
|
|
|
|
const reflector = app.get(Reflector);
|
|
|
|
app.useGlobalGuards(
|
|
// new JwtAuthGuard(reflector), //Authentification JWT
|
|
new ModulesGuard(reflector), //deny-by-default and Module-based Access Control
|
|
);
|
|
|
|
// Authentication and session
|
|
app.use(session({
|
|
secret: 'This is a super secret dev secret that you cant share with anyone',
|
|
resave: false,
|
|
saveUninitialized: false,
|
|
rolling: true,
|
|
cookie: {
|
|
maxAge: SESSION_TOKEN_DURATION_MINUTES * 60 * 1000, // property maxAge requires milliseconds
|
|
httpOnly: true,
|
|
},
|
|
store: new PrismaSessionStore(prisma_service, {
|
|
sessionModelName: 'sessions',
|
|
checkPeriod: SESSION_TOKEN_DURATION_MINUTES * 60 * 1000, //ms
|
|
dbRecordIdIsSessionId: true,
|
|
dbRecordIdFunction: undefined,
|
|
})
|
|
}))
|
|
app.use(passport.initialize());
|
|
app.use(passport.session());
|
|
|
|
// Enable CORS
|
|
app.enableCors({
|
|
origin: ['http://10.100.251.2:9011', 'http://10.100.251.2:9012', 'http://10.100.251.2:9013', 'http://localhost:9000'],
|
|
credentials: true,
|
|
});
|
|
|
|
// //swagger config
|
|
// const config = new DocumentBuilder()
|
|
// .setTitle('Targo_Backend')
|
|
// .setDescription('Documentation de l`API REST pour Targo (NestJS + Prisma)')
|
|
// .setVersion('1.0')
|
|
// .addBearerAuth({
|
|
// type: 'http',
|
|
// scheme: 'bearer',
|
|
// bearerFormat: 'JWT',
|
|
// name: 'Authorization',
|
|
// description: 'Invalid JWT token',
|
|
// in: 'header',
|
|
// }, 'access-token')
|
|
// .addTag('Users')
|
|
// .addTag('Employees')
|
|
// .addTag('Customers')
|
|
// .addTag('Timesheets')
|
|
// .addTag('Shifts')
|
|
// .addTag('Leave Requests')
|
|
// .addTag('Shift Codes')
|
|
// .addTag('OAuth Access Tokens')
|
|
// .addTag('Authorization')
|
|
// .build();
|
|
|
|
// //document builder for swagger docs
|
|
// const documentFactory = () => SwaggerModule.createDocument(app, config);
|
|
// const document = documentFactory()
|
|
// SwaggerModule.setup('api/docs', app, document);
|
|
// writeFileSync('./docs/swagger/swagger-spec.json', JSON.stringify(document, null, 2));
|
|
|
|
await ensureAttachmentsTmpDir();
|
|
await app.listen(process.env.PORT ?? 3000);
|
|
|
|
|
|
// migration function calls
|
|
// await extractOldTimesheets();
|
|
// await extractOldShifts();
|
|
// await extractOldExpenses();
|
|
}
|
|
bootstrap();
|