Skip to content

Commit 82d0f94

Browse files
committed
fix: respect ODEV_NO_SSH_AGENT and handle decryption failure gracefully
1 parent 8c43e18 commit 82d0f94

1 file changed

Lines changed: 14 additions & 3 deletions

File tree

odev/common/store/tables/secrets.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import os
12
from base64 import b64decode, b64encode
23
from collections.abc import Sequence
34
from dataclasses import dataclass
@@ -69,9 +70,13 @@ class SecretStore(PostgresTable):
6970
@classmethod
7071
def _list_ssh_keys(cls) -> list[AgentKey]:
7172
"""List all SSH keys available in the ssh-agent."""
72-
keys = list(SSHAgent().get_keys())
73+
try:
74+
keys = list(SSHAgent().get_keys())
75+
except (SSHException, ConnectionError) as e:
76+
logger.warning(f"Failed to communicate with ssh-agent: {e}")
77+
keys = []
7378

74-
if not keys:
79+
if not keys and not os.environ.get("ODEV_NO_SSH_AGENT"):
7580
raise OdevError("No SSH keys found in ssh-agent, or ssh-agent is not running.")
7681

7782
fingerprint = cls.config.security.encryption_key
@@ -266,7 +271,13 @@ def _get(
266271
return None
267272

268273
logger.debug(f"Secret '{name}:{scope}:{platform}' retrieved from storage")
269-
return Secret(name, result[0][0], SecretStore.decrypt(result[0][1]), scope, platform)
274+
try:
275+
password = SecretStore.decrypt(result[0][1])
276+
except OdevError:
277+
logger.debug(f"Failed to decrypt secret '{name}:{scope}:{platform}', treating as missing")
278+
return None
279+
280+
return Secret(name, result[0][0], password, scope, platform)
270281

271282
def _set(self, secret: Secret):
272283
"""Save a secret to the vault.

0 commit comments

Comments
 (0)