Skip to content

Commit fcd29bd

Browse files
authored
Merge pull request #1801 from rocket-admin/backend_config
refactor: migrate environment variable access to appConfig…
2 parents f80c6a0 + 8cc7383 commit fcd29bd

45 files changed

Lines changed: 560 additions & 295 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/app.module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,14 @@ import { SaaSGatewayModule } from './microservices/gateways/saas-gateway.ts/saas
4646
import { SaasModule } from './microservices/saas-microservice/saas.module.js';
4747
import { AppLoggerMiddleware } from './middlewares/logging-middleware/app-logger-middlewate.js';
4848
import { SelfHostedOperationsModule } from './selfhosted-operations/selhosted-operations.module.js';
49+
import { ConfigModule } from './shared/config/config.module.js';
4950
import { DatabaseModule } from './shared/database/database.module.js';
5051
import { SharedModule } from './shared/shared.module.js';
5152
import { GetHelloUseCase } from './use-cases-app/get-hello.use.case.js';
5253

5354
@Module({
5455
imports: [
56+
ConfigModule,
5557
ScheduleModule.forRoot(),
5658
ThrottlerModule.forRoot({
5759
throttlers: [

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { Messages } from '../exceptions/text/messages.js';
1919
import { Constants } from '../helpers/constants/constants.js';
2020
import { Encryptor } from '../helpers/encryption/encryptor.js';
2121
import { isObjectEmpty } from '../helpers/is-object-empty.js';
22+
import { appConfig } from '../shared/config/app-config.js';
2223
import { IRequestWithCognitoInfo } from './cognito-decoded.interface.js';
2324

2425
@Injectable()
@@ -60,7 +61,7 @@ export class AuthWithApiMiddleware implements NestMiddleware {
6061

6162
private async authenticateWithToken(tokenFromCookie: string, req: IRequestWithCognitoInfo): Promise<void> {
6263
try {
63-
const jwtSecret = process.env.JWT_SECRET;
64+
const jwtSecret = appConfig.auth.jwtSecret;
6465
const data = jwt.verify(tokenFromCookie, jwtSecret) as jwt.JwtPayload;
6566
const userId = data.id;
6667

backend/src/authorization/auth.middleware.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@ import { LogOutEntity } from '../entities/log-out/log-out.entity.js';
1515
import { JwtScopesEnum } from '../entities/user/enums/jwt-scopes.enum.js';
1616
import { UserEntity } from '../entities/user/user.entity.js';
1717
import { Messages } from '../exceptions/text/messages.js';
18+
import { isTest } from '../helpers/app/is-test.js';
1819
import { Constants } from '../helpers/constants/constants.js';
1920
import { isObjectEmpty } from '../helpers/is-object-empty.js';
21+
import { appConfig } from '../shared/config/app-config.js';
2022
import { IRequestWithCognitoInfo } from './cognito-decoded.interface.js';
2123

2224
@Injectable()
@@ -32,7 +34,7 @@ export class AuthMiddleware implements NestMiddleware {
3234
try {
3335
token = req.cookies[Constants.JWT_COOKIE_KEY_NAME];
3436
} catch (_e) {
35-
if (process.env.NODE_ENV !== 'test') {
37+
if (!isTest()) {
3638
throw new UnauthorizedException('JWT verification failed');
3739
}
3840
}
@@ -47,7 +49,7 @@ export class AuthMiddleware implements NestMiddleware {
4749
}
4850

4951
try {
50-
const jwtSecret = process.env.JWT_SECRET;
52+
const jwtSecret = appConfig.auth.jwtSecret;
5153
const data = jwt.verify(token, jwtSecret) as jwt.JwtPayload;
5254
const userId = data.id;
5355

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@ import { Injectable, NestMiddleware, UnauthorizedException } from '@nestjs/commo
22
import auth from 'basic-auth';
33
import { Request, Response } from 'express';
44
import { Messages } from '../exceptions/text/messages.js';
5+
import { appConfig } from '../shared/config/app-config.js';
56

67
@Injectable()
78
export class BasicAuthMiddleware implements NestMiddleware {
89
use(req: Request, _res: Response, next: (err?: any, res?: any) => void): void {
9-
const basicAuthLogin = process.env.BASIC_AUTH_LOGIN;
10-
const basicAuthPassword = process.env.BASIC_AUTH_PWD;
10+
const basicAuthLogin = appConfig.auth.basicAuthLogin;
11+
const basicAuthPassword = appConfig.auth.basicAuthPassword;
1112
const userCredentials = auth(req);
1213
if (!userCredentials) {
1314
throw new UnauthorizedException(Messages.AUTHORIZATION_REQUIRED);

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@ import jwt from 'jsonwebtoken';
1212
import { Repository } from 'typeorm';
1313
import { LogOutEntity } from '../entities/log-out/log-out.entity.js';
1414
import { Messages } from '../exceptions/text/messages.js';
15+
import { isTest } from '../helpers/app/is-test.js';
1516
import { Constants } from '../helpers/constants/constants.js';
1617
import { isObjectEmpty } from '../helpers/is-object-empty.js';
18+
import { appConfig } from '../shared/config/app-config.js';
1719
import { IRequestWithCognitoInfo } from './cognito-decoded.interface.js';
1820

1921
@Injectable()
@@ -28,7 +30,7 @@ export class NonScopedAuthMiddleware implements NestMiddleware {
2830
try {
2931
token = req.cookies[Constants.JWT_COOKIE_KEY_NAME];
3032
} catch (_e) {
31-
if (process.env.NODE_ENV !== 'test') {
33+
if (!isTest()) {
3234
throw new UnauthorizedException('JWT verification failed');
3335
}
3436
}
@@ -43,7 +45,7 @@ export class NonScopedAuthMiddleware implements NestMiddleware {
4345
}
4446

4547
try {
46-
const jwtSecret = process.env.JWT_SECRET;
48+
const jwtSecret = appConfig.auth.jwtSecret;
4749
const data = jwt.verify(token, jwtSecret) as jwt.JwtPayload;
4850
const userId = data.id;
4951
if (!userId) {

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Injectable, NestMiddleware, UnauthorizedException } from '@nestjs/commo
22
import { Response } from 'express';
33
import jwt from 'jsonwebtoken';
44
import { Messages } from '../exceptions/text/messages.js';
5+
import { appConfig } from '../shared/config/app-config.js';
56
import { IRequestWithCognitoInfo } from './cognito-decoded.interface.js';
67
import { extractTokenFromHeader } from './utils/extract-token-from-header.js';
78

@@ -14,7 +15,7 @@ export class SaaSAuthMiddleware implements NestMiddleware {
1415
throw new UnauthorizedException('Token is missing');
1516
}
1617
try {
17-
const jwtSecret = process.env.MICROSERVICE_JWT_SECRET;
18+
const jwtSecret = appConfig.auth.microserviceJwtSecret;
1819
const data = jwt.verify(token, jwtSecret) as jwt.JwtPayload;
1920
const requestId = data.request_id;
2021

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,10 @@ import { Repository } from 'typeorm';
1313
import { LogOutEntity } from '../entities/log-out/log-out.entity.js';
1414
import { UserEntity } from '../entities/user/user.entity.js';
1515
import { Messages } from '../exceptions/text/messages.js';
16+
import { isTest } from '../helpers/app/is-test.js';
1617
import { Constants } from '../helpers/constants/constants.js';
1718
import { isObjectEmpty } from '../helpers/is-object-empty.js';
19+
import { appConfig } from '../shared/config/app-config.js';
1820
import { IRequestWithCognitoInfo } from './cognito-decoded.interface.js';
1921

2022
@Injectable()
@@ -30,7 +32,7 @@ export class TemporaryAuthMiddleware implements NestMiddleware {
3032
try {
3133
token = req.cookies[Constants.JWT_COOKIE_KEY_NAME];
3234
} catch (_e) {
33-
if (process.env.NODE_ENV !== 'test') {
35+
if (!isTest()) {
3436
throw new UnauthorizedException('JWT verification failed');
3537
}
3638
}
@@ -45,7 +47,7 @@ export class TemporaryAuthMiddleware implements NestMiddleware {
4547
}
4648

4749
try {
48-
const jwtSecret = process.env.TEMPORARY_JWT_SECRET;
50+
const jwtSecret = appConfig.auth.temporaryJwtSecret;
4951
const data = jwt.verify(token, jwtSecret) as jwt.JwtPayload;
5052
const userId = data.id;
5153
if (!userId) {

backend/src/entities/agent/repository/custom-agent-repository-extension.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { ConnectionTypeTestEnum } from '@rocketadmin/shared-code/dist/src/shared/enums/connection-types-enum.js';
22
import { nanoid } from 'nanoid';
3+
import { isTest } from '../../../helpers/app/is-test.js';
34
import { ConnectionEntity } from '../../connection/connection.entity.js';
45
import { AgentEntity } from '../agent.entity.js';
56
import { IAgentRepository } from './agent.repository.interface.js';
@@ -12,7 +13,7 @@ export const customAgentRepositoryExtension: IAgentRepository = {
1213

1314
async createNewAgentForConnection(connection: ConnectionEntity): Promise<AgentEntity> {
1415
const agent = new AgentEntity();
15-
const token = process.env.NODE_ENV !== 'test' ? nanoid(64) : this.getTestAgentToken(connection.type);
16+
const token = !isTest() ? nanoid(64) : this.getTestAgentToken(connection.type);
1617
agent.setToken(token);
1718
agent.connection = connection;
1819
const savedAgent = await this.save(agent);
@@ -41,7 +42,7 @@ export const customAgentRepositoryExtension: IAgentRepository = {
4142
},
4243

4344
getTestAgentToken(connectionType: ConnectionTypeTestEnum): string {
44-
if (process.env.NODE_ENV !== 'test') throw new Error('Test agent token can only be used in test environment');
45+
if (!isTest()) throw new Error('Test agent token can only be used in test environment');
4546
switch (connectionType) {
4647
case ConnectionTypeTestEnum.agent_oracledb:
4748
return 'ORACLE-TEST-AGENT-TOKEN';

backend/src/entities/ai/user-ai-requests-v2.controller.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import { UserId } from '../../decorators/user-id.decorator.js';
2121
import { InTransactionEnum } from '../../enums/in-transaction.enum.js';
2222
import { ConnectionEditGuard } from '../../guards/connection-edit.guard.js';
2323
import { TableAiRequestGuard } from '../../guards/table-ai-request.guard.js';
24+
import { isTest } from '../../helpers/app/is-test.js';
2425
import { ValidationHelper } from '../../helpers/validators/validation-helper.js';
2526
import { SentryInterceptor } from '../../interceptors/sentry.interceptor.js';
2627
import { IAISettingsAndWidgetsCreation, IRequestInfoFromTableV2 } from './ai-use-cases.interface.js';
@@ -51,7 +52,7 @@ export class UserAIRequestsControllerV2 {
5152
@ApiBody({ type: RequestInfoFromTableBodyDTO })
5253
@ApiQuery({ name: 'tableName', required: true, type: String })
5354
@ApiQuery({ name: 'threadId', required: false, type: String })
54-
@Timeout(process.env.NODE_ENV !== 'test' ? TimeoutDefaults.AI : TimeoutDefaults.AI_TEST)
55+
@Timeout(!isTest() ? TimeoutDefaults.AI : TimeoutDefaults.AI_TEST)
5556
@Post('/ai/v4/request/:connectionId')
5657
public async requestInfoFromTableWithAIWithHistory(
5758
@SlugUuid('connectionId') connectionId: string,
@@ -90,7 +91,7 @@ export class UserAIRequestsControllerV2 {
9091
description: 'AI settings and widgets creation job has been queued.',
9192
})
9293
@UseGuards(ConnectionEditGuard)
93-
@Timeout(process.env.NODE_ENV !== 'test' ? TimeoutDefaults.AI : TimeoutDefaults.AI_TEST)
94+
@Timeout(!isTest() ? TimeoutDefaults.AI : TimeoutDefaults.AI_TEST)
9495
@Get('/ai/v2/setup/:connectionId')
9596
public async requestAISettingsAndWidgetsCreation(
9697
@SlugUuid('connectionId') connectionId: string,

backend/src/entities/amplitude/amplitude.service.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import { Injectable, OnModuleInit } from '@nestjs/common';
33
import { InjectRepository } from '@nestjs/typeorm';
44
import { Repository } from 'typeorm';
55
import { AmplitudeEventTypeEnum } from '../../enums/amplitude-event-type.enum.js';
6+
import { isTest } from '../../helpers/app/is-test.js';
7+
import { appConfig } from '../../shared/config/app-config.js';
68
import { UserEntity } from '../user/user.entity.js';
79

810
export interface AmplitudeLogOptions {
@@ -23,8 +25,9 @@ export class AmplitudeService implements OnModuleInit {
2325
) {}
2426

2527
public onModuleInit(): void {
26-
if (process.env.AMPLITUDE_API_KEY) {
27-
this.client = Amplitude.init(process.env.AMPLITUDE_API_KEY);
28+
const amplitudeApiKey = appConfig.thirdParty.amplitudeApiKey;
29+
if (amplitudeApiKey) {
30+
this.client = Amplitude.init(amplitudeApiKey);
2831
}
2932
}
3033

@@ -34,7 +37,7 @@ export class AmplitudeService implements OnModuleInit {
3437
options?: AmplitudeLogOptions,
3538
): Promise<void> {
3639
try {
37-
if (process.env.NODE_ENV === 'test') return;
40+
if (isTest()) return;
3841
let user_email = (await this.userRepository.findOne({ where: { id: user_id } }))?.email;
3942
if (!user_email && options) {
4043
user_email = options.user_email;

0 commit comments

Comments
 (0)