Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
Scott committed Oct 26, 2021
1 parent 9e0cd03 commit f63d1c6
Show file tree
Hide file tree
Showing 3 changed files with 107 additions and 27 deletions.
2 changes: 2 additions & 0 deletions src/agent/agentService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,9 @@ function createAgentService({
vaultPerms[actionType]
} catch (err) {
if (err instanceof TypeError) {
// genWritable.stream.emit('error', vaultsErrors.ErrorVaultPermissionDenied);
throw new vaultsErrors.ErrorVaultPermissionDenied;
return;
}
}
const meta = new grpc.Metadata();
Expand Down
49 changes: 25 additions & 24 deletions src/vaults/VaultManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -395,7 +395,10 @@ class VaultManager {
request.setVaultId(idUtils.toString(vaultNameOrId));
}
const response = client.vaultsGitInfoGet(request, meta);
response.stream.on('metadata', async (meta) => {
response.stream.on('error', (err) => {
throw Error();
});
response.stream.on('metadata', (meta) => {
vaultName = meta.get('vaultName').pop()!.toString();
remoteVaultId = makeVaultId(
meta.get('vaultId').pop()!.toString(),
Expand Down Expand Up @@ -493,7 +496,7 @@ class VaultManager {
await this.db.put(this.vaultsNamesDbDomain, idUtils.toBuffer(vaultId), {
name: vaultName,
defaultPullNode: nodeId,
defaultPullVault: idUtils.toBuffer(remoteVaultId),
defaultPullVault: idUtils.toString(remoteVaultId),
});
return vault;
}, [vaultId]);
Expand All @@ -512,29 +515,27 @@ class VaultManager {
let vaultMeta, remoteVaultId;
const thisNodeId = this.nodeManager.getNodeId();
return await this._transaction(async () => {
if (pullNodeId == null || pullVaultNameOrId == null) {
vaultMeta = await this.db.get<POJO>(
this.vaultsNamesDbDomain,
idUtils.toBuffer(vaultId),
vaultMeta = await this.db.get<POJO>(
this.vaultsNamesDbDomain,
idUtils.toBuffer(vaultId),
);
if (!vaultMeta) throw new vaultsErrors.ErrorVaultUnlinked();
if (pullNodeId == null) {
pullNodeId = vaultMeta.defaultPullNode;
} else {
metaChange = 1;
vaultMeta.defaultPullNode = pullNodeId;
}
if (pullVaultNameOrId == null) {
pullVaultNameOrId = makeVaultId(
idUtils.fromString(vaultMeta.defaultPullVault),
);
if (!vaultMeta) throw new vaultsErrors.ErrorVaultUnlinked();
if (pullNodeId == null) {
pullNodeId = vaultMeta.defaultPullNode;
} else {
metaChange = 1;
vaultMeta.defaultPullNode = pullNodeId;
}
if (pullVaultNameOrId == null) {
pullVaultNameOrId = makeVaultId(
idUtils.fromBuffer(Buffer.from(vaultMeta.defaultPullVault.data)),
);
} else {
metaChange = 1;
if (typeof pullVaultNameOrId === 'string') {
metaChange = 2;
} else {
metaChange = 1;
if (typeof pullVaultNameOrId === 'string') {
metaChange = 2;
} else {
vaultMeta.defaultPullVault = idUtils.toBuffer(pullVaultNameOrId);
}
vaultMeta.defaultPullVault = idUtils.toString(pullVaultNameOrId);
}
}
const nodeConnection = await this.nodeManager.getConnectionToNode(
Expand Down Expand Up @@ -646,7 +647,7 @@ class VaultManager {
throw err;
}
if (metaChange !== 0) {
if (metaChange === 2) vaultMeta.defaultPullVault = remoteVaultId;
if (metaChange === 2) vaultMeta.defaultPullVault = idUtils.toString(remoteVaultId);
await this.db.put(
this.vaultsNamesDbDomain,
idUtils.toBuffer(vaultId),
Expand Down
83 changes: 80 additions & 3 deletions tests/vaults/VaultManager.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -375,17 +375,15 @@ describe('VaultManager', () => {
const v9 = await vaultManager.getVaultId('Vault9' as VaultName);
expect(v9).toBeTruthy();
await vaultManager.renameVault(v9!, 'Vault10' as VaultName);
await vaultManager.createVault('ThirdImpact' as VaultName);
const beforeVault = await vaultManager.createVault('ThirdImpact' as VaultName);
await vaultManager.createVault('Cake' as VaultName);
const vn: Array<string> = [];
(await vaultManager.listVaults()).forEach((_, vaultName) =>
vn.push(vaultName),
);
expect(vn.sort()).toEqual(alteredVaultNames.sort());
await vaultManager.destroy();
await db.stop();

await db.start();
const vaultManagerReloaded = await VaultManager.createVaultManager({
keyManager: keyManager,
vaultsPath,
Expand All @@ -412,6 +410,14 @@ describe('VaultManager', () => {
vnAltered.push(vaultName),
);
expect(vnAltered.sort()).toEqual(alteredVaultNames.sort());
const reloadedVault = await vaultManagerReloaded.openVault(beforeVault.vaultId);
await reloadedVault.commit(async (efs) => {
await efs.writeFile('reloaded', 'reload');
});
const file = await reloadedVault.access(async (efs) => {
return await efs.readFile('reloaded', { encoding: 'utf8' });
});
expect(file).toBe('reload');
await vaultManagerReloaded.destroy();
},
global.defaultTimeout * 2,
Expand Down Expand Up @@ -970,5 +976,76 @@ describe('VaultManager', () => {
},
global.defaultTimeout * 2,
);
test(
'manage pulling from different remotes',
async () => {
const vault = await targetVaultManager.createVault(vaultName);
await nodeManager.setNode(targetNodeId, {
ip: targetRevProxy.getIngressHost(),
port: targetRevProxy.getIngressPort(),
} as NodeAddress);
await targetNodeManager.setNode(nodeManager.getNodeId(), {
ip: revProxy.getIngressHost(),
port: revProxy.getIngressPort(),
} as NodeAddress);
await nodeManager.setNode(altNodeId, {
ip: altRevProxy.getIngressHost(),
port: altRevProxy.getIngressPort(),
} as NodeAddress);
await altNodeManager.setNode(nodeManager.getNodeId(), {
ip: revProxy.getIngressHost(),
port: revProxy.getIngressPort(),
} as NodeAddress);
await altNodeManager.setNode(targetNodeId, {
ip: targetRevProxy.getIngressHost(),
port: targetRevProxy.getIngressPort(),
} as NodeAddress);
await targetNodeManager.setNode(altNodeId, {
ip: altRevProxy.getIngressHost(),
port: altRevProxy.getIngressPort(),
} as NodeAddress);
await targetVaultManager.shareVault(
vault.vaultId,
altNodeManager.getNodeId(),
);
await targetVaultManager.shareVault(
vault.vaultId,
nodeManager.getNodeId()
);
const names: string[] = [];
for (let i = 0; i < 2; i++) {
const name = 'secret ' + i.toString();
names.push(name);
const content = 'Success?';
await vaultOps.addSecret(vault, name, content);
}
const clonedVaultAlt = await altVaultManager.cloneVault(targetNodeId, vault.vaultId);
await altVaultManager.shareVault(
clonedVaultAlt.vaultId,
nodeManager.getNodeId()
);
const vaultClone = await vaultManager.cloneVault(altNodeId, clonedVaultAlt.vaultId);
for (let i = 2; i < 4; i++) {
const name = 'secret ' + i.toString();
names.push(name);
const content = 'Success?';
await vaultOps.addSecret(vault, name, content);
}
await vaultManager.pullVault({ vaultId: vaultClone.vaultId, pullNodeId: targetNodeId, pullVaultNameOrId: vaultName });
expect((await vaultOps.listSecrets(vaultClone)).sort()).toStrictEqual(
names.sort(),
);
for (let i = 4; i < 6; i++) {
const name = 'secret ' + i.toString();
const content = 'Success?';
await vaultOps.addSecret(clonedVaultAlt, name, content);
}
await vaultManager.pullVault({ vaultId: vaultClone.vaultId });
expect((await vaultOps.listSecrets(vaultClone)).sort()).toStrictEqual(
names.sort(),
);
},
global.defaultTimeout * 2,
);
});
});

0 comments on commit f63d1c6

Please sign in to comment.