FEAT: auth module refactored

This commit is contained in:
Arthur Simas
2022-07-06 17:20:00 -03:00
parent 7e92ca2c36
commit 1cd191e970
10 changed files with 93 additions and 49 deletions
+1
View File
@@ -6,6 +6,7 @@ module.exports = {
},
plugins: ['@typescript-eslint/eslint-plugin'],
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
'plugin:prettier/recommended',
],
+4 -12
View File
@@ -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(),
@@ -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';
+1 -1
View File
@@ -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,
+1 -1
View File
@@ -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';
+2 -31
View File
@@ -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) {
+24
View File
@@ -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 {}
@@ -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;
@@ -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 {}
@@ -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');