UNPKG

@sourceloop/ctrl-plane-tenant-management-service

Version:

Tenant Management microservice for SaaS control plane

55 lines (52 loc) 1.46 kB
import {inject, intercept} from '@loopback/core'; import {post, requestBody} from '@loopback/rest'; import { CONTENT_TYPE, getModelSchemaRefSF, OPERATION_SECURITY_SPEC, rateLimitKeyGenPublic, STATUS_CODE, } from '@sourceloop/core'; import {authorize} from 'loopback4-authorization'; import {ratelimit} from 'loopback4-ratelimiter'; import {CALLABCK_VERIFIER} from '../../keys'; import {IdpDetailsDTO} from '../../models/dtos/idp-details-dto.model'; import {IdpResp} from '../../types'; import {IdpHelperService} from '../../services/idp-helper.service'; const basePath = '/manage/users'; export class IdpController { constructor( @inject('services.IdpHelperService') private readonly idpService: IdpHelperService, ) {} @intercept(CALLABCK_VERIFIER) @ratelimit(true, { max: Number.parseInt(process.env.WEBHOOK_API_MAX_ATTEMPTS ?? '10'), keyGenerator: rateLimitKeyGenPublic, }) @authorize({ permissions: ['*'], }) @post(`${basePath}`, { security: OPERATION_SECURITY_SPEC, responses: { [STATUS_CODE.NO_CONTENT]: { description: 'Webhook success', }, }, }) async idpConfigure( @requestBody({ content: { [CONTENT_TYPE.JSON]: { schema: getModelSchemaRefSF(IdpDetailsDTO, { title: 'IdpDetailsDTO', }), }, }, }) payload: IdpDetailsDTO, ): Promise<IdpResp> { return this.idpService.configureIdp(payload); } }