Handle exceptions better
This commit is contained in:
@ -17,7 +17,11 @@ from sshecret.backend import (
|
|||||||
Operation,
|
Operation,
|
||||||
SubSystem,
|
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.identifiers import KeySpec
|
||||||
from sshecret.backend.models import (
|
from sshecret.backend.models import (
|
||||||
ClientQueryResult,
|
ClientQueryResult,
|
||||||
@ -30,6 +34,7 @@ from sshecret.crypto import encrypt_string, load_public_key
|
|||||||
|
|
||||||
from .secret_manager import (
|
from .secret_manager import (
|
||||||
AsyncSecretContext,
|
AsyncSecretContext,
|
||||||
|
InvalidSecretNameError,
|
||||||
SecretUpdateParams,
|
SecretUpdateParams,
|
||||||
password_manager_context,
|
password_manager_context,
|
||||||
)
|
)
|
||||||
@ -603,7 +608,7 @@ class AdminBackend:
|
|||||||
client = await self.get_client(client_id)
|
client = await self.get_client(client_id)
|
||||||
if not client:
|
if not client:
|
||||||
if update:
|
if update:
|
||||||
raise ClientNotFoundError()
|
raise ClientNotFoundError(f"Client {client_name} not found")
|
||||||
LOG.warning("Requested client %s not found!", client_name)
|
LOG.warning("Requested client %s not found!", client_name)
|
||||||
continue
|
continue
|
||||||
public_key = load_public_key(client.public_key.encode())
|
public_key = load_public_key(client.public_key.encode())
|
||||||
@ -628,10 +633,17 @@ class AdminBackend:
|
|||||||
group=group,
|
group=group,
|
||||||
distinguisher=distinguisher,
|
distinguisher=distinguisher,
|
||||||
)
|
)
|
||||||
except ClientManagementError:
|
except InvalidSecretNameError as e:
|
||||||
raise
|
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:
|
except Exception as e:
|
||||||
raise BackendUnavailableError() from e
|
raise ClientManagementError(e)
|
||||||
|
|
||||||
async def update_secret(self, name: str, value: str) -> None:
|
async def update_secret(self, name: str, value: str) -> None:
|
||||||
"""Update secrets."""
|
"""Update secrets."""
|
||||||
@ -748,3 +760,16 @@ class AdminBackend:
|
|||||||
async def get_audit_log_count(self) -> int:
|
async def get_audit_log_count(self) -> int:
|
||||||
"""Get audit log count."""
|
"""Get audit log count."""
|
||||||
return await self.audit.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))
|
||||||
|
|||||||
Reference in New Issue
Block a user