Skip to content

Commit 4c8b7cb

Browse files
authored
Merge pull request #1816 from rocket-admin/backend_typescript_improvements
typescript strict null checks
2 parents bc377bb + c0cd2bc commit 4c8b7cb

259 files changed

Lines changed: 1437 additions & 806 deletions

File tree

Some content is hidden

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

backend/src/authorization/auth-with-api.middleware.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
} from '@nestjs/common';
1010
import { InjectRepository } from '@nestjs/typeorm';
1111
import Sentry from '@sentry/minimal';
12-
import { NextFunction, Request, Response } from 'express';
12+
import { NextFunction, Response } from 'express';
1313
import jwt from 'jsonwebtoken';
1414
import { Repository } from 'typeorm';
1515
import { JwtScopesEnum } from '../entities/user/enums/jwt-scopes.enum.js';
@@ -48,7 +48,7 @@ export class AuthWithApiMiddleware implements NestMiddleware {
4848
}
4949
}
5050

51-
private getTokenFromCookie(req: Request): string | undefined {
51+
private getTokenFromCookie(req: IRequestWithCognitoInfo): string | undefined {
5252
return req.cookies?.[Constants.JWT_COOKIE_KEY_NAME];
5353
}
5454

@@ -62,6 +62,9 @@ export class AuthWithApiMiddleware implements NestMiddleware {
6262
private async authenticateWithToken(tokenFromCookie: string, req: IRequestWithCognitoInfo): Promise<void> {
6363
try {
6464
const jwtSecret = appConfig.auth.jwtSecret;
65+
if (!jwtSecret) {
66+
throw new UnauthorizedException('JWT verification failed');
67+
}
6568
const data = jwt.verify(tokenFromCookie, jwtSecret) as jwt.JwtPayload;
6669
const userId = data.id;
6770

backend/src/authorization/auth.middleware.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export class AuthMiddleware implements NestMiddleware {
3030
private readonly logOutRepository: Repository<LogOutEntity>,
3131
) {}
3232
async use(req: IRequestWithCognitoInfo, _res: Response, next: NextFunction): Promise<void> {
33-
let token: string;
33+
let token: string | undefined;
3434
try {
3535
token = req.cookies[Constants.JWT_COOKIE_KEY_NAME];
3636
} catch (_e) {
@@ -50,6 +50,9 @@ export class AuthMiddleware implements NestMiddleware {
5050

5151
try {
5252
const jwtSecret = appConfig.auth.jwtSecret;
53+
if (!jwtSecret) {
54+
throw new UnauthorizedException('JWT verification failed');
55+
}
5356
const data = jwt.verify(token, jwtSecret) as jwt.JwtPayload;
5457
const userId = data.id;
5558

backend/src/authorization/non-scoped-auth.middleware.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export class NonScopedAuthMiddleware implements NestMiddleware {
2626
) {}
2727
async use(req: IRequestWithCognitoInfo, _res: Response, next: NextFunction): Promise<void> {
2828
console.log(`auth middleware triggered ->: ${new Date().toISOString()}`);
29-
let token: string;
29+
let token: string | undefined;
3030
try {
3131
token = req.cookies[Constants.JWT_COOKIE_KEY_NAME];
3232
} catch (_e) {
@@ -46,6 +46,9 @@ export class NonScopedAuthMiddleware implements NestMiddleware {
4646

4747
try {
4848
const jwtSecret = appConfig.auth.jwtSecret;
49+
if (!jwtSecret) {
50+
throw new UnauthorizedException('JWT verification failed');
51+
}
4952
const data = jwt.verify(token, jwtSecret) as jwt.JwtPayload;
5053
const userId = data.id;
5154
if (!userId) {

backend/src/authorization/saas-auth.middleware.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ export class SaaSAuthMiddleware implements NestMiddleware {
1616
}
1717
try {
1818
const jwtSecret = appConfig.auth.microserviceJwtSecret;
19+
if (!jwtSecret) {
20+
throw new UnauthorizedException(Messages.AUTHORIZATION_REJECTED);
21+
}
1922
const data = jwt.verify(token, jwtSecret) as jwt.JwtPayload;
2023
const requestId = data.request_id;
2124

backend/src/authorization/temporary-auth.middleware.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export class TemporaryAuthMiddleware implements NestMiddleware {
2828
) {}
2929
async use(req: IRequestWithCognitoInfo, _res: Response, next: NextFunction): Promise<void> {
3030
console.log(`temporary auth middleware triggered ->: ${new Date().toISOString()}`);
31-
let token: string;
31+
let token: string | undefined;
3232
try {
3333
token = req.cookies[Constants.JWT_COOKIE_KEY_NAME];
3434
} catch (_e) {
@@ -48,6 +48,9 @@ export class TemporaryAuthMiddleware implements NestMiddleware {
4848

4949
try {
5050
const jwtSecret = appConfig.auth.temporaryJwtSecret;
51+
if (!jwtSecret) {
52+
throw new UnauthorizedException('JWT verification failed');
53+
}
5154
const data = jwt.verify(token, jwtSecret) as jwt.JwtPayload;
5255
const userId = data.id;
5356
if (!userId) {
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Request } from 'express';
2-
export const extractTokenFromHeader = (request: Request): string | null => {
2+
export const extractTokenFromHeader = (request: Pick<Request, 'headers'>): string | null => {
33
const [type, token] = request.headers.authorization?.split(' ') ?? [];
44
return type === 'Bearer' ? token : null;
55
};

backend/src/common/abstract-use.case.ts

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,20 +30,27 @@ abstract class AbstractUseCase<TInputData = void, TOutputData = void> {
3030

3131
protected abstract implementation(inputData: TInputData): Promise<TOutputData> | TOutputData;
3232

33+
private getDbContext(): IDatabaseContext {
34+
if (!this._dbContext) {
35+
throw new Error('Database context is not initialized for this use case.');
36+
}
37+
return this._dbContext;
38+
}
39+
3340
private async startTransaction(): Promise<void> {
34-
await this._dbContext.startTransaction();
41+
await this.getDbContext().startTransaction();
3542
}
3643

3744
private async commitTransaction(): Promise<void> {
38-
await this._dbContext.commitTransaction();
45+
await this.getDbContext().commitTransaction();
3946
}
4047

4148
private async rollbackTransaction(): Promise<void> {
42-
await this._dbContext.rollbackTransaction();
49+
await this.getDbContext().rollbackTransaction();
4350
}
4451

4552
private async releaseQueryRunner(): Promise<void> {
46-
await this._dbContext.releaseQueryRunner();
53+
await this.getDbContext().releaseQueryRunner();
4754
}
4855
}
4956

backend/src/common/application/global-database-context.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -452,10 +452,9 @@ export class GlobalDatabaseContext implements IGlobalDatabaseContext {
452452
return this._schemaChangeChatMessageRepository;
453453
}
454454

455-
public startTransaction(): Promise<void> {
455+
public async startTransaction(): Promise<void> {
456456
this._queryRunner = this.appDataSource.createQueryRunner();
457-
this._queryRunner.startTransaction();
458-
return;
457+
await this._queryRunner.startTransaction();
459458
}
460459

461460
public async commitTransaction(): Promise<void> {

backend/src/decorators/gclid-decorator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { createParamDecorator, ExecutionContext } from '@nestjs/common';
22
import { IRequestWithCognitoInfo } from '../authorization/cognito-decoded.interface.js';
33

4-
export const GCLlId = createParamDecorator((_data: unknown, ctx: ExecutionContext): string => {
4+
export const GCLlId = createParamDecorator((_data: unknown, ctx: ExecutionContext): string | null => {
55
const request: IRequestWithCognitoInfo = ctx.switchToHttp().getRequest();
66
if (request.headers) {
77
return (request.headers.gclid as string | undefined) ?? null;

backend/src/decorators/master-password.decorator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { createParamDecorator, ExecutionContext } from '@nestjs/common';
22
import { IRequestWithCognitoInfo } from '../authorization/cognito-decoded.interface.js';
33

4-
export const MasterPassword = createParamDecorator((_data: unknown, ctx: ExecutionContext): string => {
4+
export const MasterPassword = createParamDecorator((_data: unknown, ctx: ExecutionContext): string | null => {
55
const request: IRequestWithCognitoInfo = ctx.switchToHttp().getRequest();
66
const masterPwd = request.headers.masterpwd as string | undefined;
77
return masterPwd ? masterPwd : null;

0 commit comments

Comments
 (0)