Merge remote-tracking branch 'origin' into ft/connectors-manager

This commit is contained in:
Victor Radael
2022-07-14 17:34:17 -03:00
6 changed files with 144 additions and 0 deletions
+2
View File
@@ -41,6 +41,7 @@ import { AuthModule } from './modules/auth/auth.module';
import { PermissionsModule } from './modules/permissions/permissions.module';
import { DadosferaLogger } from 'dadosfera-logs';
import { TermsOfUseModule } from './modules/termsOfUse/termsOfUse.module';
const inputClient = new InputsClientConfiguration();
const outputClient = new OutputsClientConfiguration();
@@ -88,6 +89,7 @@ const transformationClient = new TransformationsClientConfiguration();
ConnectorModule,
AuthModule,
PermissionsModule,
TermsOfUseModule,
ClientsModule.register([
{
@@ -0,0 +1,56 @@
import {
Body,
Controller,
Post,
Get,
HttpCode,
HttpStatus,
Inject,
Headers,
UseFilters,
} from '@nestjs/common';
import { ApiTags } from '@nestjs/swagger';
import { TermsOfUseAcceptRequest } from 'protospack-v2/dist/lib/Duc/interfaces/messages';
import { TermsOfUseClientService } from './termsOfUse.service';
import { DadosferaLogger } from 'dadosfera-logs';
import { GrpcToHttpExceptionFilter } from '../../error/grpc-to-http-exception.filter';
import { RequestUser, User } from '../../authentication/user.decorator';
@ApiTags('TermsOfUse')
@UseFilters(new GrpcToHttpExceptionFilter())
@Controller('terms-of-use')
export class TermsOfUseController {
logger: any;
constructor(
@Inject(DadosferaLogger)
dadosferaLogger: DadosferaLogger,
private termsOfUseClient: TermsOfUseClientService,
) {
this.logger = dadosferaLogger.logger;
}
@Get('token')
async getToken(@User({ required: true }) user: RequestUser) {
this.logger.info('/terms-of-use - get token');
return this.termsOfUseClient.getToken({ userId: user.user_id });
}
@Post('accept')
@HttpCode(HttpStatus.OK)
async accept(@Body() body: TermsOfUseAcceptRequest, @Headers() headers) {
this.logger.info('/terms-of-use - accept');
const { token } = body;
const fingerprint = {
ip: process.env.ENV === 'local' ? headers['x-forwarded-for'] : '0.0.0.0',
port: process.env.ENV === 'local' ? headers['x-forwarded-port'] : '00000',
userAgent: headers['user-agent'],
};
return this.termsOfUseClient.accept({ token, fingerprint });
}
}
@@ -0,0 +1,24 @@
import { Module } from '@nestjs/common';
import { ClientsModule } from '@nestjs/microservices';
import { DadosferaLogger } from 'dadosfera-logs';
import { TermsOfUseController } from './termsOfUse.controller';
import { TermsOfUseClientService } from './termsOfUse.service';
import { DucClient } from '../../clients/duc/client.config';
const ducClient = new DucClient();
@Module({
imports: [
ClientsModule.register([
{
name: 'DUC_PACKAGE',
...ducClient.config(),
},
]),
],
controllers: [TermsOfUseController],
providers: [TermsOfUseClientService, DadosferaLogger],
exports: [TermsOfUseClientService],
})
export class TermsOfUseModule {}
@@ -0,0 +1,40 @@
import { OnModuleInit, Inject, Injectable } from '@nestjs/common';
import { ClientGrpc } from '@nestjs/microservices';
import { DadosferaLogger } from 'dadosfera-logs';
import { lastValueFrom } from 'rxjs';
import { ProtoServices } from 'protospack-v2/dist/lib/Duc';
import { TermsOfUseProtoService as TermsOfUseServiceInterface } from 'protospack-v2/dist/lib/Duc/interfaces/write-service';
import {
TermsOfUseGetTokenRequest,
TermsOfUseAcceptRequest,
} from 'protospack-v2/dist/lib/Duc/interfaces/messages';
@Injectable()
export class TermsOfUseClientService implements OnModuleInit {
logger: any;
private termsOfUseService: TermsOfUseServiceInterface;
constructor(
@Inject(DadosferaLogger)
dadosferaLogger: DadosferaLogger,
@Inject('DUC_PACKAGE') private readonly grpcClient: ClientGrpc,
) {
this.logger = dadosferaLogger.logger;
}
onModuleInit() {
this.termsOfUseService =
this.grpcClient.getService<TermsOfUseServiceInterface>(
ProtoServices.TermsOfUseProtoService,
);
}
async getToken(data: TermsOfUseGetTokenRequest) {
return lastValueFrom(this.termsOfUseService.TermsOfUseGetToken(data));
}
async accept(data: TermsOfUseAcceptRequest) {
return lastValueFrom(this.termsOfUseService.TermsOfUseAccept(data));
}
}
+16
View File
@@ -86,6 +86,22 @@ export function EnrichErrorCode(code: string) {
code,
};
case ErrorCodes.TERMS_OF_USE.UP_TO_DATE:
return {
statusCode: HttpStatus.FORBIDDEN,
error: 'Não autorizado',
message: 'Você já assinou os termos de uso',
code,
};
case ErrorCodes.TERMS_OF_USE.REQUIRED:
return {
statusCode: HttpStatus.FORBIDDEN,
error: 'Não autorizado',
message: 'É necessário aceitar os termos de uso para prosseguir',
code,
};
case ErrorCodes.RATE_LIMIT:
return {
statusCode: HttpStatus.TOO_MANY_REQUESTS,
+6
View File
@@ -14,11 +14,17 @@ export const AUTH = {
WEAK_NEW_PASSWORD: 'AUTH.WEAK_NEW_PASSWORD',
};
const TERMS_OF_USE = {
UP_TO_DATE: 'TERMS_OF_USE.UP_TO_DATE',
REQUIRED: 'TERMS_OF_USE.REQUIRED',
};
const ErrorCodes = {
UNKNOWN: 'UNKNOWN',
RATE_LIMIT: 'RATE_LIMIT',
INTERNAL: 'INTERNAL',
AUTH,
TERMS_OF_USE,
};
export default ErrorCodes;