B
    Ob                 @   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
mZ d dl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jZG d
d dejZG dd deZdS )    )get_user_model)gettext_lazy)serializers)api_settings)get_username_fieldPasswordField)Employee)Companyc               @   sL   e Zd ZejeddZejedddiddZejeddZd	d
 Z	dS )AuthTokenCompanySerializerZUsername)labelZPasswordZ
input_typepasswordF)r   ZstyleZtrim_whitespacer	   c       	      C   s   | d}| d}| d}|r|r|ryVtjj|d }|sXtd}tj|ddtjj ||j	d}|
|rz|}nd }W n tk
r   d }Y nX |std	}tj|ddntd
}tj|dd||d< |S )Nusernamer   company)name__iexactz'Unable to log in with provided company.Zauthorization)code)emp_code
company_idz+Unable to log in with provided credentials.z5Must include "username" and "password" and "company".user)getr	   objectsfilterfirst_r   ValidationErrorr   idcheck_password	Exception)	selfattrsr   r   r   company_objmsgempr    r"   YG:\easytimepro\master/mysite/staff\api\serializers\staff_auth_company_token_serializer.pyvalidate   s,    




z#AuthTokenCompanySerializer.validateN)
__name__
__module____qualname__r   	CharFieldr   r   r   r   r$   r"   r"   r"   r#   r
      s   r
   c               @   s   e Zd Zedd ZdS )
Serializerc             C   s   | j S )N)Zvalidated_data)r   r"   r"   r#   objectC   s    zSerializer.objectN)r%   r&   r'   propertyr*   r"   r"   r"   r#   r)   B   s   r)   c                   s4   e Zd ZdZ fddZe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                sD   t t| j|| t | jd< t | j| j< tdd| jd< dS )zD
        Dynamically add the USERNAME_FIELD to self.fields.
        r   T)Z
write_onlyr   N)superr,   __init__r   r(   Zfieldsusername_fieldr   )r   argskwargs)	__class__r"   r#   r.   Q   s    z&JSONWebTokenCompanySerializer.__init__c             C   s   t  S )N)r   )r   r"   r"   r#   r/   [   s    z,JSONWebTokenCompanySerializer.username_fieldc       	      C   s  | j || j d|dd|di}t| r|d }tjj|d }|sbtd}t	
|y8tjj|| j |jd}||dr|}nd }W n tk
r   d }Y nX |r|jstd}t	
|t|}t||dS td}t	
|n td	}|j| j d
}t	
|d S )Nr   r   )r   z'Unable to log in with provided company.)r   r   zUser account is disabled.)tokenr   z+Unable to log in with provided credentials.z=Must include "{username_field}" and "password" and "company".)r/   )r/   r   allvaluesr	   r   r   r   r   r   r   r   r   r   r   Z	is_activejwt_payload_handlerjwt_encode_handlerformat)	r   r   Zcredentialsr   r   r    r!   r   Zpayloadr"   r"   r#   r$   _   s8    



z&JSONWebTokenCompanySerializer.validate)	r%   r&   r'   __doc__r.   r+   r/   r$   __classcell__r"   r"   )r2   r#   r,   H   s   
r,   N)Zdjango.contrib.authr   Zdjango.utils.translationr   r   Zrest_frameworkr   Zrest_framework_jwt.settingsr   Zrest_framework_jwt.compatr   r   Z&mysite.personnel.models.model_employeer   Zmysite.cloud.modelsr	   ZUserZJWT_PAYLOAD_HANDLERr6   ZJWT_ENCODE_HANDLERr7   ZJWT_DECODE_HANDLERZjwt_decode_handlerZ JWT_PAYLOAD_GET_USERNAME_HANDLERZjwt_get_username_from_payloadr)   r
   r,   r"   r"   r"   r#   <module>   s   -