fix(users): harden google oauth account resolution

This commit is contained in:
2026-05-14 21:17:37 +03:30
parent 09d2015351
commit cacf6114d1
2 changed files with 228 additions and 53 deletions

View File

@@ -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