diff --git a/src/decorators/set-origin.decorator.ts b/src/decorators/set-origin.decorator.ts deleted file mode 100644 index c6d5338..0000000 --- a/src/decorators/set-origin.decorator.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { Injectable, CanActivate, ExecutionContext, ForbiddenException } from '@nestjs/common'; -import { Reflector } from '@nestjs/core'; -import { SetMetadata } from '@nestjs/common'; - -export const SetOrigin = (origin: string) => SetMetadata('allowedOrigin', origin); - -@Injectable() -export class CORSGuard implements CanActivate { - constructor(private reflector: Reflector) {} - - canActivate(context: ExecutionContext): boolean { - const response = context.switchToHttp().getResponse(); - const request = context.switchToHttp().getRequest(); - const origin = request.headers.origin; - - // Obter a origem permitida através do decorador - const allowedOrigin = this.reflector.get('allowedOrigin', context.getHandler()); - if (process.env.ENV === "local") { - return true; - } - - // Verifica se a origem da requisição é permitida - if (allowedOrigin && origin !== allowedOrigin) { - throw new ForbiddenException('Acesso não permitido pela política CORS'); - } - - response.setHeader('Access-Control-Allow-Origin', allowedOrigin); - - return true; - } -} - diff --git a/src/modules/open-data/open-data.controller.ts b/src/modules/open-data/open-data.controller.ts index d85c53a..b999060 100644 --- a/src/modules/open-data/open-data.controller.ts +++ b/src/modules/open-data/open-data.controller.ts @@ -1,5 +1,5 @@ import DadosferaLogger from '@dadosfera/dadosfera-logs'; -import { Body, Controller, Header, HttpCode, Inject, Param, Post, Query, Req, UseFilters, UseGuards } from '@nestjs/common'; +import { Body, Controller, ForbiddenException, Header, HttpCode, Inject, Param, Post, Query, Req, UseFilters, UseGuards, UseInterceptors } from '@nestjs/common'; import { ApiCreatedResponse, ApiHeaders, ApiOkResponse, ApiTags } from '@nestjs/swagger'; import { ApiInternalOnlyController } from 'src/decorators/swagger.decorator'; import { GrpcToHttpExceptionFilter } from 'src/error/grpc-to-http-exception.filter'; @@ -8,7 +8,6 @@ import { UsersService } from '../users/users.service'; import { Language } from 'src/decorators/language.decorator'; import { OpenDataService } from './open-data.service'; import { CreateUserOpenDataDTO, WordpressForm } from './dto/wordpres-form'; -import { CORSGuard, SetOrigin } from 'src/decorators/set-origin.decorator'; import { Metadata } from '@grpc/grpc-js'; import { PackTheMetadata } from 'src/utils/ PackTheMetadata'; import { request } from 'http'; @@ -31,8 +30,6 @@ export class OpenDataController { } @Post("/sharing-ocean-data") - // @SetOrigin('devsbm.dadosfera.io') - // @UseGuards(CORSGuard) @HttpCode(200) @Header('content-type', 'application/json') @ApiOkResponse() @@ -44,26 +41,16 @@ export class OpenDataController { @Req() request: Request, ) { - this.logger.info('createUser for open data' - + JSON.stringify({ - language, - body - })); + if (!request.headers['user-agent'].includes('WordPress/6.7.1; https://devsbm.dadosfera.io')) { + throw new ForbiddenException(); + } + this.logger.info('createUser for open data'); - this.logger.info('headers' - + JSON.stringify({ - headers: request.headers - })); + this.logger.info('user-agent', request.headers['user-agent']); - // "401573bb-334f-44b2-b30e-88d4cea31ae9" - // const OPENDATA_PUBLIC_USERS_GROUP_ID = process.env.OPEN_GROUP_ID; - // ""f239718a-a271-4ef9-ae7e-02a2f0f3aa6e"" - // const OPENDATA_CUSTOMER_ID = process.env.OPEN_CUSTOMER_ID; - const OPENDATA_CUSTOMER_ID = "b3e3dfe5-b992-4586-a73c-c0b0c00f615d"; - - this.logger.info("OPENDATA_CUSTOMER_ID: " + process.env.OPEN_CUSTOMER_ID) - this.logger.info("OPEN_GROUP_ID: " + process.env.OPEN_GROUP_ID) - const roles = ["e3f98a2f-7748-4981-8505-7695c8ca8218"]; + const OPENDATA_CUSTOMER_ID = process.env.OPEN_CUSTOMER_ID; + const OPENDATA_GROUP_ID = process.env.OPEN_GROUP_ID; + const roles = [process.env.OPEN_GROUP_ID]; const metadata = PackTheMetadata({ language: language || 'en-us' }); @@ -81,7 +68,6 @@ export class OpenDataController { this.logger.error('user data ' + e.message); } - const user: CreateUserOpenDataDTO = { email: data["email"], enquiryType: data["enquiry_type"], @@ -89,11 +75,11 @@ export class OpenDataController { lastName: data["last_name"], organization: data["organization"] } - this.logger.info('user request' + JSON.stringify({ user, roles, customer: OPENDATA_CUSTOMER_ID })); + this.logger.info(`user request to group ${OPENDATA_CUSTOMER_ID} with role ${OPENDATA_GROUP_ID}`); try { - await this.openDataService.createUser(OPENDATA_CUSTOMER_ID, user, roles, metadata); - this.logger.info('user created with sucessfull data'); + const id = await this.openDataService.createUser(OPENDATA_CUSTOMER_ID, user, roles, metadata); + this.logger.info('user created with id: '+ id); return { success: true, status: 'success', diff --git a/src/modules/open-data/open-data.service.ts b/src/modules/open-data/open-data.service.ts index 317b8e3..4c927fa 100644 --- a/src/modules/open-data/open-data.service.ts +++ b/src/modules/open-data/open-data.service.ts @@ -40,10 +40,10 @@ export class OpenDataService implements OnModuleInit { } try { - await lastValueFrom( + const { user } = await lastValueFrom( this.usersClientService.SimpleUserCreate(body, metadata), ); - return "User created"; + return user.id; } catch(err) { return err; }