fix(users): harden google oauth account resolution
This commit is contained in:
@@ -15,6 +15,26 @@ from rest_framework.views import exception_handler as drf_exception_handler
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def _extract_code(value: Any) -> str | None:
|
||||
if isinstance(value, ErrorDetail):
|
||||
return str(value.code) if getattr(value, "code", None) else None
|
||||
if isinstance(value, list | tuple):
|
||||
for item in value:
|
||||
code = _extract_code(item)
|
||||
if code:
|
||||
return code
|
||||
return None
|
||||
if isinstance(value, dict):
|
||||
for item in value.values():
|
||||
code = _extract_code(item)
|
||||
if code:
|
||||
return code
|
||||
return None
|
||||
if isinstance(value, str):
|
||||
return None
|
||||
return getattr(value, "code", None)
|
||||
|
||||
|
||||
def _flatten_messages(values: Iterable) -> list[str]:
|
||||
items: list[str] = []
|
||||
for value in values:
|
||||
@@ -107,6 +127,13 @@ def exception_handler(exc, context) -> Response:
|
||||
else None,
|
||||
}
|
||||
)
|
||||
else:
|
||||
code = _extract_code(detail)
|
||||
if code:
|
||||
payload["code"] = code
|
||||
extra_payload = getattr(exc, "payload_extra", None)
|
||||
if isinstance(extra_payload, dict):
|
||||
payload.update(extra_payload)
|
||||
formatted_response = Response(payload, status=status_code)
|
||||
for header, value in response.headers.items():
|
||||
formatted_response[header] = value
|
||||
|
||||
Reference in New Issue
Block a user