fix: Correct URL handling and improve key retrieval logic in HTTP vault

This commit is contained in:
Andy
2025-07-31 15:45:12 +00:00
parent 46c28fe943
commit 8c798b95c4

View File

@@ -30,7 +30,7 @@ class HTTP(Vault):
api_mode: "query" for query parameters or "json" for JSON API api_mode: "query" for query parameters or "json" for JSON API
""" """
super().__init__(name) super().__init__(name)
self.url = host.rstrip("/") self.url = host
self.password = password self.password = password
self.username = username self.username = username
self.api_mode = api_mode.lower() self.api_mode = api_mode.lower()
@@ -88,21 +88,23 @@ class HTTP(Vault):
if self.api_mode == "json": if self.api_mode == "json":
try: try:
title = getattr(self, "current_title", None) params = {
response = self.request(
"GetKey",
{
"kid": kid, "kid": kid,
"service": service.lower(), "service": service.lower(),
"title": title, }
},
) response = self.request("GetKey", params)
if response.get("status") == "not_found": if response.get("status") == "not_found":
return None return None
keys = response.get("keys", []) keys = response.get("keys", [])
for key_entry in keys: for key_entry in keys:
if key_entry["kid"] == kid: if isinstance(key_entry, str) and ":" in key_entry:
return key_entry["key"] entry_kid, entry_key = key_entry.split(":", 1)
if entry_kid == kid:
return entry_key
elif isinstance(key_entry, dict):
if key_entry.get("kid") == kid:
return key_entry.get("key")
except Exception as e: except Exception as e:
print(f"Failed to get key ({e.__class__.__name__}: {e})") print(f"Failed to get key ({e.__class__.__name__}: {e})")
return None return None