2023-08-25 01:33:46 -07:00
|
|
|
import { Authorized, Get, Post, RestController } from '@/decorators';
|
|
|
|
import { ExternalSecretsRequest } from '@/requests';
|
|
|
|
import { Response } from 'express';
|
|
|
|
import { Service } from 'typedi';
|
2023-11-28 01:19:27 -08:00
|
|
|
import { ExternalSecretsService } from './ExternalSecrets.service.ee';
|
|
|
|
import { ExternalSecretsProviderNotFoundError } from '@/errors/external-secrets-provider-not-found.error';
|
|
|
|
import { NotFoundError } from '@/errors/response-errors/not-found.error';
|
2023-08-25 01:33:46 -07:00
|
|
|
|
|
|
|
@Service()
|
|
|
|
@Authorized(['global', 'owner'])
|
|
|
|
@RestController('/external-secrets')
|
|
|
|
export class ExternalSecretsController {
|
|
|
|
constructor(private readonly secretsService: ExternalSecretsService) {}
|
|
|
|
|
|
|
|
@Get('/providers')
|
|
|
|
async getProviders() {
|
|
|
|
return this.secretsService.getProviders();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Get('/providers/:provider')
|
|
|
|
async getProvider(req: ExternalSecretsRequest.GetProvider) {
|
|
|
|
const providerName = req.params.provider;
|
|
|
|
try {
|
|
|
|
return this.secretsService.getProvider(providerName);
|
|
|
|
} catch (e) {
|
2023-11-28 01:19:27 -08:00
|
|
|
if (e instanceof ExternalSecretsProviderNotFoundError) {
|
2023-08-25 01:33:46 -07:00
|
|
|
throw new NotFoundError(`Could not find provider "${e.providerName}"`);
|
|
|
|
}
|
|
|
|
throw e;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Post('/providers/:provider/test')
|
|
|
|
async testProviderSettings(req: ExternalSecretsRequest.TestProviderSettings, res: Response) {
|
|
|
|
const providerName = req.params.provider;
|
|
|
|
try {
|
|
|
|
const result = await this.secretsService.testProviderSettings(providerName, req.body);
|
|
|
|
if (result.success) {
|
|
|
|
res.statusCode = 200;
|
|
|
|
} else {
|
|
|
|
res.statusCode = 400;
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
} catch (e) {
|
2023-11-28 01:19:27 -08:00
|
|
|
if (e instanceof ExternalSecretsProviderNotFoundError) {
|
2023-08-25 01:33:46 -07:00
|
|
|
throw new NotFoundError(`Could not find provider "${e.providerName}"`);
|
|
|
|
}
|
|
|
|
throw e;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Post('/providers/:provider')
|
|
|
|
async setProviderSettings(req: ExternalSecretsRequest.SetProviderSettings) {
|
|
|
|
const providerName = req.params.provider;
|
|
|
|
try {
|
|
|
|
await this.secretsService.saveProviderSettings(providerName, req.body, req.user.id);
|
|
|
|
} catch (e) {
|
2023-11-28 01:19:27 -08:00
|
|
|
if (e instanceof ExternalSecretsProviderNotFoundError) {
|
2023-08-25 01:33:46 -07:00
|
|
|
throw new NotFoundError(`Could not find provider "${e.providerName}"`);
|
|
|
|
}
|
|
|
|
throw e;
|
|
|
|
}
|
|
|
|
return {};
|
|
|
|
}
|
|
|
|
|
|
|
|
@Post('/providers/:provider/connect')
|
|
|
|
async setProviderConnected(req: ExternalSecretsRequest.SetProviderConnected) {
|
|
|
|
const providerName = req.params.provider;
|
|
|
|
try {
|
|
|
|
await this.secretsService.saveProviderConnected(providerName, req.body.connected);
|
|
|
|
} catch (e) {
|
2023-11-28 01:19:27 -08:00
|
|
|
if (e instanceof ExternalSecretsProviderNotFoundError) {
|
2023-08-25 01:33:46 -07:00
|
|
|
throw new NotFoundError(`Could not find provider "${e.providerName}"`);
|
|
|
|
}
|
|
|
|
throw e;
|
|
|
|
}
|
|
|
|
return {};
|
|
|
|
}
|
|
|
|
|
|
|
|
@Post('/providers/:provider/update')
|
|
|
|
async updateProvider(req: ExternalSecretsRequest.UpdateProvider, res: Response) {
|
|
|
|
const providerName = req.params.provider;
|
|
|
|
try {
|
|
|
|
const resp = await this.secretsService.updateProvider(providerName);
|
|
|
|
if (resp) {
|
|
|
|
res.statusCode = 200;
|
|
|
|
} else {
|
|
|
|
res.statusCode = 400;
|
|
|
|
}
|
|
|
|
return { updated: resp };
|
|
|
|
} catch (e) {
|
2023-11-28 01:19:27 -08:00
|
|
|
if (e instanceof ExternalSecretsProviderNotFoundError) {
|
2023-08-25 01:33:46 -07:00
|
|
|
throw new NotFoundError(`Could not find provider "${e.providerName}"`);
|
|
|
|
}
|
|
|
|
throw e;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Get('/secrets')
|
|
|
|
getSecretNames() {
|
|
|
|
return this.secretsService.getAllSecrets();
|
|
|
|
}
|
|
|
|
}
|