| | import { Get, Post, RestController, GlobalScope, Middleware } from '@n8n/decorators'; |
| | import { Request, Response, NextFunction } from 'express'; |
| |
|
| | import { NotFoundError } from '@/errors/response-errors/not-found.error'; |
| |
|
| | import { ExternalSecretsProviders } from './external-secrets-providers.ee'; |
| | import { ExternalSecretsService } from './external-secrets.service.ee'; |
| | import { ExternalSecretsRequest } from './types'; |
| |
|
| | @RestController('/external-secrets') |
| | export class ExternalSecretsController { |
| | constructor( |
| | private readonly secretsService: ExternalSecretsService, |
| | private readonly secretsProviders: ExternalSecretsProviders, |
| | ) {} |
| |
|
| | @Middleware() |
| | validateProviderName(req: Request, _: Response, next: NextFunction) { |
| | if ('provider' in req.params) { |
| | const { provider } = req.params; |
| | if (!this.secretsProviders.hasProvider(provider)) { |
| | throw new NotFoundError(`Could not find provider "${provider}"`); |
| | } |
| | } |
| | next(); |
| | } |
| |
|
| | @Get('/providers') |
| | @GlobalScope('externalSecretsProvider:list') |
| | async getProviders() { |
| | return await this.secretsService.getProviders(); |
| | } |
| |
|
| | @Get('/providers/:provider') |
| | @GlobalScope('externalSecretsProvider:read') |
| | async getProvider(req: ExternalSecretsRequest.GetProvider) { |
| | const providerName = req.params.provider; |
| | return this.secretsService.getProvider(providerName); |
| | } |
| |
|
| | @Post('/providers/:provider/test') |
| | @GlobalScope('externalSecretsProvider:read') |
| | async testProviderSettings(req: ExternalSecretsRequest.TestProviderSettings, res: Response) { |
| | const providerName = req.params.provider; |
| | const result = await this.secretsService.testProviderSettings(providerName, req.body); |
| | if (result.success) { |
| | res.statusCode = 200; |
| | } else { |
| | res.statusCode = 400; |
| | } |
| | return result; |
| | } |
| |
|
| | @Post('/providers/:provider') |
| | @GlobalScope('externalSecretsProvider:create') |
| | async setProviderSettings(req: ExternalSecretsRequest.SetProviderSettings) { |
| | const providerName = req.params.provider; |
| | await this.secretsService.saveProviderSettings(providerName, req.body, req.user.id); |
| | return {}; |
| | } |
| |
|
| | @Post('/providers/:provider/connect') |
| | @GlobalScope('externalSecretsProvider:update') |
| | async setProviderConnected(req: ExternalSecretsRequest.SetProviderConnected) { |
| | const providerName = req.params.provider; |
| | await this.secretsService.saveProviderConnected(providerName, req.body.connected); |
| | return {}; |
| | } |
| |
|
| | @Post('/providers/:provider/update') |
| | @GlobalScope('externalSecretsProvider:sync') |
| | async updateProvider(req: ExternalSecretsRequest.UpdateProvider, res: Response) { |
| | const providerName = req.params.provider; |
| | const resp = await this.secretsService.updateProvider(providerName); |
| | if (resp) { |
| | res.statusCode = 200; |
| | } else { |
| | res.statusCode = 400; |
| | } |
| | return { updated: resp }; |
| | } |
| |
|
| | @Get('/secrets') |
| | @GlobalScope('externalSecret:list') |
| | getSecretNames() { |
| | return this.secretsService.getAllSecrets(); |
| | } |
| | } |
| |
|