B
    b                 @   s   d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZmZ d dlmZ e ZejZejZejZejZG d	d
 d
eZG dd deZdS )    )AuthTokenSerializer)JSONWebTokenSerializer)PasswordField)api_settings)serializers)gettext_lazy)authenticateget_user_model)cachec               @   s8   e Zd ZdZejeddZejeddZdd Z	dS )AuthTokenCompanySerializerNZEmail)labelCompanyc             C   s  ddl m} ddlm} |d}|d}|d}|r|r|rt| jd||d}|srtd	}tj	|d
d|j
j|d }	|	std}tj	|d
d|j
j||	d}
|
 std}tj	|d
d|	j|_|  dt|j }t||	j ntd}tj	|d
d||d< |S )Nr   )r   )
Membershipemailpasswordcompanyrequest)r   usernamer   z+Unable to log in with provided credentials.Zauthorization)code)name__iexactz'Unable to log in with provided company.)userr   zapi_user_company_%sz2Must include "email" and "password" and "company".r   )mysite.cloud.modelsr   mysite.base.modelsr   getr   context_r   ValidationErrorobjectsfilterfirstexistsidcurrent_companysavestrr
   set)selfattrsr   r   r   r   r   r   msgcompany_objmembership_objk r,   8G:\easytimepro\master/mysite/api\authtoken_serializer.pyvalidate   s6    



z#AuthTokenCompanySerializer.validate)
__name__
__module____qualname__r   r   	CharFieldr   r   r   r.   r,   r,   r,   r-   r      s   r   c                   s(   e Zd ZdZ fddZdd Z  ZS )JSONWebTokenCompanySerializerz
    Serializer class used to validate a username and password.

    'username' is identified by the custom UserModel.USERNAME_FIELD.

    Returns a JSON Web Token that can be used to authenticate later calls.
    c                sB   t t| j|| t | jd< t | jd< tdd| jd< dS )zD
        Dynamically add the USERNAME_FIELD to self.fields.
        r   r   T)Z
write_onlyr   N)superr   __init__r   r2   Zfieldsr   )r&   argskwargs)	__class__r,   r-   r5   K   s    z&JSONWebTokenCompanySerializer.__init__c             C   s<  ddl m} ddlm} |d|d|dd}t| rtf |}|d }|r|jstt	d}t
||jj|d	 }|st	d
}t
||jj||d}	|	 st	d
}t
||j|_|  d|j }
t|
|j t|}t||dS t	d}t
|n t	d}|j| jd}t
|d S )Nr   )r   )r   r   r   r   )r   r   r   zUser account is disabled.)r   z'Unable to log in with provided company.)r   r   zapi_user_company_%s)tokenr   z+Unable to log in with provided credentials.z2Must include "email" and "password" and "company".)username_field)r   r   r   r   r   allvaluesr   Z	is_activer   r   r   r   r   r   r    r!   r"   r#   r
   r%   jwt_payload_handlerjwt_encode_handlerformatr:   )r&   r'   r   r   Zcredentialsr   r   r(   r)   r*   r+   Zpayloadr,   r,   r-   r.   U   s@    




z&JSONWebTokenCompanySerializer.validate)r/   r0   r1   __doc__r5   r.   __classcell__r,   r,   )r8   r-   r3   C   s   
r3   N)Z$rest_framework.authtoken.serializersr   Zrest_framework_jwt.serializersr   Zrest_framework_jwt.compatr   Zrest_framework_jwt.settingsr   Zrest_frameworkr   Zdjango.utils.translationr   r   Zdjango.contrib.authr   r	   Zdjango.core.cacher
   ZUserZJWT_PAYLOAD_HANDLERr=   ZJWT_ENCODE_HANDLERr>   ZJWT_DECODE_HANDLERZjwt_decode_handlerZ JWT_PAYLOAD_GET_USERNAME_HANDLERZjwt_get_username_from_payloadr   r3   r,   r,   r,   r-   <module>   s   1