Wraps another adapter and names the single underlying secret key where the Base64 payload is stored.
get(key: str, default: Any = None) -> str | Any | None
Returns the decoded value for key from the Base64 .env payload; falls back to default if missing.
set(key: str, value: str) -> None
Updates/creates key in the decoded map, re-encodes the full .env content to Base64, and writes it back to secret_adapter under base64_secret_key.
remove(key: str) -> None
Removes key (if present), re-encodes, and writes back to secret_adapter under base64_secret_key.
list() -> Dict[str, str | None]
Returns all decoded secrets as a dict.
Configuration/Dependencies
Depends on:
naas_abi_core.services.secret.SecretPorts.ISecretAdapter (the wrapped adapter providing actual persistence)
python-dotenv (dotenv_values) for parsing .env formatted content
Python stdlib: base64, io.StringIO
Usage
from naas_abi_core.services.secret.adaptors.secondary.Base64Secret import Base64Secretfrom naas_abi_core.services.secret.SecretPorts import ISecretAdapter# Minimal in-memory adapter for demonstrationclass MemorySecretAdapter(ISecretAdapter): def __init__(self): self._store = {} def get(self, key, default=None): return self._store.get(key, default) def set(self, key, value): self._store[key] = value def remove(self, key): self._store.pop(key, None) def list(self): return dict(self._store)backend = MemorySecretAdapter()# All secrets are stored inside backend under a single key "ENV_B64"secrets = Base64Secret(backend, base64_secret_key="ENV_B64")secrets.set("API_KEY", "abc123")print(secrets.get("API_KEY")) # "abc123"print(secrets.list()) # {"API_KEY": "abc123"}secrets.remove("API_KEY")print(secrets.get("API_KEY", None)) # None
Caveats
If the underlying stored value for base64_secret_key is not valid Base64 or does not decode as UTF-8, decoding will raise an exception (not handled in this class).
Values are always written as strings in .env format: KEY="value".
When the underlying Base64 secret is empty (""), list() returns {} and get() returns the provided default.