import { Body, Controller, Delete, Get, Post, Put } from '@nestjs/common'; import { GetOrgFromRequest } from '@gitroom/nestjs-libraries/user/org.from.request'; import { Organization } from '@prisma/client'; import { ApiTags } from '@nestjs/swagger'; import { OAuthService } from '@gitroom/nestjs-libraries/database/prisma/oauth/oauth.service'; import { CheckPolicies } from '@gitroom/backend/services/auth/permissions/permissions.ability'; import { AuthorizationActions, Sections, } from '@gitroom/backend/services/auth/permissions/permission.exception.class'; import { CreateOAuthAppDto } from '@gitroom/nestjs-libraries/dtos/oauth/create-oauth-app.dto'; import { UpdateOAuthAppDto } from '@gitroom/nestjs-libraries/dtos/oauth/update-oauth-app.dto'; @ApiTags('OAuth App') @Controller('/user/oauth-app') export class OAuthAppController { constructor(private _oauthService: OAuthService) {} @Get('/') @CheckPolicies([AuthorizationActions.Create, Sections.ADMIN]) async getApp(@GetOrgFromRequest() org: Organization) { return this._oauthService.getApp(org.id); } @Post('/') @CheckPolicies([AuthorizationActions.Create, Sections.ADMIN]) async createApp( @GetOrgFromRequest() org: Organization, @Body() body: CreateOAuthAppDto ) { return this._oauthService.createApp(org.id, body); } @Put('/') @CheckPolicies([AuthorizationActions.Create, Sections.ADMIN]) async updateApp( @GetOrgFromRequest() org: Organization, @Body() body: UpdateOAuthAppDto ) { return this._oauthService.updateApp(org.id, body); } @Delete('/') @CheckPolicies([AuthorizationActions.Create, Sections.ADMIN]) async deleteApp(@GetOrgFromRequest() org: Organization) { return this._oauthService.deleteApp(org.id); } @Post('/rotate-secret') @CheckPolicies([AuthorizationActions.Create, Sections.ADMIN]) async rotateSecret(@GetOrgFromRequest() org: Organization) { return this._oauthService.rotateSecret(org.id); } }