diff --git a/src/agent/service/vaultsGitPackGet.ts b/src/agent/service/vaultsGitPackGet.ts index e17cad29f..276cec84f 100644 --- a/src/agent/service/vaultsGitPackGet.ts +++ b/src/agent/service/vaultsGitPackGet.ts @@ -56,9 +56,10 @@ function vaultsGitPackGet({ } const nodeId = connectionInfo.remoteNodeId; const nodeIdEncoded = nodesUtils.encodeNodeId(nodeId); + const nameOrId = meta.get('vaultNameOrId').pop()!.toString(); await db.withTransactionF(async (tran) => { const vaultIdFromName = await vaultManager.getVaultId( - meta.get('vaultNameOrId').pop()!.toString() as VaultName, + nameOrId as VaultName, tran, ); const { @@ -79,8 +80,8 @@ function vaultsGitPackGet({ ); }, { - vaultId: meta.get('vaultNameOrId').pop(), - actionType: meta.get('vaultAction').pop(), + vaultId: nameOrId, + actionType: meta.get('vaultAction').pop()!.toString(), }, ); // Checking permissions diff --git a/src/client/service/vaultsClone.ts b/src/client/service/vaultsClone.ts index 4e931e551..fdefe5697 100644 --- a/src/client/service/vaultsClone.ts +++ b/src/client/service/vaultsClone.ts @@ -1,7 +1,7 @@ import type { DB } from '@matrixai/db'; import type { Authenticate } from '../types'; import type VaultManager from '../../vaults/VaultManager'; -import type { VaultId } from '../../vaults/types'; +import type { VaultName, VaultId } from '../../vaults/types'; import type { NodeId } from '../../nodes/types'; import type * as vaultsPB from '../../proto/js/polykey/v1/vaults/vaults_pb'; import type Logger from '@matrixai/logger'; @@ -35,28 +35,30 @@ function vaultsClone({ const response = new utilsPB.StatusMessage(); const metadata = await authenticate(call.metadata); call.sendMetadata(metadata); + // Node id const { nodeId, - vaultId, }: { nodeId: NodeId; - vaultId: VaultId; } = validateSync( (keyPath, value) => { return matchSync(keyPath)( [['nodeId'], () => validationUtils.parseNodeId(value)], - [['vaultId'], () => vaultsUtils.decodeVaultId(value) ?? value], () => value, ); }, { nodeId: call.request.getNode()?.getNodeId(), - vaultId: call.request.getVault()?.getNameOrId(), }, ); - await db.withTransactionF(async (tran) => - vaultManager.cloneVault(nodeId, vaultId, tran), - ); + // Vault id + let vaultId; + const vaultNameOrId = call.request.getVault()?.getNameOrId(); + vaultId = vaultsUtils.decodeVaultId(vaultNameOrId); + vaultId = vaultId ?? vaultNameOrId; + await db.withTransactionF(async (tran) => { + await vaultManager.cloneVault(nodeId, vaultId, tran); + }); response.setSuccess(true); callback(null, response); return; diff --git a/src/client/service/vaultsPull.ts b/src/client/service/vaultsPull.ts index c2e4342f6..6f7d19106 100644 --- a/src/client/service/vaultsPull.ts +++ b/src/client/service/vaultsPull.ts @@ -34,6 +34,15 @@ function vaultsPull({ const response = new utilsPB.StatusMessage(); const metadata = await authenticate(call.metadata); call.sendMetadata(metadata); + let pullVaultId; + const pullVaultMessage = call.request.getPullVault(); + if (pullVaultMessage == null) { + pullVaultId = null; + } else { + pullVaultId = vaultsUtils.decodeVaultId(pullVaultMessage.getNameOrId()); + pullVaultId = pullVaultId ?? pullVaultMessage.getNameOrId(); + if (pullVaultId == null) pullVaultId = pullVaultMessage.getNameOrId(); + } await db.withTransactionF(async (tran) => { const vaultIdFromName = await vaultManager.getVaultId( call.request.getVault()?.getNameOrId() as VaultName, @@ -42,11 +51,9 @@ function vaultsPull({ const { vaultId, nodeId, - pullVaultId, }: { vaultId: VaultId; nodeId: NodeId | undefined; - pullVaultId: VaultId | VaultName | undefined; } = validateSync( (keyPath, value) => { return matchSync(keyPath)( @@ -58,17 +65,12 @@ function vaultsPull({ ['nodeId'], () => (value ? validationUtils.parseNodeId(value) : undefined), ], - [ - ['pullVaultId'], - () => vaultsUtils.decodeVaultId(value) ?? value, - ], () => value, ); }, { vaultId: call.request.getVault()?.getNameOrId(), nodeId: call.request.getNode()?.getNodeId(), - pullVaultId: call.request.getPullVault()?.getNameOrId(), }, ); await vaultManager.pullVault({ diff --git a/tests/bin/vaults/vaults.test.ts b/tests/bin/vaults/vaults.test.ts index 52b5f4e4c..a8e6fa3df 100644 --- a/tests/bin/vaults/vaults.test.ts +++ b/tests/bin/vaults/vaults.test.ts @@ -342,8 +342,8 @@ describe('CLI vaults', () => { targetNodeIdEncoded, ]; result = await testBinUtils.pkStdio([...command], {}, dataDir); - expect(result.exitCode).toBe(sysexits.USAGE); - expect(result.stderr).toContain('ErrorVaultsVaultUndefined'); + expect(result.exitCode).toBe(sysexits.DATAERR); + expect(result.stderr).toContain('ErrorValidation'); command = [ 'vaults', diff --git a/tests/vaults/VaultManager.test.ts b/tests/vaults/VaultManager.test.ts index e4ed618aa..c62824b1d 100644 --- a/tests/vaults/VaultManager.test.ts +++ b/tests/vaults/VaultManager.test.ts @@ -23,6 +23,7 @@ import KeyManager from '@/keys/KeyManager'; import PolykeyAgent from '@/PolykeyAgent'; import VaultManager from '@/vaults/VaultManager'; import * as vaultsErrors from '@/vaults/errors'; +import * as validationErrors from '@/validation/errors'; import NodeGraph from '@/nodes/NodeGraph'; import * as nodesUtils from '@/nodes/utils'; import Proxy from '@/network/Proxy'; @@ -743,7 +744,7 @@ describe('VaultManager', () => { remoteKeynode1Id, 'not-existing' as VaultName, ), - vaultsErrors.ErrorVaultsVaultUndefined, + validationErrors.ErrorValidation, ); } finally { await vaultManager?.stop();