ToolJet/server/src/controllers/org_environment_variables.controller.ts
Muhsin Shah C P 44d450725a
[fix] Redirect URL didn't work for preview apps (#4997)
* Fixed redirect URL Issue
- refactored the code
- added intercepter (valid app check)

* fixed another code

* code refactoring
2022-12-20 14:53:59 +05:30

87 lines
3.3 KiB
TypeScript

import {
Controller,
Post,
UseGuards,
Body,
Get,
Patch,
Delete,
Param,
BadRequestException,
ForbiddenException,
} from '@nestjs/common';
import { decamelizeKeys } from 'humps';
import { JwtAuthGuard } from '../modules/auth/jwt-auth.guard';
import { User } from 'src/decorators/user.decorator';
import { CreateEnvironmentVariableDto, UpdateEnvironmentVariableDto } from '@dto/environment-variable.dto';
import { OrgEnvironmentVariablesService } from '@services/org_environment_variables.service';
import { OrgEnvironmentVariablesAbilityFactory } from 'src/modules/casl/abilities/org-environment-variables-ability.factory';
import { OrgEnvironmentVariable } from 'src/entities/org_envirnoment_variable.entity';
import { IsPublicGuard } from 'src/modules/org_environment_variables/is-public.guard';
import { AppDecorator as App } from 'src/decorators/app.decorator';
@Controller('organization-variables')
export class OrgEnvironmentVariablesController {
constructor(
private orgEnvironmentVariablesService: OrgEnvironmentVariablesService,
private orgEnvironmentVariablesAbilityFactory: OrgEnvironmentVariablesAbilityFactory
) {}
@UseGuards(JwtAuthGuard)
@Get()
async get(@User() user) {
const result = await this.orgEnvironmentVariablesService.fetchVariables(user.organizationId);
return decamelizeKeys({ variables: result });
}
@UseGuards(IsPublicGuard)
@Get(':app_slug')
async getVariablesFromApp(@App() app) {
const result = await this.orgEnvironmentVariablesService.fetchVariables(app.organizationId);
return decamelizeKeys({ variables: result });
}
// Endpoint for adding new env vars
@UseGuards(JwtAuthGuard)
@Post()
async create(@User() user, @Body() createEnvironmentVariableDto: CreateEnvironmentVariableDto) {
const ability = await this.orgEnvironmentVariablesAbilityFactory.orgEnvironmentVariableActions(user, {});
if (!ability.can('createOrgEnvironmentVariable', OrgEnvironmentVariable)) {
throw new ForbiddenException('You do not have permissions to perform this action');
}
const result = await this.orgEnvironmentVariablesService.create(user, createEnvironmentVariableDto);
return decamelizeKeys({ variable: result });
}
@UseGuards(JwtAuthGuard)
@Patch(':id')
async update(@Body() body: UpdateEnvironmentVariableDto, @User() user, @Param('id') variableId) {
const ability = await this.orgEnvironmentVariablesAbilityFactory.orgEnvironmentVariableActions(user, {});
if (!ability.can('updateOrgEnvironmentVariable', OrgEnvironmentVariable)) {
throw new ForbiddenException('You do not have permissions to perform this action');
}
await this.orgEnvironmentVariablesService.update(user.organizationId, variableId, body);
return {};
}
@UseGuards(JwtAuthGuard)
@Delete(':id')
async delete(@User() user, @Param('id') variableId) {
const ability = await this.orgEnvironmentVariablesAbilityFactory.orgEnvironmentVariableActions(user, {});
if (!ability.can('deleteOrgEnvironmentVariable', OrgEnvironmentVariable)) {
throw new ForbiddenException('You do not have permissions to perform this action');
}
const result = await this.orgEnvironmentVariablesService.delete(user.organizationId, variableId);
if (result.affected == 1) {
return;
} else {
throw new BadRequestException();
}
}
}