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
@@ -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),
);
}
}