cloudly/ts/manager.secret/classes.secretbundle.ts

63 lines
1.8 KiB
TypeScript

// a secret bundle is a set of secrets ready to be used in a project.
// it bundles secretgroups
import { SecretGroup } from './classes.secretgroup.js';
import * as plugins from '../plugins.js';
@plugins.smartdata.Manager()
export class SecretBundle extends plugins.smartdata.SmartDataDbDoc<
SecretBundle,
plugins.servezoneInterfaces.data.ISecretBundle
> {
// STATIC
// INSTANCE
@plugins.smartdata.unI()
public id: string;
@plugins.smartdata.svDb()
public data: plugins.servezoneInterfaces.data.ISecretBundle['data'];
public async getSecretGroups() {
const secretGroups: SecretGroup[] = [];
for (const secretGroupId of this.data.includedSecretGroupIds) {
secretGroups.push(
await SecretGroup.getInstance({
id: secretGroupId,
})
);
}
return secretGroups;
}
/**
* searches the secretGroups for environments and returns them
*/
public async getEnvironments() {
const environments = new Set();
const secretGroups = await this.getSecretGroups();
for (const secretGroup of secretGroups) {
environments.add(secretGroup.data.environments);
}
return Array.from(environments);
}
public async getAuthorizationFromAuthKey(authKeyArg: string) {
const authorization = this.data.authorizations.find((authArg) => {
return authArg.secretAccessKey === authKeyArg;
});
return authorization;
}
public async getKeyValueObjectForEnvironment(environmentArg: string) {
const secretGroups = await this.getSecretGroups();
const returnObject = {};
for (const secretGroup of secretGroups) {
if (!secretGroup.data.environments[environmentArg]) {
continue;
}
returnObject[secretGroup.data.key] = secretGroup.data.environments[environmentArg].value;
}
return returnObject;
}
}