import DadosferaLogger from '@dadosfera/dadosfera-logs'; import { Body, Controller, ForbiddenException, Header, Headers, HttpCode, HttpException, Inject, Param, Post, Query, Req, Res, 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'; import { LanguageEnum } from 'src/utils/languages.enum'; 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 { Metadata } from '@grpc/grpc-js'; import { PackTheMetadata } from 'src/utils/PackTheMetadata'; import { request } from 'http'; import { Request } from 'express'; @Controller('open-data') @ApiInternalOnlyController() @ApiTags('OpenData') @ApiHeaders([{ name: 'dadosfera-lang', enum: LanguageEnum, required: false }]) @UseFilters(GrpcToHttpExceptionFilter) export class OpenDataController { logger: DadosferaLogger; constructor( @Inject(DadosferaLogger) dadosferaLogger: DadosferaLogger, private openDataService: OpenDataService, ) { this.logger = dadosferaLogger.logger; } @Post("/sharing-ocean-data") @HttpCode(200) @Header('content-type', 'application/json') @ApiOkResponse() async createUser( @Body() body: WordpressForm, @Query('language') language: string, @Req() request: Request, @Headers('origin') origin: string ) { this.logger.info('createUser for open data' + JSON.stringify(request.headers)); // const corslist = ["https://devsbm.dadosfera.io", "https://sharingoceandata.com"]; // if (!corslist.includes(origin)) { // this.logger.info('block request by cors list: '+ origin); // throw new ForbiddenException(); // } 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' }); const data = {} try { Object.keys(body.fields) .filter(key => body.fields[key].required === "1") .forEach(key => { const field = body.fields[key] data[field.id] = field.value }); } catch (e) { this.logger.error('user data ' + e.message); } const user: CreateUserOpenDataDTO = { email: data["email"], enquiryType: data["enquiry_type"], firstName: data["first_name"], lastName: data["last_name"], organization: data["organization"] } this.logger.info(`user request to group ${OPENDATA_CUSTOMER_ID} with role ${OPENDATA_GROUP_ID}`); try { 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', message: 'user created with succesfull' } } catch (e) { this.logger.error('failed with exception: ' + e.message); return { success: false, status: 'failed', message: e.message }; } } }