diff --git a/Dockerfile b/Dockerfile index 21299ad..080b450 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,9 +17,7 @@ ENV AUTHENTIK_AUTH_URL="https://auth.targo.ca/application/o/authorize/" ENV AUTHENTIK_TOKEN_URL="https://auth.targo.ca/application/o/token/" ENV AUTHENTIK_USERINFO_URL="https://auth.targo.ca/application/o/userinfo/" -ENV TARGO_FRONTEND_URI_1="http://targo-frontend-nicolas:9000" -ENV TARGO_FRONTEND_URI_2="http://targo-frontend-matthieu:9000" -ENV TARGO_FRONTEND_URI_3="http://targo-frontend-lion:9000" +ENV TARGO_FRONTEND_URI="http://10.100.251.2/" ENV ATTACHMENTS_SERVER_ID="server" ENV ATTACHMENTS_ROOT=C:/ diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 60503eb..279804e 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -315,7 +315,7 @@ model AttachmentVariants { attachment_id Int attachment Attachments @relation("attachmentVariantAttachment",fields: [attachment_id], references: [id], onDelete: Cascade) variant String - patch String + path String bytes Int width Int? height Int? diff --git a/src/identity-and-account/authentication/controllers/auth.controller.ts b/src/identity-and-account/authentication/controllers/auth.controller.ts index 15255f1..0ec1ff2 100644 --- a/src/identity-and-account/authentication/controllers/auth.controller.ts +++ b/src/identity-and-account/authentication/controllers/auth.controller.ts @@ -12,7 +12,7 @@ export class AuthController { @Get('/callback') @UseGuards(OIDCLoginGuard) loginCallback(@Req() req: Request, @Res() res: Response) { - res.redirect('http://localhost:9000/#/login-success'); + res.redirect('http://10.100.251.2:9011/#/login-success'); } @Get('/me') diff --git a/src/main.ts b/src/main.ts index 89eb564..fb35236 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,10 +1,10 @@ import 'reflect-metadata'; //import and if case for @nestjs/schedule Cron jobs import * as nodeCrypto from 'crypto'; -if(!(globalThis as any).crypto) { - (globalThis as any).crypto = nodeCrypto; +if (!(globalThis as any).crypto) { + (globalThis as any).crypto = nodeCrypto; } -import { ensureAttachmentsTmpDir } from './config/attachment.fs'; +import { ensureAttachmentsTmpDir } from './config/attachment.fs'; import { resolveAttachmentsRoot } from './config/attachment.config';// log to be removed post dev import { ATT_TMP_DIR } from './config/attachment.config'; // log to be removed post dev @@ -20,72 +20,72 @@ import * as session from 'express-session'; import * as passport from 'passport'; async function bootstrap() { - const app = await NestFactory.create(AppModule); + const app = await NestFactory.create(AppModule); - const reflector = app.get(Reflector); //setup Reflector for Roles() + const reflector = app.get(Reflector); //setup Reflector for Roles() - app.useGlobalGuards( - // new JwtAuthGuard(reflector), //Authentification JWT - new RolesGuard(reflector), //deny-by-default and Role-based Access Control - new OwnershipGuard(reflector, app.get(ModuleRef)), //Global use of OwnershipGuard, not implemented yet - ); + app.useGlobalGuards( + // new JwtAuthGuard(reflector), //Authentification JWT + new RolesGuard(reflector), //deny-by-default and Role-based Access Control + new OwnershipGuard(reflector, app.get(ModuleRef)), //Global use of OwnershipGuard, not implemented yet + ); - // 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: 30 * 60 * 1000, - httpOnly: true, - } - })) - app.use(passport.initialize()); - app.use(passport.session()); + // 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: 30 * 60 * 1000, + httpOnly: true, + } + })) + app.use(passport.initialize()); + app.use(passport.session()); - // Enable CORS - app.enableCors({ - origin: [process.env.TARGO_FRONTEND_URI_1, process.env.TARGO_FRONTEND_URI_2, process.env.TARGO_FRONTEND_URI_3], - credentials: true, - }); + // Enable CORS + app.enableCors({ + origin: ['http://10.100.251.2:9011', 'http://10.100.251.2:9012', 'http://10.100.251.2:9013'], + 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(); - //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)); - + // logs to be removed post dev console.log('[ENV.ATTACHMENTS_ROOT]', process.env.ATTACHMENTS_ROOT); console.log('[resolveAttachmentsRoot()]', resolveAttachmentsRoot()); console.log('[ATT_TMP_DIR()]', ATT_TMP_DIR()); - await ensureAttachmentsTmpDir(); - await app.listen(process.env.PORT ?? 3000); + await ensureAttachmentsTmpDir(); + await app.listen(process.env.PORT ?? 3000); } bootstrap(); diff --git a/src/modules/archival/services/archival.service.ts b/src/modules/archival/services/archival.service.ts index bed4191..ebec1e5 100644 --- a/src/modules/archival/services/archival.service.ts +++ b/src/modules/archival/services/archival.service.ts @@ -1,8 +1,8 @@ -// import { Injectable, Logger } from "@nestjs/common"; -// import { Cron } from "@nestjs/schedule"; +// import { TimesheetArchiveService } from "src/time-and-attendance/modules/time-tracker/timesheets/services/timesheet-archive.service"; // import { ExpensesArchivalService } from "src/time-and-attendance/modules/expenses/services/expenses-archival.service"; // import { ShiftsArchivalService } from "src/time-and-attendance/modules/time-tracker/shifts/services/shifts-archival.service"; -// import { TimesheetArchiveService } from "src/time-and-attendance/modules/time-tracker/timesheets/services/timesheet-archive.service"; +// import { Injectable, Logger } from "@nestjs/common"; +// import { Cron } from "@nestjs/schedule"; // @Injectable() // export class ArchivalService { diff --git a/src/modules/attachments/attachments.module.ts b/src/modules/attachments/attachments.module.ts index ee8883f..9db15ea 100644 --- a/src/modules/attachments/attachments.module.ts +++ b/src/modules/attachments/attachments.module.ts @@ -1,15 +1,19 @@ -import { ScheduleModule } from "@nestjs/schedule"; -import { PrismaService } from "src/prisma/prisma.service"; -import { ArchivalAttachmentService } from "./services/archival-attachment.service"; +import { ArchivalAttachmentService } from "src/modules/attachments/services/archival-attachment.service"; +import { GarbargeCollectorService } from "src/modules/attachments/services/garbage-collector.service"; +import { AttachmentsController } from "src/modules/attachments/controllers/attachments.controller"; +import { DiskStorageService } from "src/modules/attachments/services/disk-storage.service"; +// import { ScheduleModule } from "@nestjs/schedule"; +import { VariantsQueue } from "src/modules/attachments/services/variants.queue"; import { Module } from "@nestjs/common"; -import { GarbargeCollectorService } from "./services/garbage-collector.service"; @Module({ - imports: [ScheduleModule.forRoot()], + // imports: [ScheduleModule.forRoot()], + controllers: [ AttachmentsController], providers: [ - PrismaService, ArchivalAttachmentService, GarbargeCollectorService, + DiskStorageService, + VariantsQueue, ], exports: [ ArchivalAttachmentService, diff --git a/src/modules/attachments/services/disk-storage.service.ts b/src/modules/attachments/services/disk-storage.service.ts index 0c485c6..53639ba 100644 --- a/src/modules/attachments/services/disk-storage.service.ts +++ b/src/modules/attachments/services/disk-storage.service.ts @@ -1,3 +1,4 @@ +import { Injectable } from '@nestjs/common'; import { createHash } from 'node:crypto'; import { promises as fsp } from 'node:fs'; import { createWriteStream, statSync, existsSync } from 'node:fs'; @@ -7,6 +8,7 @@ import { ATT_TMP_DIR, resolveAttachmentsRoot } from 'src/config/attachment.confi export type SaveResult = { sha256:string, storage_path:string, size:number}; +@Injectable() export class DiskStorageService { private root = resolveAttachmentsRoot(); @@ -38,7 +40,7 @@ export class DiskStorageService { const hash = createHash('sha256'); const tmpOut = createWriteStream(tmpPath); - input.on('date', (chunk) => hash.update(chunk)); + input.on('data', (chunk) => hash.update(chunk)); await pipeline(input, tmpOut); //await end of writing stream const sha = hash.digest('hex'); diff --git a/src/modules/attachments/services/variants.queue.ts b/src/modules/attachments/services/variants.queue.ts index 07c48c0..2c261f0 100644 --- a/src/modules/attachments/services/variants.queue.ts +++ b/src/modules/attachments/services/variants.queue.ts @@ -1,5 +1,7 @@ +import { Injectable } from "@nestjs/common"; import { Queue } from "bullmq"; +@Injectable() export class VariantsQueue { private queue : Queue;