Ë
    
.Úiá  ã                   óœ   — d dl mZmZ d dlmZ d dlmZ  e«       Zdedede	fd„Z
d„ Zd	„ Z G d
„ de«      Z G d„ de«      Z G d„ de«      Zy)é    )ÚauthenticateÚget_user_model)Úserializers)ÚTokenObtainPairSerializerÚ
identifierÚpasswordÚcontextc                 ó  — t        |j                  d«      | |¬«      }|€J	 t        j                  j                  | ¬«      }|�'t        |j                  d«      |j
                  |¬«      }|S # t        j                  $ r d}Y ŒBw xY w)uƒ   
    RÃ©sout un utilisateur depuis son username ou email + password.
    Retourne l'objet User authentifiÃ© et actif, ou None.
    Úrequest)r   Úusernamer   N)Úemail__iexact)r   ÚgetÚUserÚobjectsÚDoesNotExistr   )r   r   r	   ÚuserÚus        ú-/var/www/html/acx/accounts/jwt_serializers.pyÚ_authenticate_userr   	   s�   € ô Ø—‘˜IÓ&ØØô€Dð €|ð	Ü—‘× Ñ ¨zÐ Ó:ˆAð ˆ=ÜØŸ™ IÓ.ØŸ™Ø!ôˆDð
 €Køô × Ñ ò 	ØŠAð	ús   ¡ A, Á,BÂBc                 ó    — | j                   ry| j                  j                  d¬«      j                  «       }|st	        j
                  d«      ‚y)u­   
    LÃ¨ve une ValidationError si l'utilisateur n'a pas accÃ¨s Ã  l'interface tenant.
    RÃ¨gle : Ãªtre superuser OU avoir au moins un Membership actif dans un tenant.
    NÚactive)Ústatusuh   Ce compte n'a pas accÃ¨s Ã  l'interface agent. Veuillez utiliser la page de connexion du portail client.)Úis_superuserÚmembershipsÚfilterÚexistsr   ÚValidationError)r   Úhas_memberships     r   Ú_check_tenant_accessr   #   sS   € ð
 ×ÒØØ×%Ñ%×,Ñ,°HÐ,Ó=×DÑDÓF€NÙÜ×)Ñ)ðHó
ð 	
ð ó    c                 óŠ  — | j                   s| j                  rt        j                  d«      ‚ddlm} |j                  j                  | |j                  j                  ¬«      j                  d«      j                  «       }|€t        j                  d«      ‚|j                  j                  st        j                  d«      ‚y)	uµ   
    LÃ¨ve une ValidationError si l'utilisateur n'a pas accÃ¨s au portail client.
    RÃ¨gle : NI superuser NI staff, ET avoir un CustomerMembership actif avec portail activÃ©.
    uy   Les comptes administrateurs ne peuvent pas accÃ©der au portail client. Veuillez utiliser la page de connexion principale.r   )ÚCustomerMembership)r   r   ÚcustomerNuK   Ce compte n'a pas accÃ¨s au portail client. Contactez votre administrateur.u\   Le portail client n'est pas activÃ© pour votre organisation. Contactez votre administrateur.)r   Úis_staffr   r   Úcustomers.modelsr"   r   r   ÚStatusÚACTIVEÚselect_relatedÚfirstr#   Úportal_enabled)r   r"   Úcms      r   Ú_check_portal_accessr,   2   s¶   € ð
 ×Ò˜DŸMšMÜ×)Ñ)ðAó
ð 	
õ
 4à×"Ñ"ß	‰�TÐ"4×";Ñ";×"BÑ"BˆÓ	Cß	‰˜
Ó	#ß	‰‹ð	 ð 
€zÜ×)Ñ)ð.ó
ð 	
ð
 �;‰;×%Ò%Ü×)Ñ)ð.ó
ð 	
ð &r    c                   ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )ÚTenantTokenObtainPairSerializerzŸ
    Login pour agents et admins tenant.
    Accepte username (ou email dans le champ username) + password.
    Bloque les utilisateurs portail-seulement.
    c                 ó„  •— |j                  | j                  «      xs dj                  «       }|j                  dd«      }|r|st        j                  d«      ‚t        ||| j                  «      }|€t        j                  d«      ‚t        |«       || _        |j                  || j                  <   t        ‰| �-  |«      S )NÚ r   ú#Identifiant et mot de passe requis.õ1   Aucun compte actif trouvÃ© avec ces identifiants.)r   Úusername_fieldÚstripr   r   r   r	   r   r   r   ÚsuperÚvalidate©ÚselfÚattrsr   r   r   Ú	__class__s        €r   r6   z(TenantTokenObtainPairSerializer.validate^   s®   ø€ Ø—i‘i × 3Ñ 3Ó4Ò:¸×AÑAÓCˆ
Ø—9‘9˜Z¨Ó,ˆá¡Ü×-Ñ-Ð.SÓTÐTä! *¨h¸¿¹ÓEˆàˆ<Ü×-Ñ-ØCóð ô 	˜TÔ"àˆŒ	à%)§]¡]ˆˆd×!Ñ!Ñ"Ü‰wÑ Ó&Ð&r    )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r6   Ú__classcell__©r:   s   @r   r.   r.   W   s   ø„ ñ÷'ð 'r    r.   c                   óD   ‡ — e Zd ZdZ ej
                  «       Zˆ fd„Zˆ xZS )Ú(EmailOrUsernameTokenObtainPairSerializeru‹   
    Variante : accepte `identifier` (email ou username) Ã  la place de username.
    Bloque aussi les utilisateurs portail-seulement.
    c                 óX  •— |j                  d«      xs dj                  «       }|j                  dd«      }|r|st        j                  d«      ‚t	        ||| j
                  «      }|€t        j                  d«      ‚t        |«       || _        t        ‰| �%  |j                  |dœ«      S )Nr   r0   r   zidentifier et password requis.r2   )r   r   )r   r4   r   r   r   r	   r   r   r5   r6   r   r7   s        €r   r6   z1EmailOrUsernameTokenObtainPairSerializer.validate€   s�   ø€ Ø—i‘i Ó-Ò3°×:Ñ:Ó<ˆ
Ø—9‘9˜Z¨Ó,ˆá¡Ü×-Ñ-Ð.NÓOÐOä! *¨h¸¿¹ÓEˆàˆ<Ü×-Ñ-ØCóð ô 	˜TÔ"àˆŒ	Ü‰wÑ¨T¯]©]ÈÑ QÓRÐRr    )	r;   r<   r=   r>   r   Ú	CharFieldr   r6   r?   r@   s   @r   rB   rB   y   s&   ø„ ñð '�×&Ñ&Ó(€J÷Sð Sr    rB   c                   ó6   ‡ — e Zd ZdZeˆ fd„«       Zˆ fd„Zˆ xZS )Ú'CustomerPortalTokenObtainPairSerializeruä   
    Login exclusif pour le portail client.
    Accepte username ou email.
    Bloque les superadmins, staff, et agents sans CustomerMembership actif.
    Inclut must_change_password dans les claims JWT et dans la rÃ©ponse.
    c                 óX   •— t         ‰| �  |«      }t        t        |dd«      «      |d<   |S )NÚmust_change_passwordF)r5   Ú	get_tokenÚboolÚgetattr)Úclsr   Útokenr:   s      €r   rI   z1CustomerPortalTokenObtainPairSerializer.get_token¡   s2   ø€ ä‘Ñ! $Ó'ˆÜ(,¬W°TÐ;QÐSXÓ-YÓ(ZˆÐ$Ñ%Øˆr    c                 óº  •— |j                  | j                  «      xs dj                  «       }|j                  dd«      }|r|st        j                  d«      ‚t        ||| j                  «      }|€t        j                  d«      ‚t        |«       || _        |j                  || j                  <   t        ‰| �-  |«      }t        t        |dd«      «      |d<   |S )Nr0   r   r1   r2   rH   F)r   r3   r4   r   r   r   r	   r,   r   r   r5   r6   rJ   rK   )r8   r9   r   r   r   Údatar:   s         €r   r6   z0CustomerPortalTokenObtainPairSerializer.validate§   sÍ   ø€ Ø—i‘i × 3Ñ 3Ó4Ò:¸×AÑAÓCˆ
Ø—9‘9˜Z¨Ó,ˆá¡Ü×-Ñ-Ð.SÓTÐTä! *¨h¸¿¹ÓEˆàˆ<Ü×-Ñ-ØCóð ô 	˜TÔ"àˆŒ	Ø%)§]¡]ˆˆd×!Ñ!Ñ"Ü‰wÑ Ó&ˆä'+¬G°DÐ:PÐRWÓ,XÓ'YˆÐ#Ñ$Øˆr    )r;   r<   r=   r>   ÚclassmethodrI   r6   r?   r@   s   @r   rF   rF   ™   s&   ø„ ñð óó ð÷
ð r    rF   N)Údjango.contrib.authr   r   Úrest_frameworkr   Ú$rest_framework_simplejwt.serializersr   r   ÚstrÚdictr   r   r,   r.   rB   rF   © r    r   ú<module>rW      sf   ðç <Ý &Ý JáÓ€ð 3ð °#ð Àó ò4
ò
ôJ'Ð&?ô 'ôDSÐ/Hô Sô@#Ð.Gõ #r    