Skip to content

Commit 294e1bf

Browse files
authored
Merge pull request #1048 from joshunrau/dev
2 parents 0bcd2ef + 184e834 commit 294e1bf

File tree

50 files changed

+426
-445
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+426
-445
lines changed

apps/api/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
"private": true,
66
"license": "Apache-2.0",
77
"scripts": {
8+
"_dev": "NODE_ENV=development env-cmd -f ../../.env node --enable-source-maps --import @swc-node/register/esm-register --watch src/main.ts",
9+
"_dev:test": "NODE_ENV=test env-cmd -f ../../.env node --enable-source-maps --import @swc-node/register/esm-register --watch src/main.ts",
810
"build": "NODE_ENV=production tsx scripts/build.ts",
911
"db:generate": "prisma generate",
1012
"dev": "NODE_ENV=development env-cmd -f ../../.env tsx scripts/dev.ts",

apps/api/scripts/build.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ const outfile = path.resolve(outdir, 'app.js');
2424

2525
const runtimeV1Dir = path.dirname(require.resolve('@opendatacapture/runtime-v1/package.json'));
2626

27-
const options: { external: NonNullable<unknown>; plugins: NonNullable<unknown> } & BuildOptions = {
27+
const options: BuildOptions & { external: NonNullable<unknown>; plugins: NonNullable<unknown> } = {
2828
banner: {
2929
js: "Object.defineProperties(globalThis, { __dirname: { value: import.meta.dirname, writable: false }, __filename: { value: import.meta.filename, writable: false }, require: { value: (await import('module')).createRequire(import.meta.url), writable: false } });"
3030
},

apps/api/src/ability/ability.factory.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
import { AbilityBuilder, detectSubjectType } from '@casl/ability';
22
import { createPrismaAbility } from '@casl/prisma';
3-
import { Injectable, Logger } from '@nestjs/common';
3+
import { LoggingService } from '@douglasneuroinformatics/libnest/logging';
4+
import { Injectable } from '@nestjs/common';
45
import type { AppSubjectName } from '@opendatacapture/schemas/core';
56
import { type UserModel } from '@prisma/generated-client';
67

78
import type { AppAbility } from '@/core/types';
89

910
@Injectable()
1011
export class AbilityFactory {
11-
private readonly logger = new Logger(AbilityFactory.name);
12+
constructor(private readonly loggingService: LoggingService) {}
1213

1314
createForUser(user: UserModel): AppAbility {
14-
this.logger.verbose('Creating ability for user: ' + user.username);
15+
this.loggingService.verbose('Creating ability for user: ' + user.username);
1516
const ability = new AbilityBuilder<AppAbility>(createPrismaAbility);
1617
switch (user.basePermissionLevel) {
1718
case 'ADMIN':

apps/api/src/app.module.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { CryptoModule, LoggingModule } from '@douglasneuroinformatics/libnest/modules';
1+
import { CryptoModule } from '@douglasneuroinformatics/libnest/crypto';
2+
import { LoggingModule } from '@douglasneuroinformatics/libnest/logging';
23
import { Module } from '@nestjs/common';
34
import { APP_GUARD } from '@nestjs/core';
45
import { ThrottlerGuard, ThrottlerModule } from '@nestjs/throttler';

apps/api/src/auth/__tests__/auth.integration.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ValidationPipe } from '@douglasneuroinformatics/libnest/core';
2-
import { CryptoService } from '@douglasneuroinformatics/libnest/modules';
2+
import { CryptoService } from '@douglasneuroinformatics/libnest/crypto';
33
import { MockFactory } from '@douglasneuroinformatics/libnest/testing';
44
import { HttpStatus } from '@nestjs/common';
55
import { JwtService } from '@nestjs/jwt';

apps/api/src/auth/__tests__/auth.service.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { CryptoService } from '@douglasneuroinformatics/libnest/modules';
1+
import { CryptoService } from '@douglasneuroinformatics/libnest/crypto';
22
import { type MockedInstance, MockFactory } from '@douglasneuroinformatics/libnest/testing';
33
import { NotFoundException, UnauthorizedException } from '@nestjs/common';
44
import { JwtService } from '@nestjs/jwt';

apps/api/src/auth/auth.service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { CryptoService } from '@douglasneuroinformatics/libnest/modules';
1+
import { CryptoService } from '@douglasneuroinformatics/libnest/crypto';
22
import { Injectable, InternalServerErrorException, NotFoundException, UnauthorizedException } from '@nestjs/common';
33
import { JwtService } from '@nestjs/jwt';
44
import type { AuthPayload, JwtPayload } from '@opendatacapture/schemas/auth';
Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { type ExecutionContext, Injectable, Logger } from '@nestjs/common';
1+
import { LoggingService } from '@douglasneuroinformatics/libnest/logging';
2+
import { type ExecutionContext, Injectable } from '@nestjs/common';
23
import { Reflector } from '@nestjs/core';
34
import { AuthGuard } from '@nestjs/passport';
45
import { type Request } from 'express';
@@ -9,14 +10,15 @@ import { type RouteAccessType } from '@/core/decorators/route-access.decorator';
910
/** Allows request to proceed if the route is public or the user provides a valid JWT */
1011
@Injectable()
1112
export class AuthenticationGuard extends AuthGuard('jwt') {
12-
private readonly logger = new Logger(AuthenticationGuard.name);
13-
14-
constructor(private readonly reflector: Reflector) {
13+
constructor(
14+
private readonly loggingService: LoggingService,
15+
private readonly reflector: Reflector
16+
) {
1517
super();
1618
}
1719

1820
override canActivate(context: ExecutionContext): boolean | Observable<boolean> | Promise<boolean> {
19-
this.logger.verbose(`Request URL: ${context.switchToHttp().getRequest<Request>().url}`);
21+
this.loggingService.verbose(`Request URL: ${context.switchToHttp().getRequest<Request>().url}`);
2022
return this.isPublicRoute(context) || super.canActivate(context);
2123
}
2224

@@ -26,7 +28,7 @@ export class AuthenticationGuard extends AuthGuard('jwt') {
2628
context.getClass()
2729
]);
2830
const result = routeAccess === 'public';
29-
this.logger.verbose(`Public Route: ${result}`);
31+
this.loggingService.verbose(`Public Route: ${result}`);
3032
return result;
3133
}
3234
}

apps/api/src/auth/guards/authorization.guard.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { Injectable, Logger } from '@nestjs/common';
1+
import { LoggingService } from '@douglasneuroinformatics/libnest/logging';
2+
import { Injectable } from '@nestjs/common';
23
import type { CanActivate, ExecutionContext } from '@nestjs/common';
34
import { Reflector } from '@nestjs/core';
45
import type { Request } from 'express';
@@ -8,13 +9,14 @@ import type { RouteAccessType } from '@/core/decorators/route-access.decorator';
89

910
@Injectable()
1011
export class AuthorizationGuard implements CanActivate {
11-
private readonly logger = new Logger(AuthorizationGuard.name);
12-
13-
constructor(private readonly reflector: Reflector) {}
12+
constructor(
13+
private readonly loggingService: LoggingService,
14+
private readonly reflector: Reflector
15+
) {}
1416

1517
canActivate(context: ExecutionContext): boolean | Observable<boolean> | Promise<boolean> {
1618
const request = context.switchToHttp().getRequest<Request>();
17-
this.logger.verbose(`Request URL: ${request.url}`);
19+
this.loggingService.verbose(`Request URL: ${request.url}`);
1820

1921
const routeAccess = this.reflector.getAllAndOverride<RouteAccessType | undefined>('RouteAccess', [
2022
context.getHandler(),

apps/api/src/auth/strategies/jwt.strategy.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { Injectable, Logger, NotFoundException, UnauthorizedException } from '@nestjs/common';
1+
import { LoggingService } from '@douglasneuroinformatics/libnest/logging';
2+
import { Injectable, NotFoundException, UnauthorizedException } from '@nestjs/common';
23
import { PassportStrategy } from '@nestjs/passport';
34
import type { JwtPayload } from '@opendatacapture/schemas/auth';
45
import type { GroupModel, UserModel } from '@prisma/generated-client';
@@ -11,11 +12,10 @@ import { UsersService } from '@/users/users.service';
1112

1213
@Injectable()
1314
export class JwtStrategy extends PassportStrategy(Strategy, 'jwt') {
14-
private readonly logger = new Logger(JwtStrategy.name);
15-
1615
constructor(
1716
config: ConfigurationService,
1817
private readonly abilityFactory: AbilityFactory,
18+
private readonly loggingService: LoggingService,
1919
private readonly usersService: UsersService
2020
) {
2121
super({
@@ -29,7 +29,7 @@ export class JwtStrategy extends PassportStrategy(Strategy, 'jwt') {
2929
async validate({ username }: JwtPayload): Promise<Request['user']> {
3030
const user = await this.getUser(username);
3131
const ability = this.abilityFactory.createForUser(user);
32-
this.logger.verbose(`Validated Token for User: ${username}`);
32+
this.loggingService.verbose(`Validated Token for User: ${username}`);
3333
return { ...user, ability };
3434
}
3535

0 commit comments

Comments
 (0)