diff --git a/docsfera.json b/docsfera.json index 59a458b..b5a2c99 100644 --- a/docsfera.json +++ b/docsfera.json @@ -5906,6 +5906,12 @@ } }, "security": [ + { + "access-token": [] + }, + { + "access-token": [] + }, { "access-token": [] } @@ -5927,12 +5933,117 @@ } }, "security": [ + { + "access-token": [] + }, + { + "access-token": [] + }, { "access-token": [] } ] } }, + "/identity-providers/{id}": { + "delete": { + "operationId": "IdentityProviderController_deleteIdentityProvider", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + }, + "security": [ + { + "access-token": [] + }, + { + "access-token": [] + } + ] + }, + "put": { + "operationId": "IdentityProviderController_updateIdentityProviders", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateIdentityProvider" + } + } + } + }, + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + }, + "security": [ + { + "access-token": [] + }, + { + "access-token": [] + }, + { + "access-token": [] + } + ] + }, + "get": { + "operationId": "IdentityProviderController_loginIdp", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "" + } + } + } + }, "/identity-providers/callback": { "get": { "operationId": "IdentityProviderController_callbackIdp", @@ -5951,26 +6062,6 @@ } } }, - "/identity-providers/{id}": { - "get": { - "operationId": "IdentityProviderController_loginIdp", - "parameters": [ - { - "name": "id", - "required": true, - "in": "path", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "" - } - } - } - }, "/network-policy": { "get": { "operationId": "NetworkPolicyController_getNetworks", diff --git a/package-lock.json b/package-lock.json index 63acbdc..e6aa1e6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@aws-sdk/client-secrets-manager": "^3.414.0", "@dadosfera/dadosfera-logs": "^1.0.0-beta.4", "@dadosfera/protospack": "2.5.3", - "@dadosfera/protospack-v2": "3.38.0-beta.6", + "@dadosfera/protospack-v2": "3.38.0-beta.7", "@grpc/grpc-js": "^1.9.3", "@grpc/proto-loader": "^0.7.9", "@nestjs/cli": "^9.5.0", @@ -1407,9 +1407,9 @@ } }, "node_modules/@dadosfera/protospack-v2": { - "version": "3.38.0-beta.6", - "resolved": "https://dadosfera-611330257153.d.codeartifact.us-east-1.amazonaws.com/npm/dadosfera-npm/@dadosfera/protospack-v2/-/protospack-v2-3.38.0-beta.6.tgz", - "integrity": "sha512-nj60p/CCG8tTJ4xJCCsWJpoiiz6YqjFmKRhHlwWaMT2RXdOfhMwz1adNhbjaJAIlhXQ0rjb0wyZHzt5wAgtJvA==", + "version": "3.38.0-beta.7", + "resolved": "https://dadosfera-611330257153.d.codeartifact.us-east-1.amazonaws.com/npm/dadosfera-npm/@dadosfera/protospack-v2/-/protospack-v2-3.38.0-beta.7.tgz", + "integrity": "sha512-Lp+hW/F/F9gMtrwBJCpFS8ekVfpEP4av8u8OQKSnTz8Cxc7MXC7OxD1BdKi0m05GuVpWEa5aCe+ZLWq0mhhjDw==", "license": "ISC", "dependencies": { "@grpc/grpc-js": "^1.9.3", diff --git a/package.json b/package.json index 56f91f5..e7aae5b 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "@aws-sdk/client-secrets-manager": "^3.414.0", "@dadosfera/dadosfera-logs": "^1.0.0-beta.4", "@dadosfera/protospack": "2.5.3", - "@dadosfera/protospack-v2": "3.38.0-beta.6", + "@dadosfera/protospack-v2": "3.38.0-beta.7", "@grpc/grpc-js": "^1.9.3", "@grpc/proto-loader": "^0.7.9", "@nestjs/cli": "^9.5.0", diff --git a/src/modules/identity-provider/identity-provider.controller.ts b/src/modules/identity-provider/identity-provider.controller.ts index f92f377..8fe2a6a 100644 --- a/src/modules/identity-provider/identity-provider.controller.ts +++ b/src/modules/identity-provider/identity-provider.controller.ts @@ -2,12 +2,15 @@ import DadosferaLogger from '@dadosfera/dadosfera-logs'; import { Body, Controller, + Delete, Get, HttpCode, HttpStatus, Inject, Param, + Patch, Post, + Put, Redirect, Req, } from '@nestjs/common'; @@ -17,10 +20,15 @@ import { Language } from 'src/decorators/language.decorator'; import { LanguageEnum } from 'src/utils/languages.enum'; import { PackTheMetadata } from 'src/utils/ PackTheMetadata'; import { ApiOkResponse } from '@nestjs/swagger'; -import { CreateIdentityProvider, IdentityProviderListResponse, IdentityProviderResponse } from './dto/identity-provider.dto'; +import { + CreateIdentityProvider, + IdentityProviderListResponse, + IdentityProviderResponse, +} from './dto/identity-provider.dto'; import { Request } from 'express'; import ErrorCodes from 'src/utils/errorCodes'; -import { Authenticated } from 'src/decorators/authentication.decorator'; +import { Authenticated, RequireModule, RequireSomePermission } from 'src/decorators/authentication.decorator'; +import { PERMISSIONS_GROUPS } from 'src/authentication/permissions.enum'; @Controller('identity-providers') export class IdentityProviderController { @@ -38,12 +46,14 @@ export class IdentityProviderController { @HttpCode(HttpStatus.OK) @ApiOkResponse({ type: IdentityProviderResponse }) @Authenticated() + @RequireModule('sso') + @RequireSomePermission(PERMISSIONS_GROUPS.USERS.permissions.ADMIN) async addIdentityProvider( @User() user: RequestUser, @Body() body: CreateIdentityProvider, @Language() language: LanguageEnum, ) { - this.logger.info('/openid - addIdentityProvider'); + this.logger.info('POST /identity-providers'); const metadata = PackTheMetadata({ ...user, @@ -57,6 +67,8 @@ export class IdentityProviderController { @HttpCode(HttpStatus.OK) @ApiOkResponse({ type: IdentityProviderListResponse }) @Authenticated() + @RequireModule('sso') + @RequireSomePermission(PERMISSIONS_GROUPS.USERS.permissions.ADMIN) async getProviders( @User() user: RequestUser, @Language() language: LanguageEnum, @@ -64,17 +76,56 @@ export class IdentityProviderController { this.logger.info('GET identity-providers'); const metadata = PackTheMetadata({ ...user, - language - }) + language, + }); - const result = await this.identityProviderService.getList(metadata) - return result + const result = await this.identityProviderService.getList(metadata); + return result; + } + + @Delete(':id') + @HttpCode(HttpStatus.NO_CONTENT) + @RequireModule('sso') + @RequireSomePermission(PERMISSIONS_GROUPS.USERS.permissions.ADMIN) + async deleteIdentityProvider( + @Param('id') id: string, + @User() user: RequestUser, + ) { + this.logger.info('DELETE /identity-providers'); + + const metadata = PackTheMetadata({ + ...user, + }); + + return await this.identityProviderService.deleteIdentityProvider( + id, + metadata, + ); + } + + @Put(':id') + @HttpCode(HttpStatus.OK) + @Authenticated() + @RequireModule('sso') + @RequireSomePermission(PERMISSIONS_GROUPS.USERS.permissions.ADMIN) + async updateIdentityProviders( + @Param('id') id: string, + @Body() body: CreateIdentityProvider, + @User() user: RequestUser, + ) { + this.logger.info('PUT /identity-providers'); + + const metadata = PackTheMetadata({ + ...user, + }); + + return await this.identityProviderService.updateIdentityProviders(id, body, metadata); } @Get('/callback') @HttpCode(HttpStatus.OK) async callbackIdp(@Req() req: Request) { - this.logger.info('/callback'); + this.logger.info('GET /identity-providers/callback'); const { code, state } = req.query; if (!code) { @@ -94,12 +145,12 @@ export class IdentityProviderController { @HttpCode(HttpStatus.OK) @Redirect() async loginIdp(@Param('id') id: string) { - this.logger.info('/openid - :name'); + this.logger.info('GET /identity-providers/:id'); - const redirectUrl = await this.identityProviderService.loginIdentityProvider(id); + const redirectUrl = + await this.identityProviderService.loginIdentityProvider(id); return { url: redirectUrl, }; } - } diff --git a/src/modules/identity-provider/identity-provider.service.ts b/src/modules/identity-provider/identity-provider.service.ts index f1dcf27..ca964ae 100644 --- a/src/modules/identity-provider/identity-provider.service.ts +++ b/src/modules/identity-provider/identity-provider.service.ts @@ -10,6 +10,7 @@ import { Issuer, generators } from 'openid-client'; import { SsoSignInDto } from './dto/sso-signin.dto'; import { CacheService } from 'src/services/cache.service'; import { Request } from 'express'; +import { CreateIdentityProvider } from './dto/identity-provider.dto'; @Injectable() export class IdentityProviderService implements OnModuleInit { @@ -137,4 +138,19 @@ export class IdentityProviderService implements OnModuleInit { ); } + async deleteIdentityProvider(id: string, metadata: Metadata) { + return await lastValueFrom( + this.identityProviderService.DeleteIdentityProvider({ id }, metadata), + ); + } + + async updateIdentityProviders(id: string, body: CreateIdentityProvider, metadata: Metadata) { + return await lastValueFrom( + this.identityProviderService.UpdateIdentityProvider({ + id, + ...body, + }, metadata), + ); + } + }