FEAT: update and delete identity provider

This commit is contained in:
marcos-silva-rodrigues
2025-07-03 10:59:43 -03:00
parent f726a9883f
commit d3040cd5a8
5 changed files with 194 additions and 36 deletions
+111 -20
View File
@@ -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",
+4 -4
View File
@@ -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",
+1 -1
View File
@@ -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",
@@ -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,
};
}
}
@@ -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),
);
}
}