o
    Ci                     @   s   d dl mZ d dlmZmZmZ d dlZG dd dejZG dd dejZ	G dd	 d	ejZ
G d
d dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZdS )    )serializers)UserProfile
UserInvite
PermissionNc                   @   sL   e Zd Ze Ze Ze Ze Z	dd Z
dd Zdd Zdd Zd	S )
RegisterSerializerc                 C   s6   t |dkrtdtjj|d rtd|S )N   z(Username allows up to 30 characters only)usernamezUsername already exists)lenr   ValidationErrorr   objectsfilterexistsselfvalue r   1/var/www/Datamplify/authentication/serializers.pyvalidate_username   s
   

z$RegisterSerializer.validate_usernamec                 C   s    t jj|d rtd|S )N)email__iexactzEmail already exists)r   r   r   r   r   r
   r   r   r   r   validate_email   s   
z!RegisterSerializer.validate_emailc                 C   s   d}t ||std|S )Nz7^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^A-Za-z0-9]).{8,}$zPassword is invalid. Min 8 characters. Must include: one lowercase letter, one uppercase letter, one digit, and one special character.)rematchr   r
   )r   r   patternr   r   r   validate_password   s   z$RegisterSerializer.validate_passwordc                 C   s"   |d |d krt ddi|S )Npasswordconfirm_passwordzPassword did not match.)r   r
   )r   datar   r   r   validate!   s   zRegisterSerializer.validateN)__name__
__module____qualname__r   	CharFieldr   
EmailFieldemailr   r   r   r   r   r   r   r   r   r   r      s    	r   c                   @      e Zd Ze ZdS )ActivationSerializerN)r   r   r    r   IntegerFieldotpr   r   r   r   r%   '       r%   c                   @   s   e Zd Ze Ze ZdS )LoginSerializerN)r   r   r    r   r!   r#   r   r   r   r   r   r)   +   s    r)   c                   @   r$   )ForgetPasswordSerializerN)r   r   r    r   r"   r#   r   r   r   r   r*   /   r(   r*   c                   @   s$   e Zd ZejddZejddZdS )ConfirmPasswordSerializer   )
max_lengthN)r   r   r    r   r!   r   confirmPasswordr   r   r   r   r+   3   s    r+   c                   @   s*   e Zd Ze Ze ZG dd dZdS )UserInviteSerializerc                   @      e Zd ZeZg dZdS )zUserInviteSerializer.Meta)r#   rolemessager   generate_linkNr   r   r    r   modelfieldsr   r   r   r   Meta;       r7   N)	r   r   r    r   r!   r   BooleanFieldr3   r7   r   r   r   r   r/   8   s    r/   c                   @   s   e Zd ZejdddZejdddZejdddZej	dddZ
e Ze Ze Ze Ze ZG dd dZd	d
 Zdd Zdd Zdd Zdd ZdS )InvitedUserStatusSerializerz	role.nameT)source	read_onlyzrole.idzinvited_by.usernamezinvited_by.idc                   @   r0   )z InvitedUserStatusSerializer.Meta)idr#   r1   role_id
invited_byinvited_user_idpresent_user_idpresent_user_namestatusis_used
expires_at
created_atpermissionsuser_last_loginNr4   r   r   r   r   r7   J   r8   r7   c                 C   ,   | j di }||j}|rt|jS d S Nuser_map)contextgetr#   strr=   r   objrK   userr   r   r   get_present_user_idR      z/InvitedUserStatusSerializer.get_present_user_idc                 C   rI   rJ   )rL   rM   r#   rN   
last_loginrO   r   r   r   get_user_last_loginV   rS   z/InvitedUserStatusSerializer.get_user_last_loginc                 C   s(   | j di }||j}|r|jS d S rJ   )rL   rM   r#   r   rO   r   r   r   get_present_user_name[   s   z1InvitedUserStatusSerializer.get_present_user_namec                 C   sH   ddl m} | jdi }|j|v }|rdS |jr"|j| k r"dS dS )Nr   )timezonerK   ActiveExpiredPending)django.utilsrW   rL   rM   r#   rE   now)r   rP   rW   rK   user_existsr   r   r   
get_status`   s   
z&InvitedUserStatusSerializer.get_statusc                 C   sT   ddl m} | jdi }||j}|sg S |jjj|d j	ddd}t
|S )Nr   )modelsrK   )roles__usersr=   T)flat)authenticationr_   rL   rM   r#   r   r   r   distinctvalues_listlist)r   rP   auth_modelsrK   rQ   permissions_qsr   r   r   get_permissionsl   s   z+InvitedUserStatusSerializer.get_permissionsN)r   r   r    r   r!   r1   r&   r>   r?   	UUIDFieldr@   SerializerMethodFieldrA   rB   rC   rG   rH   r7   rR   rU   rV   r^   rh   r   r   r   r   r:   @   s     r:   c                   @   s    e Zd Ze ZejddZdS )UserEditSerializerF)requiredN)r   r   r    r   ri   user_idr&   r>   r   r   r   r   rk   ~   s    rk   c                   @   r$   )UserDeleteSerializerN)r   r   r    r   ri   rm   r   r   r   r   rn      r(   rn   c                   @   s   e Zd ZG dd dZdS )previlage_serializerc                   @   r0   )zprevilage_serializer.Meta)r=   namemoduleN)r   r   r    r   r5   r6   r   r   r   r   r7      r8   r7   N)r   r   r    r7   r   r   r   r   ro      s    ro   )rest_frameworkr   authentication.modelsr   r   r   r   
Serializerr   r%   r)   r*   r+   ModelSerializerr/   r:   rk   rn   ro   r   r   r   r   <module>   s    ">