mirror of
https://github.com/dadosfera/maestro.git
synced 2026-11-06 19:09:09 +00:00
FEAT: update and delete identity provider
This commit is contained in:
@@ -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),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user