§
    †¶»jÖ  ã                  óº  — d Z ddlmZ ddlZddlZddlmZmZmZ ddl	m
Z
mZ  G d„ dej        ¦  «        Z G d„ d	ej        ¦  «        Z G d
„ dej        ¦  «        Z e
dd¬¦  «         G d„ d¦  «        ¦   «         Z e
d¬¦  «         G d„ d¦  «        ¦   «         Z e
dd¬¦  «         G d„ d¦  «        ¦   «         Z e
dd¬¦  «         G d„ d¦  «        ¦   «         Z e
dd¬¦  «         G d„ d¦  «        ¦   «         Z e
dd¬¦  «         G d„ d¦  «        ¦   «         Z e
dd¬¦  «         G d„ d¦  «        ¦   «         Z e
dd¬¦  «         G d„ d¦  «        ¦   «         ZdS )z†
Data models and DTOs for the FreeExile Account Management System.
Conforms to Python 3.11+ dataclasses with slots and strict typing.
é    )ÚannotationsN)ÚDictÚListÚOptional)Ú	dataclassÚfieldc                  ó"   — e Zd ZdZdZdZdZdZdS )ÚAccountStatusr   é   é   é   é   N)Ú__name__Ú
__module__Ú__qualname__ÚUNSPECIFIEDÚPENDING_ACTIVATIONÚACTIVEÚ	SUSPENDEDÚBANNED© ó    ú+C:\Projects\FreeExile\server\auth\models.pyr
   r
      s(   € € € € € Ø€KØÐØ€FØ€IØ€F€F€Fr   r
   c                  ó   — e Zd ZdZdZdZdZdS )ÚRoleÚplayerÚ	moderatorÚgmÚadminN)r   r   r   ÚPLAYERÚ	MODERATORÚGMÚADMINr   r   r   r   r      s"   € € € € € Ø€FØ€IØ	€BØ€E€E€Er   r   c                  ó   — e Zd ZdZdZdZdZdS )ÚOAuthProviderTyper   r   r   r   N)r   r   r   r   ÚGOOGLEÚAPPLEÚFACEBOOKr   r   r   r%   r%      s"   € € € € € Ø€KØ€FØ€EØ€H€H€Hr   r%   T)ÚslotsÚfrozenc                  ó^   — e Zd ZU dZded<   ded<   ded<    eej        ¬¦  «        Zded	<   d
S )ÚOAuthIdentityz External OAuth identity binding.r%   ÚproviderÚstrÚprovider_user_idÚemail©Údefault_factoryÚfloatÚ	linked_atN)r   r   r   Ú__doc__Ú__annotations__r   Útimer4   r   r   r   r,   r,   #   sY   € € € € € € à*Ð*ØÐÐÑØÐÐÑØ€J€J�JØ�u¨T¬YÐ7Ñ7Ô7€IÐ7Ð7Ð7Ñ7Ð7Ð7r   r,   )r)   c                  ó  — e Zd ZU dZded<   ded<   ded<   ded<   ej        Zded<    ed	„ ¬
¦  «        Z	ded<    ee
j
        ¬
¦  «        Zded<   dZded<   dZded<   dZded<    ee¬
¦  «        Zded<   ddd„Zdd„ZdS ) ÚAccountzCore game account entity.r.   Ú
account_idr0   ÚusernameÚpassword_hashr
   Ústatusc                 ó   — dgS )Nr   r   r   r   r   ú<lambda>zAccount.<lambda>4   s   € °h°Z€ r   r1   z	List[str]Úrolesr3   Ú
created_atNúOptional[float]Úlast_login_atr   ÚintÚfailed_login_attemptsÚlockout_untilz&Dict[OAuthProviderType, OAuthIdentity]Úoauth_identitiesÚcurrent_timeÚreturnÚboolc                óX   — | j         €dS |�|nt          j        ¦   «         }|| j         k     S )NF)rF   r7   )ÚselfrH   Únows      r   Ú	is_lockedzAccount.is_locked;   s2   € ØÔÐ%Ø�5Ø*Ð6ˆlˆl½D¼I¹K¼KˆØ�TÔ'Ò'Ð'r   c                ó,   — | j         t          j        k    S ©N)r=   r
   r   )rL   s    r   Ú	is_activezAccount.is_activeA   s   € ØŒ{�mÔ2Ò2Ð2r   rP   )rH   rB   rI   rJ   )rI   rJ   )r   r   r   r5   r6   r
   r   r=   r   r@   r7   rA   rC   rE   rF   ÚdictrG   rN   rQ   r   r   r   r9   r9   ,   s  € € € € € € à#Ð#Ø€O€O�OØ€J€J�JØ€M€M�MØÐÐÑØ)Ô<€FÐ<Ð<Ð<Ñ<Ø�uÐ-?Ð-?Ð@Ñ@Ô@€EÐ@Ð@Ð@Ñ@Ø˜¨d¬iÐ8Ñ8Ô8€JÐ8Ð8Ð8Ñ8Ø%)€MÐ)Ð)Ð)Ñ)Ø!"ÐÐ"Ð"Ð"Ñ"Ø%)€MÐ)Ð)Ð)Ñ)Ø?D¸uÐUYÐ?ZÑ?ZÔ?ZÐÐZÐZÐZÑZð(ð (ð (ð (ð (ð3ð 3ð 3ð 3ð 3ð 3r   r9   c                  óD   — e Zd ZU dZded<   ded<   dZded<   dZded	<   d
S )ÚAuthTokenPairz"JWT Access and Refresh token pair.r.   Úaccess_tokenÚrefresh_tokené„  rD   Úexpires_in_secondsÚBearerÚ
token_typeN)r   r   r   r5   r6   rX   rZ   r   r   r   rT   rT   E   sS   € € € € € € à,Ð,ØÐÐÑØÐÐÑØ!ÐÐ!Ð!Ð!Ñ!Ø€JÐÐÐÑÐÐr   rT   c                  óR   — e Zd ZU dZded<   ded<   dZded<   d	Zded
<   dZded<   dS )ÚAccountRegistrationResultz'Result of a quick registration attempt.rJ   Úsuccessr.   ÚmessageNúOptional[str]r:   TÚrequires_verificationrW   rD   Úcode_expires_in_seconds)r   r   r   r5   r6   r:   r`   ra   r   r   r   r\   r\   N   s_   € € € € € € à1Ð1Ø€M€M�MØ€L€L�LØ $€JÐ$Ð$Ð$Ñ$Ø"&ÐÐ&Ð&Ð&Ñ&Ø#&ÐÐ&Ð&Ð&Ñ&Ð&Ð&r   r\   c                  ó`   — e Zd ZU dZded<   ded<   dZded<   dZded	<   dZded
<   dZded<   dS )ÚEmailVerificationResultz&Result of an email activation attempt.rJ   r]   r.   r^   Nr_   r:   rU   rV   rW   rD   rX   )	r   r   r   r5   r6   r:   rU   rV   rX   r   r   r   rc   rc   X   so   € € € € € € à0Ð0Ø€M€M�MØ€L€L�LØ $€JÐ$Ð$Ð$Ñ$Ø"&€LÐ&Ð&Ð&Ñ&Ø#'€MÐ'Ð'Ð'Ñ'Ø!ÐÐ!Ð!Ð!Ñ!Ð!Ð!r   rc   c                  óŠ   — e Zd ZU dZded<   ded<   dZded<   dZded	<   dZded
<   dZded<   dZ	ded<   dZ
ded<   dZded<   dS )ÚLoginResultz#Result of an account login attempt.rJ   r]   r.   r^   Nr_   rU   rV   r:   r;   zOptional[AccountStatus]r=   FÚrequires_captchaÚremember_token)r   r   r   r5   r6   rU   rV   r:   r;   r=   rf   rg   r   r   r   re   re   c   s¢   € € € € € € à-Ð-Ø€M€M�MØ€L€L�LØ"&€LÐ&Ð&Ð&Ñ&Ø#'€MÐ'Ð'Ð'Ñ'Ø $€JÐ$Ð$Ð$Ñ$Ø"€HÐ"Ð"Ð"Ñ"Ø&*€FÐ*Ð*Ð*Ñ*Ø"ÐÐ"Ð"Ð"Ñ"Ø$(€NÐ(Ð(Ð(Ñ(Ð(Ð(r   re   c                  óR   — e Zd ZU dZded<   ded<   dZded<   dZded	<   d
Zded<   dS )ÚRefreshTokenResultz"Result of a token refresh attempt.rJ   r]   r.   r^   Nr_   rU   rV   rW   rD   rX   )r   r   r   r5   r6   rU   rV   rX   r   r   r   ri   ri   q   s^   € € € € € € à,Ð,Ø€M€M�MØ€L€L�LØ"&€LÐ&Ð&Ð&Ñ&Ø#'€MÐ'Ð'Ð'Ñ'Ø!ÐÐ!Ð!Ð!Ñ!Ð!Ð!r   ri   c                  ón   — e Zd ZU dZded<   ded<   dZded<   dZded	<   dZded
<   dZded<   dZ	ded<   dS )ÚOAuthLoginResultz*Result of an OAuth authentication attempt.rJ   r]   r.   r^   Nr_   rU   rV   r:   r;   FÚis_new_account)
r   r   r   r5   r6   rU   rV   r:   r;   rl   r   r   r   rk   rk   {   s   € € € € € € à4Ð4Ø€M€M�MØ€L€L�LØ"&€LÐ&Ð&Ð&Ñ&Ø#'€MÐ'Ð'Ð'Ñ'Ø $€JÐ$Ð$Ð$Ñ$Ø"€HÐ"Ð"Ð"Ñ"Ø €NÐ Ð Ð Ñ Ð Ð r   rk   )r5   Ú
__future__r   Úenumr7   Útypingr   r   r   Údataclassesr   r   ÚEnumr
   r   r%   r,   r9   rT   r\   rc   re   ri   rk   r   r   r   ú<module>rr      s  ððð ð
 #Ð "Ð "Ð "Ð "Ð "Ø €€€Ø €€€Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (ðð ð ð ð �D”Iñ ô ð ðð ð ð ð ˆ4Œ9ñ ô ð ðð ð ð ð ˜œ	ñ ô ð ð €�˜dÐ#Ñ#Ô#ð8ð 8ð 8ð 8ð 8ñ 8ô 8ñ $Ô#ð8ð €�ÐÑÔð3ð 3ð 3ð 3ð 3ñ 3ô 3ñ Ôð3ð0 €�˜dÐ#Ñ#Ô#ðð ð ð ð ñ ô ñ $Ô#ðð €�˜dÐ#Ñ#Ô#ð'ð 'ð 'ð 'ð 'ñ 'ô 'ñ $Ô#ð'ð €�˜dÐ#Ñ#Ô#ð"ð "ð "ð "ð "ñ "ô "ñ $Ô#ð"ð €�˜dÐ#Ñ#Ô#ð
)ð 
)ð 
)ð 
)ð 
)ñ 
)ô 
)ñ $Ô#ð
)ð €�˜dÐ#Ñ#Ô#ð"ð "ð "ð "ð "ñ "ô "ñ $Ô#ð"ð €�˜dÐ#Ñ#Ô#ð!ð !ð !ð !ð !ñ !ô !ñ $Ô#ð!ð !ð !r   