Skip to content

Commit f63d1c6

Browse files
author
Scott
committed
wip
1 parent 9e0cd03 commit f63d1c6

File tree

3 files changed

+107
-27
lines changed

3 files changed

+107
-27
lines changed

src/agent/agentService.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,9 @@ function createAgentService({
9191
vaultPerms[actionType]
9292
} catch (err) {
9393
if (err instanceof TypeError) {
94+
// genWritable.stream.emit('error', vaultsErrors.ErrorVaultPermissionDenied);
9495
throw new vaultsErrors.ErrorVaultPermissionDenied;
96+
return;
9597
}
9698
}
9799
const meta = new grpc.Metadata();

src/vaults/VaultManager.ts

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,10 @@ class VaultManager {
395395
request.setVaultId(idUtils.toString(vaultNameOrId));
396396
}
397397
const response = client.vaultsGitInfoGet(request, meta);
398-
response.stream.on('metadata', async (meta) => {
398+
response.stream.on('error', (err) => {
399+
throw Error();
400+
});
401+
response.stream.on('metadata', (meta) => {
399402
vaultName = meta.get('vaultName').pop()!.toString();
400403
remoteVaultId = makeVaultId(
401404
meta.get('vaultId').pop()!.toString(),
@@ -493,7 +496,7 @@ class VaultManager {
493496
await this.db.put(this.vaultsNamesDbDomain, idUtils.toBuffer(vaultId), {
494497
name: vaultName,
495498
defaultPullNode: nodeId,
496-
defaultPullVault: idUtils.toBuffer(remoteVaultId),
499+
defaultPullVault: idUtils.toString(remoteVaultId),
497500
});
498501
return vault;
499502
}, [vaultId]);
@@ -512,29 +515,27 @@ class VaultManager {
512515
let vaultMeta, remoteVaultId;
513516
const thisNodeId = this.nodeManager.getNodeId();
514517
return await this._transaction(async () => {
515-
if (pullNodeId == null || pullVaultNameOrId == null) {
516-
vaultMeta = await this.db.get<POJO>(
517-
this.vaultsNamesDbDomain,
518-
idUtils.toBuffer(vaultId),
518+
vaultMeta = await this.db.get<POJO>(
519+
this.vaultsNamesDbDomain,
520+
idUtils.toBuffer(vaultId),
521+
);
522+
if (!vaultMeta) throw new vaultsErrors.ErrorVaultUnlinked();
523+
if (pullNodeId == null) {
524+
pullNodeId = vaultMeta.defaultPullNode;
525+
} else {
526+
metaChange = 1;
527+
vaultMeta.defaultPullNode = pullNodeId;
528+
}
529+
if (pullVaultNameOrId == null) {
530+
pullVaultNameOrId = makeVaultId(
531+
idUtils.fromString(vaultMeta.defaultPullVault),
519532
);
520-
if (!vaultMeta) throw new vaultsErrors.ErrorVaultUnlinked();
521-
if (pullNodeId == null) {
522-
pullNodeId = vaultMeta.defaultPullNode;
523-
} else {
524-
metaChange = 1;
525-
vaultMeta.defaultPullNode = pullNodeId;
526-
}
527-
if (pullVaultNameOrId == null) {
528-
pullVaultNameOrId = makeVaultId(
529-
idUtils.fromBuffer(Buffer.from(vaultMeta.defaultPullVault.data)),
530-
);
533+
} else {
534+
metaChange = 1;
535+
if (typeof pullVaultNameOrId === 'string') {
536+
metaChange = 2;
531537
} else {
532-
metaChange = 1;
533-
if (typeof pullVaultNameOrId === 'string') {
534-
metaChange = 2;
535-
} else {
536-
vaultMeta.defaultPullVault = idUtils.toBuffer(pullVaultNameOrId);
537-
}
538+
vaultMeta.defaultPullVault = idUtils.toString(pullVaultNameOrId);
538539
}
539540
}
540541
const nodeConnection = await this.nodeManager.getConnectionToNode(
@@ -646,7 +647,7 @@ class VaultManager {
646647
throw err;
647648
}
648649
if (metaChange !== 0) {
649-
if (metaChange === 2) vaultMeta.defaultPullVault = remoteVaultId;
650+
if (metaChange === 2) vaultMeta.defaultPullVault = idUtils.toString(remoteVaultId);
650651
await this.db.put(
651652
this.vaultsNamesDbDomain,
652653
idUtils.toBuffer(vaultId),

tests/vaults/VaultManager.test.ts

Lines changed: 80 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -375,17 +375,15 @@ describe('VaultManager', () => {
375375
const v9 = await vaultManager.getVaultId('Vault9' as VaultName);
376376
expect(v9).toBeTruthy();
377377
await vaultManager.renameVault(v9!, 'Vault10' as VaultName);
378-
await vaultManager.createVault('ThirdImpact' as VaultName);
378+
const beforeVault = await vaultManager.createVault('ThirdImpact' as VaultName);
379379
await vaultManager.createVault('Cake' as VaultName);
380380
const vn: Array<string> = [];
381381
(await vaultManager.listVaults()).forEach((_, vaultName) =>
382382
vn.push(vaultName),
383383
);
384384
expect(vn.sort()).toEqual(alteredVaultNames.sort());
385385
await vaultManager.destroy();
386-
await db.stop();
387386

388-
await db.start();
389387
const vaultManagerReloaded = await VaultManager.createVaultManager({
390388
keyManager: keyManager,
391389
vaultsPath,
@@ -412,6 +410,14 @@ describe('VaultManager', () => {
412410
vnAltered.push(vaultName),
413411
);
414412
expect(vnAltered.sort()).toEqual(alteredVaultNames.sort());
413+
const reloadedVault = await vaultManagerReloaded.openVault(beforeVault.vaultId);
414+
await reloadedVault.commit(async (efs) => {
415+
await efs.writeFile('reloaded', 'reload');
416+
});
417+
const file = await reloadedVault.access(async (efs) => {
418+
return await efs.readFile('reloaded', { encoding: 'utf8' });
419+
});
420+
expect(file).toBe('reload');
415421
await vaultManagerReloaded.destroy();
416422
},
417423
global.defaultTimeout * 2,
@@ -970,5 +976,76 @@ describe('VaultManager', () => {
970976
},
971977
global.defaultTimeout * 2,
972978
);
979+
test(
980+
'manage pulling from different remotes',
981+
async () => {
982+
const vault = await targetVaultManager.createVault(vaultName);
983+
await nodeManager.setNode(targetNodeId, {
984+
ip: targetRevProxy.getIngressHost(),
985+
port: targetRevProxy.getIngressPort(),
986+
} as NodeAddress);
987+
await targetNodeManager.setNode(nodeManager.getNodeId(), {
988+
ip: revProxy.getIngressHost(),
989+
port: revProxy.getIngressPort(),
990+
} as NodeAddress);
991+
await nodeManager.setNode(altNodeId, {
992+
ip: altRevProxy.getIngressHost(),
993+
port: altRevProxy.getIngressPort(),
994+
} as NodeAddress);
995+
await altNodeManager.setNode(nodeManager.getNodeId(), {
996+
ip: revProxy.getIngressHost(),
997+
port: revProxy.getIngressPort(),
998+
} as NodeAddress);
999+
await altNodeManager.setNode(targetNodeId, {
1000+
ip: targetRevProxy.getIngressHost(),
1001+
port: targetRevProxy.getIngressPort(),
1002+
} as NodeAddress);
1003+
await targetNodeManager.setNode(altNodeId, {
1004+
ip: altRevProxy.getIngressHost(),
1005+
port: altRevProxy.getIngressPort(),
1006+
} as NodeAddress);
1007+
await targetVaultManager.shareVault(
1008+
vault.vaultId,
1009+
altNodeManager.getNodeId(),
1010+
);
1011+
await targetVaultManager.shareVault(
1012+
vault.vaultId,
1013+
nodeManager.getNodeId()
1014+
);
1015+
const names: string[] = [];
1016+
for (let i = 0; i < 2; i++) {
1017+
const name = 'secret ' + i.toString();
1018+
names.push(name);
1019+
const content = 'Success?';
1020+
await vaultOps.addSecret(vault, name, content);
1021+
}
1022+
const clonedVaultAlt = await altVaultManager.cloneVault(targetNodeId, vault.vaultId);
1023+
await altVaultManager.shareVault(
1024+
clonedVaultAlt.vaultId,
1025+
nodeManager.getNodeId()
1026+
);
1027+
const vaultClone = await vaultManager.cloneVault(altNodeId, clonedVaultAlt.vaultId);
1028+
for (let i = 2; i < 4; i++) {
1029+
const name = 'secret ' + i.toString();
1030+
names.push(name);
1031+
const content = 'Success?';
1032+
await vaultOps.addSecret(vault, name, content);
1033+
}
1034+
await vaultManager.pullVault({ vaultId: vaultClone.vaultId, pullNodeId: targetNodeId, pullVaultNameOrId: vaultName });
1035+
expect((await vaultOps.listSecrets(vaultClone)).sort()).toStrictEqual(
1036+
names.sort(),
1037+
);
1038+
for (let i = 4; i < 6; i++) {
1039+
const name = 'secret ' + i.toString();
1040+
const content = 'Success?';
1041+
await vaultOps.addSecret(clonedVaultAlt, name, content);
1042+
}
1043+
await vaultManager.pullVault({ vaultId: vaultClone.vaultId });
1044+
expect((await vaultOps.listSecrets(vaultClone)).sort()).toStrictEqual(
1045+
names.sort(),
1046+
);
1047+
},
1048+
global.defaultTimeout * 2,
1049+
);
9731050
});
9741051
});

0 commit comments

Comments
 (0)