import * as plugins from '../../plugins.ts'; import type { OpsServer } from '../classes.opsserver.ts'; import * as interfaces from '../../../ts_interfaces/index.ts'; import { requireValidIdentity } from '../helpers/guards.ts'; export class SecretsHandler { public typedrouter = new plugins.typedrequest.TypedRouter(); constructor(private opsServerRef: OpsServer) { this.opsServerRef.typedrouter.addTypedRouter(this.typedrouter); this.registerHandlers(); } private registerHandlers(): void { // Get secrets this.typedrouter.addTypedHandler( new plugins.typedrequest.TypedHandler( 'getSecrets', async (dataArg) => { await requireValidIdentity(this.opsServerRef.adminHandler, dataArg); const provider = this.opsServerRef.gitopsAppRef.connectionManager.getProvider( dataArg.connectionId, ); const secrets = dataArg.scope === 'project' ? await provider.getProjectSecrets(dataArg.scopeId) : await provider.getGroupSecrets(dataArg.scopeId); return { secrets }; }, ), ); // Create secret this.typedrouter.addTypedHandler( new plugins.typedrequest.TypedHandler( 'createSecret', async (dataArg) => { await requireValidIdentity(this.opsServerRef.adminHandler, dataArg); const provider = this.opsServerRef.gitopsAppRef.connectionManager.getProvider( dataArg.connectionId, ); const secret = dataArg.scope === 'project' ? await provider.createProjectSecret(dataArg.scopeId, dataArg.key, dataArg.value) : await provider.createGroupSecret(dataArg.scopeId, dataArg.key, dataArg.value); return { secret }; }, ), ); // Update secret this.typedrouter.addTypedHandler( new plugins.typedrequest.TypedHandler( 'updateSecret', async (dataArg) => { await requireValidIdentity(this.opsServerRef.adminHandler, dataArg); const provider = this.opsServerRef.gitopsAppRef.connectionManager.getProvider( dataArg.connectionId, ); const secret = dataArg.scope === 'project' ? await provider.updateProjectSecret(dataArg.scopeId, dataArg.key, dataArg.value) : await provider.updateGroupSecret(dataArg.scopeId, dataArg.key, dataArg.value); return { secret }; }, ), ); // Delete secret this.typedrouter.addTypedHandler( new plugins.typedrequest.TypedHandler( 'deleteSecret', async (dataArg) => { await requireValidIdentity(this.opsServerRef.adminHandler, dataArg); const provider = this.opsServerRef.gitopsAppRef.connectionManager.getProvider( dataArg.connectionId, ); if (dataArg.scope === 'project') { await provider.deleteProjectSecret(dataArg.scopeId, dataArg.key); } else { await provider.deleteGroupSecret(dataArg.scopeId, dataArg.key); } return { ok: true }; }, ), ); } }