diff --git a/.eslintrc.js b/.eslintrc.js index f6c62be..568a385 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -6,6 +6,7 @@ module.exports = { }, plugins: ['@typescript-eslint/eslint-plugin'], extends: [ + 'eslint:recommended', 'plugin:@typescript-eslint/recommended', 'plugin:prettier/recommended', ], diff --git a/src/app.module.ts b/src/app.module.ts index 1fc2dd8..5653cf5 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -7,7 +7,6 @@ import { InputsController } from './modules/inputs/inputs.controller'; import { TransformationsController } from './modules/transformations/transformations.controller'; import { OutputsController } from './modules/outputs/outputs.controllers'; import { PipelinesController } from './modules/pipelines/pipelines.controller'; -import { AuthController } from './modules/auth/auth.controller'; import { HealthController } from './modules/health/health.controller'; import { InputsService } from './modules/inputs/inputs.service'; @@ -16,16 +15,15 @@ import { OutputsService } from './modules/outputs/outputs.service'; import { PipelinesService } from './modules/pipelines/pipelines.service'; import { HealthService } from './modules/health/health.service'; -import { AuthClientService } from './clients/auth/client.service'; +import { AuthModule } from './modules/auth/auth.module'; import { InputsClientService } from './clients/inputs/client.service'; import { TransformationsClientService } from './clients/transformations/client.service'; import { OutputsClientService } from './clients/outputs/client.service'; import { PipelinesClientService } from './clients/pipelines/client.service'; -import { PermissionsClientService } from './clients/permissions/client.service'; +import { PermissionsModule } from './modules/permissions/permissions.module'; import { OutputsClientConfiguration } from './clients/outputs/client.config'; import { TransformationsClientConfiguration } from './clients/transformations/client.config'; -import { DucClient } from './clients/duc/client.config'; import { InputsClientConfiguration } from './clients/inputs/client.config'; import { PipelinesClientConfiguration } from './clients/pipelines/client.config'; import { CatalogController } from './modules/catalog/catalog.controller'; @@ -43,7 +41,6 @@ import { ConnectorClientConfiguration } from './clients/connector/client.config' import { ConnectorController } from './modules/connector/connector.controller'; import { ConnectorClientService } from './clients/connector/client.service'; -const ducClient = new DucClient(); const inputClient = new InputsClientConfiguration(); const outputClient = new OutputsClientConfiguration(); const pipelineClient = new PipelinesClientConfiguration(); @@ -56,7 +53,6 @@ const connectorClient = new ConnectorClientConfiguration(); TransformationsController, OutputsController, PipelinesController, - AuthController, HealthController, CatalogController, OauthController, @@ -75,8 +71,6 @@ const connectorClient = new ConnectorClientConfiguration(); TransformationsClientService, OutputsClientService, PipelinesClientService, - AuthClientService, - PermissionsClientService, CatalogService, HubspotStrategy, FacebookStrategy, @@ -92,6 +86,8 @@ const connectorClient = new ConnectorClientConfiguration(); ConfigModule.forRoot({ isGlobal: true, }), + AuthModule, + PermissionsModule, ClientsModule.register([ { @@ -106,10 +102,6 @@ const connectorClient = new ConnectorClientConfiguration(); name: 'OUTPUTS_PACKAGE', ...outputClient.config(), }, - { - name: 'DUC_PACKAGE', - ...ducClient.config(), - }, { name: 'PIPELINES_PACKAGE', ...pipelineClient.config(), diff --git a/src/authentication/authentication.guard.spec.ts b/src/authentication/authentication.guard.spec.ts index 347a549..5400831 100644 --- a/src/authentication/authentication.guard.spec.ts +++ b/src/authentication/authentication.guard.spec.ts @@ -14,7 +14,7 @@ import { } from './authentication.decorator'; import { AuthenticationGuard } from './authentication.guard'; import { Permissions } from './permissions.enum'; -import { AuthClientService } from '../clients/auth/client.service'; +import { AuthClientService } from '../modules/auth/auth.service'; import ErrorCodes from '../utils/errorCodes'; diff --git a/src/authentication/authentication.guard.ts b/src/authentication/authentication.guard.ts index 399ca9f..b663a3b 100644 --- a/src/authentication/authentication.guard.ts +++ b/src/authentication/authentication.guard.ts @@ -10,7 +10,7 @@ import { Reflector } from '@nestjs/core'; import assert from 'assert'; import jwt from 'jsonwebtoken'; import { DadosferaLogger } from 'dadosfera-logs'; -import { AuthClientService } from '../clients/auth/client.service'; +import { AuthClientService } from '../modules/auth/auth.service'; import { AuthenticationFunction, AUTH_FUNCTION_KEY, diff --git a/src/authentication/user.decorator.spec.ts b/src/authentication/user.decorator.spec.ts index a8fa989..cc57a88 100644 --- a/src/authentication/user.decorator.spec.ts +++ b/src/authentication/user.decorator.spec.ts @@ -7,7 +7,7 @@ import jwt from 'jsonwebtoken'; import { Controller, Get } from '@nestjs/common'; import { DadosferaLogger } from 'dadosfera-logs'; import { AuthenticationGuard } from './authentication.guard'; -import { AuthClientService } from '../clients/auth/client.service'; +import { AuthClientService } from '../modules/auth/auth.service'; import ErrorCodes from '../utils/errorCodes'; import { User } from './user.decorator'; diff --git a/src/modules/auth/auth.controller.ts b/src/modules/auth/auth.controller.ts index d7dee17..0560249 100644 --- a/src/modules/auth/auth.controller.ts +++ b/src/modules/auth/auth.controller.ts @@ -5,7 +5,6 @@ import { Post, HttpCode, HttpStatus, - OnApplicationBootstrap, Inject, } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; @@ -21,50 +20,22 @@ import { AuthVerifyTotpMfaRequest, } from 'protospack-v2/dist/lib/Duc/interfaces/messages'; -import { AuthClientService } from '../../clients/auth/client.service'; -import { PermissionsClientService } from '../../clients/permissions/client.service'; -import { Permissions } from '../../authentication/permissions.enum'; +import { AuthClientService } from './auth.service'; import { DadosferaLogger } from 'dadosfera-logs'; -import ErrorBuilder from '../../utils/ErrorBuilder'; @ApiTags('Auth') @Controller('auth') -export class AuthController implements OnApplicationBootstrap { +export class AuthController { logger: any; constructor( @Inject(DadosferaLogger) dadosferaLogger: DadosferaLogger, private authClient: AuthClientService, - private permissionsClient: PermissionsClientService, ) { this.logger = dadosferaLogger.logger; } - // internally used to send permissions to duc on microservice startup - async onApplicationBootstrap() { - this.logger.info('sending permissions to DUC...'); - - const permissions = Object.values(Permissions).flatMap((namespace) => - Object.values(namespace), - ); - - return this.permissionsClient - .injectPermissions({ permissions }) - .catch((err: ErrorBuilder) => { - if ( - err.code === 'No connection established' && - process.env.LOCAL_ENV === 'true' - ) { - return this.logger.info( - "couldn't connect to DUC. suppresing in local env", - ); - } - - throw err; - }); - } - @Post('sign-in') @HttpCode(HttpStatus.OK) async signIn(@Body() { username, password, totp }: AuthSignInRequest) { diff --git a/src/modules/auth/auth.module.ts b/src/modules/auth/auth.module.ts new file mode 100644 index 0000000..65d6b34 --- /dev/null +++ b/src/modules/auth/auth.module.ts @@ -0,0 +1,24 @@ +import { Module } from '@nestjs/common'; +import { ClientsModule } from '@nestjs/microservices'; +import { DadosferaLogger } from 'dadosfera-logs'; + +import { AuthController } from './auth.controller'; +import { AuthClientService } from './auth.service'; + +import { DucClient } from '../../clients/duc/client.config'; +const ducClient = new DucClient(); + +@Module({ + imports: [ + ClientsModule.register([ + { + name: 'DUC_PACKAGE', + ...ducClient.config(), + }, + ]), + ], + controllers: [AuthController], + providers: [AuthClientService, DadosferaLogger], + exports: [AuthClientService], +}) +export class AuthModule {} diff --git a/src/clients/auth/client.service.ts b/src/modules/auth/auth.service.ts similarity index 98% rename from src/clients/auth/client.service.ts rename to src/modules/auth/auth.service.ts index dd5b8c3..3cbd01c 100644 --- a/src/clients/auth/client.service.ts +++ b/src/modules/auth/auth.service.ts @@ -1,4 +1,4 @@ -import { OnModuleInit, Inject } from '@nestjs/common'; +import { OnModuleInit, Inject, Injectable } from '@nestjs/common'; import { ClientGrpc } from '@nestjs/microservices'; import { DadosferaLogger } from 'dadosfera-logs'; @@ -30,6 +30,7 @@ import { import grpcHandler from '../../utils/grpcHandler'; +@Injectable() export class AuthClientService implements OnModuleInit { logger: any; diff --git a/src/modules/permissions/permissions.module.ts b/src/modules/permissions/permissions.module.ts new file mode 100644 index 0000000..f390558 --- /dev/null +++ b/src/modules/permissions/permissions.module.ts @@ -0,0 +1,21 @@ +import { Module } from '@nestjs/common'; +import { ClientsModule } from '@nestjs/microservices'; +import { DadosferaLogger } from 'dadosfera-logs'; + +import { PermissionsClientService } from './permissions.service'; + +import { DucClient } from '../../clients/duc/client.config'; +const ducClient = new DucClient(); + +@Module({ + imports: [ + ClientsModule.register([ + { + name: 'DUC_PACKAGE', + ...ducClient.config(), + }, + ]), + ], + providers: [PermissionsClientService, DadosferaLogger], +}) +export class PermissionsModule {} diff --git a/src/clients/permissions/client.service.ts b/src/modules/permissions/permissions.service.ts similarity index 53% rename from src/clients/permissions/client.service.ts rename to src/modules/permissions/permissions.service.ts index cfc30b4..91fda6a 100644 --- a/src/clients/permissions/client.service.ts +++ b/src/modules/permissions/permissions.service.ts @@ -1,4 +1,9 @@ -import { OnModuleInit, Inject } from '@nestjs/common'; +import { + OnApplicationBootstrap, + OnModuleInit, + Inject, + Injectable, +} from '@nestjs/common'; import { ClientGrpc } from '@nestjs/microservices'; import { ProtoServices } from 'protospack-v2/dist/lib/Duc'; @@ -9,8 +14,13 @@ import { } from 'protospack-v2/dist/lib/Duc/interfaces/messages'; import { DadosferaLogger } from 'dadosfera-logs'; import grpcHandler from '../../utils/grpcHandler'; +import { Permissions } from '../../authentication/permissions.enum'; +import ErrorBuilder from '../../utils/ErrorBuilder'; -export class PermissionsClientService implements OnModuleInit { +@Injectable() +export class PermissionsClientService + implements OnModuleInit, OnApplicationBootstrap +{ logger: any; private permissionsService: PermissionsServiceInterface; @@ -29,6 +39,30 @@ export class PermissionsClientService implements OnModuleInit { ); } + // internally used to send permissions to duc on microservice startup + async onApplicationBootstrap() { + this.logger.info('sending permissions to DUC...'); + + const permissions = Object.values(Permissions).flatMap((namespace) => + Object.values(namespace), + ); + + return this.injectPermissions({ + permissions, + }).catch((err: ErrorBuilder) => { + if ( + err.code === 'No connection established' && + process.env.LOCAL_ENV === 'true' + ) { + return this.logger.info( + "couldn't connect to DUC. suppresing in local env", + ); + } + + throw err; + }); + } + async injectPermissions({ permissions }: InjectPermissionsRequest) { this.logger.info('InjectPermissions');