Handle exceptions better

This commit is contained in:
2025-07-16 09:22:02 +02:00
parent f518723a0e
commit f8eac2b09c

View File

@ -17,7 +17,11 @@ from sshecret.backend import (
Operation,
SubSystem,
)
from sshecret.backend.exceptions import BackendError, BackendValidationError
from sshecret.backend.exceptions import (
BackendError,
BackendValidationError,
HttpErrorItem,
)
from sshecret.backend.identifiers import KeySpec
from sshecret.backend.models import (
ClientQueryResult,
@ -30,6 +34,7 @@ from sshecret.crypto import encrypt_string, load_public_key
from .secret_manager import (
AsyncSecretContext,
InvalidSecretNameError,
SecretUpdateParams,
password_manager_context,
)
@ -603,7 +608,7 @@ class AdminBackend:
client = await self.get_client(client_id)
if not client:
if update:
raise ClientNotFoundError()
raise ClientNotFoundError(f"Client {client_name} not found")
LOG.warning("Requested client %s not found!", client_name)
continue
public_key = load_public_key(client.public_key.encode())
@ -628,10 +633,17 @@ class AdminBackend:
group=group,
distinguisher=distinguisher,
)
except ClientManagementError:
raise
except InvalidSecretNameError as e:
field_error = self.create_field_error("name", str(e))
error = self.create_validation_error(field_error)
raise error from e
except ClientNotFoundError as e:
field_error = self.create_field_error("clients", str(e))
error = self.create_validation_error(field_error)
raise error from e
except Exception as e:
raise BackendUnavailableError() from e
raise ClientManagementError(e)
async def update_secret(self, name: str, value: str) -> None:
"""Update secrets."""
@ -748,3 +760,16 @@ class AdminBackend:
async def get_audit_log_count(self) -> int:
"""Get audit log count."""
return await self.audit.count()
def create_field_error(self, field: str, error_message: str) -> HttpErrorItem:
"""Create a field error."""
field_error: HttpErrorItem = {
"loc": ["body", field],
"msg": error_message,
"type": "None",
}
return field_error
def create_validation_error(self, *errors: HttpErrorItem) -> BackendValidationError:
"""Create a custom backend validation error."""
return BackendValidationError(errors=list(errors))