Google 계정 데이터 별칭 복구를 추가
This commit is contained in:
parent
15f609368c
commit
dba9b75a38
9 changed files with 642 additions and 30 deletions
|
|
@ -29,6 +29,7 @@ from ..auth_types import AccountStatus, RoleName
|
|||
from ..auth_sessions import (
|
||||
ManagedUser,
|
||||
get_managed_user,
|
||||
get_managed_user_by_auth_alias,
|
||||
get_managed_user_by_email,
|
||||
has_admin_access,
|
||||
InactiveUserError,
|
||||
|
|
@ -705,7 +706,10 @@ async def _me_response(user: SessionUser | Principal) -> MeResponse:
|
|||
)
|
||||
email = getattr(user, "email", "")
|
||||
role = user.role.value if isinstance(user.role, Role) else user.role
|
||||
stored_admin_access = managed.admin_access if managed else getattr(user, "admin_access", False)
|
||||
stored_admin_access = (
|
||||
managed.admin_access if managed else getattr(user, "admin_access", False)
|
||||
)
|
||||
entitlement_email = managed.email if managed else email
|
||||
return MeResponse(
|
||||
user_id=user.user_id,
|
||||
email=email,
|
||||
|
|
@ -715,8 +719,8 @@ async def _me_response(user: SessionUser | Principal) -> MeResponse:
|
|||
or email
|
||||
),
|
||||
role=role,
|
||||
admin_access=has_admin_access(email, role, stored_admin_access),
|
||||
super_admin=is_super_admin_email(email),
|
||||
admin_access=has_admin_access(entitlement_email, role, stored_admin_access),
|
||||
super_admin=is_super_admin_email(entitlement_email),
|
||||
account_status=account_status,
|
||||
approval_required=account_status != "approved",
|
||||
cohort_ids=user.cohort_ids,
|
||||
|
|
@ -970,7 +974,17 @@ async def callback(
|
|||
email_domain=_email_domain(str(claims.get("email") or "")),
|
||||
)
|
||||
return _oauth_callback_error("id_token_invalid", request)
|
||||
managed_user = await get_managed_user_by_email(email)
|
||||
external_id = _provider_external_id("google", str(claims.get("sub") or ""), email)
|
||||
try:
|
||||
aliased_user = await get_managed_user_by_auth_alias(external_id)
|
||||
except InactiveUserError:
|
||||
_log_oauth_callback_failure(
|
||||
request,
|
||||
"inactive_user",
|
||||
email_domain=_email_domain(email),
|
||||
)
|
||||
return _oauth_callback_error("inactive_user", request)
|
||||
managed_user = aliased_user or await get_managed_user_by_email(email)
|
||||
role = _role_for_managed_user(managed_user, _role_for_email(email))
|
||||
display_name = str(claims.get("name") or email)
|
||||
cohort_ids = _cohort_ids_for_managed_user(
|
||||
|
|
@ -980,16 +994,26 @@ async def callback(
|
|||
hosted_domain=str(claims.get("hd") or ""),
|
||||
),
|
||||
)
|
||||
external_id = _provider_external_id("google", str(claims.get("sub") or ""), email)
|
||||
try:
|
||||
sid, _ = await create_session(
|
||||
email=email,
|
||||
display_name=display_name,
|
||||
role=role.value,
|
||||
cohort_ids=cohort_ids,
|
||||
external_id=external_id,
|
||||
account_status="approved",
|
||||
)
|
||||
if aliased_user is not None:
|
||||
sid, _ = await create_session(
|
||||
email=email,
|
||||
display_name=display_name,
|
||||
role=role.value,
|
||||
cohort_ids=cohort_ids,
|
||||
external_id=external_id,
|
||||
account_status="approved",
|
||||
managed_user=aliased_user,
|
||||
)
|
||||
else:
|
||||
sid, _ = await create_session(
|
||||
email=email,
|
||||
display_name=display_name,
|
||||
role=role.value,
|
||||
cohort_ids=cohort_ids,
|
||||
external_id=external_id,
|
||||
account_status="approved",
|
||||
)
|
||||
except InactiveUserError:
|
||||
_log_oauth_callback_failure(
|
||||
request,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue