B
    bs                 @   s   d dl mZ d dlmZmZmZmZmZ d dlmZ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 d d	lmZ d d
lZG dd deZd
S )    )ladonize)save_logSUCCESS_CODEMESSAGE_CODEFORCED_OFFLINESYSTEM_EXCEPTION)interface_responsegenerate_password)get_current_request)request_valid)gettext_lazyactivate)cache)settings)QNc               @   s   e Zd Zeeeeeeeeeed	dd Zeeeeeeeeeddd Zeeeeeeeeeddd Z	eeeeeeddd	 Z
eeeeeeeedd
d Zeeeeeeeeddd ZdS )BioTimeAppLogin)Zrtypec	       0      C   s  yddl m}	 ddlm}
 ddlm} ddlm} ddlm	} ddl
}ddl}ddl}ddl}ddl}t }| }| }| }|std}td	}td
}t|d|t|||f|dd t| ttd|||S W n4 tk
r } zddl}|  W dd}~X Y nX |ry|d}|d}g }|}|dkr,|||r^|
jj|d}n|||rz|
jj|d}|stt dddks|j! " dkr|
jj|d}|st| td}td}td}ttd|||S |d j#}t$|j%}t&'d| | t&'d| t$|d j% n8y|jj(|d}t$|j%}W n6   t| td}td}td}ttd|||S |||r|
jj|d}n|||r|
jj|d}|std}td}td}t|d|t|||f|dd t| ttd|||S |d )|}|r|rt&'d| | t&'d| t$|d j% |j
* }d+||, t-t.| d } |/| 0d1 }!|jj|d j2||d}"|"s| }"||"_#|d j2|"_3||"_4d |"_5||"_6||"_7|!|"_8||"_9||"_:|";  n|"j<d |||!|d! nPtd}td}td}t|d|t|||f|dd t| ttd|||S |r||d }#|#)|}|r|st&=d|  t&=d|  td}td}td}t|d|t|||f|dd ttd|||S |d }#|#j>s`t&=d|  t&=d|  td"}td"}td#}t|d|t|||f|dd ttd|||S |jj|#j2|d$}$|$? r|$d j:}%||%krt&=d|  t&=d|  td%}td%}td&}t|d|t|||f|dd ttd|||S |j
* }d+||, t-t.| d } |/| 0d1 }!|jjd d'||#j2d(||d)B }&|&rl|&j<d d' |jj|#j2||d}'|'r|'d }"|"j@st&=d|  t&=d|  td*}td+}td,}t|d|t|||f|dd ttd|||S n| }"||"_#|#j2|"_3||"_4d |"_5||"_6||"_7|!|"_8||"_9||"_:|";  d-+td.}(d-+td.})|#jA}*|*d/kr|#jB! }+|+rd0}*t$|#C },|#j2}-|jj|d1jDd2d d3d }.|!|*pd|-|.|d jE|(|(|)d4}/tdt|/dd5S W n tk
r~ } zvt&=d|  t&=d|  ddl}|  td}d-+|}td6}t|d|t|||f|dd ttd|||S d}~X Y nX nlt&=d|  t&=d|  td}td7}td8}t|d|t|||f|dd t| ttd|||S dS )9u  
            APP Login
            @param username:        emp_code
            @param password:        employee self password
            @param isCloud:         isCloud
            @param company:         company name
            @param client:          mobile id,unique identifier of the mobile
            @param source:          data source(1: IOS， 2：Android)
            @param language
            @rtype: execute result
                request success：
                    {
                        code": "1", "data": {"token": "088d29bfba7bf97090bdf2c171648553", "role": app account role,
                        "copyright": "copyright state", "pin": "工号"}, "error"："", "describe": "", "message": ""
                    }
                    role: 1: Employee, 2: Administrator， 3: Approver
                request fail:
                    {"code": -10001, "error": "", "describe": "exception state", "message": "Pop-up message", "data":""}
        r   )MyUser)Employee)AppList)r   )CompanyNZapp_login_failedZappLogin_param_client_missingZappLogin_illegal_requestZLogin)status z?^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$zO^\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?\s*$false)email)mobileZSUPPORT_MUL_COMPANY   )emp_codeZuser_does_not_existZmobile_company_id_Zmobile_employee_id_)name__iexactcompany_does_not_existsZ'appLogin_incorrect_username_or_passwordz	{0}{1}{2}i  zutf-8)usernamedevice_tokencompanyT)active
login_timelast_activetokenclient_categoryZapp_account_disabledz3app_account_disable, please_contact_admin_to_enable)r   r!   zClient Id not matchz>Client Id not match, Please contact the administrator to reset)r"   )r   )	client_idZappLogin_request_blockedZ)app_client_already_block_by_administratorZapp_client_blockedz{0}u5   Copyright ©2021 ZKTECO LLC.,LTD.All rights reserved.)r      )idname)Zflat)r%   Zrolepincompany_nameZout_door_status	copyrightZcopyright_enZcopyright_ar
successfulsystem_exceptionZ-appLogin_request_params_can_not_find_usernameZappLogin_params_exception)Fmysite.accounts.modelsr   &mysite.personnel.models.model_employeer   "mysite.mobile.models.model_applistr   django.db.modelsr   mysite.cloud.modelsr   datetimetimeoshashlibrer
   strip_r   jsondumpsr   r   r   	Exception	traceback	print_exccompilematchobjectsfiltergetattrr   allcountr!   strr)   r   setgetZcheck_passwordnowformatgetpidintroundZmd5encodeZ	hexdigestr   r   r'   r"   r#   r$   r%   r&   r    saveupdatedeleteZ
app_statusexistsenableapp_role	flow_rolesplitZvalues_listZenable_outdoor_management)0selfr   ZpasswordisCloudr!   clientsourcer    languager   r   r   r   r   r5   r6   r7   r8   r9   reqerrordescribemessageer?   email_reZ	mobile_reempsuser
company_idZis_pwdrK   keyr%   ZappempZapp_listZexisted_client_idZactive_appsappsZzk_copyright_enZzk_copyright_arrV   rW   Zemp_codr   r,   response rk   9G:\easytimepro\master/mysite/mobile\services\app_login.pylogin   s    




 
"

 
  


 
" 


   zBioTimeAppLogin.loginc             C   s   ddl m} ddlm} |r|y|jj|d }W n   d}Y nX |jj||d}	|	rd|	jdd td	}
t	t
d
d
d|
S td}
t	td
d
d|
S dS )u  
        login out
        @param isCloud:         isCloud
        @param company:         company name
        @param source:          data source(1: IOS， 2：Android)
        @param device_token:    Token for push message
        @param language:        language(en/ar/it)
        @param token:           token
        @rtype:
            {"code": 1, "error":"", "describe":"", "message":"", "data":""}
        r   )r   )r   )r   N)r    r!   T)r"   Zapp_sign_out_successfulr   r.   ZappLogout_illegal_requestzToken missing)r2   r   r4   r   rC   rD   firstrR   r;   r   r   r   )rY   rZ   r!   r\   r    r]   r%   r   r   ri   ra   rk   rk   rl   sign_out  s    
zBioTimeAppLogin.sign_outc             C   s<  ddl m} ddlm}	 ddlm}
 ddlm} ddlm	} t
 }|ry0| }|ddkr|d	kr|jjd
d}|	jj|j|d}q|jj|d}|	jj|j|d}nN|}|d	kr|jjd
d}|	jj|j|d}n |jj|d}|	jj|j|d}|r0|d }|j}|j}|jj|j|d|d}|rtd}|j}|
||_|  td}d|j|}y||||f|d W n8 tk
r } zd|}ttdt|S d}~X Y nX d}t|d|t |||f| tt!dd|S td}td}td}t|d|t |||f|dd ttd|||S nHtd}td}td}t|d|t |||f|dd ttd|||S W nz tk
r } zZddl"}|#  td}d|}td }t|d|t |||f|dd ttd|||S d}~X Y nX n@d}d}td!}t|d|t |||f|dd ttd|||S dS )"u  
        reset password
        @param search_item:     PIN/Email Addr
        @param isCloud:         isCloud
        @param company:         company name
        @param source:          data source(1: IOS， 2：Android)
        @param device_token:    message push Token
        @param language:        APP language
        @param client:          mobile id
        @rtype:
            {"code": 1, "error":"", "describe":"", "message":"", "data":""}
        r   )r   )r   )make_password)send_one_mail)r   @r   Z 6b969e80f3ff11e9afc7acde48001122)r)   )department__company_idr   )r   )rt   r   T)r   r'   rU   r!      Zbiotime_app_password_resetz
                            Dear {0}, 
                                 Please find your new password <font color="blue">{1}</font>
                            )rf   z{0}r   Nr.   reset_passwordZapp_password_reset_failedZ0reset_password_must_to_do_on_the_mobile_with_usez4illegal_operation, please_contact_with_administrator)r   Z"app_password_reset_user_not_existsZ!app_password_reset_user_not_foundr/   Z3app_reset_password_please_input_the_available_value)$r2   r   r1   r   Zdjango.contrib.auth.hashersrp   Zmysite.admin.services.emailrq   r4   r   r
   r:   findrC   rJ   rD   r)   rf   r   r	   r   Zself_passwordrQ   r;   rL   Z
first_namer>   r   r   r   r   r<   r=   r   r?   r@   )rY   Zsearch_itemrZ   r!   r\   r    r]   r[   r   r   rp   rq   r   r^   rd   r+   rh   rf   ri   Znew_passwordr   titlecontextrb   r`   r_   ra   r?   rk   rk   rl   rv   6  s    


   zBioTimeAppLogin.reset_passwordc             C   s   t ttddiddS )u   
        @param version:           App Version
        @param client:            mobile unique identifier
        @param source:            data source(1: IOS， 2：Android)
        @param device_token:      message push Token
        @return:
        Zbetar   r   r.   )r   r   r<   r=   )rY   versionr[   r\   r    rk   rk   rl   version_verify  s    	zBioTimeAppLogin.version_verifyc          
   C   s  ddl }ddlm} ddlm}	 |jj|dddd }
y|
d j	|krd	d

|
d j|
d j	|
d j }|jj|	j|	jd}|d}||	j|}|j}||	j|
d j	|
d j|d}nddi}W n* tk
r } zddi}W dd}~X Y nX ttt|dtdS )u;  
        @param model:           model
        @param version:            Version
        @param source:            data source(1: IOS， 2：Android)
        @param device_token:             device_token
        @param language:        APP language
        @param token:             token
        @return:
        r   N)Products)r   )device_modelZmajor_versionZminor_versionZbug_fixz	firmware/z{0}/{1}/{2})Zaws_access_key_idZaws_secret_access_keys3)rg   Zbucketrz   model	file_sizerR   zNot availabler   r.   )boto3mysite.iclock.modelsr|   django.confr   rC   rD   Zorder_byreverseZfirmware_versionrL   r}   Zfirmware_filesessionZSessionZAWS_ACCESS_KEY_IDZAWS_SECRET_ACCESS_KEYresourceZObjectZAWS_STORAGE_BUCKET_NAMEZcontent_lengthr>   r   r   r<   r=   r;   )rY   r   rz   r\   r    r]   r%   r   r|   r   productZfirmware_rootr   r~   objectr   rj   rb   rk   rk   rl   firmware_upgrade  s.    




z BioTimeAppLogin.firmware_upgradec       %      C   s  ddl }ddlm} ddlm}	 ddlm}
 ddlm} ddl	m
} ddlm} dd	lm} dd
lm} ddlm} ddlm} |d}|||}|s|jj|d}|std}td}td}ttd|||S |d }t|j}|	d}|std}td}td}ttd|||S |rn|jj|d}|s`td}td}td}ttd|||S |
jj|d}|r| rd}n|jj||d}| rd}| std}td}td}ttd|||S |d }|r|jdkrtd}td}td}ttd|||S d}|j }|j}|j!rJ|j"} d|  d | d }!nd}d| d }!t||!dd}"|d}#d j#|||#|"d!}$|$|||$ tt%t&'d"d#idtd$S )%u@  
        @param username:           username
        @param company:            company
        @param source:            data source(1: IOS， 2：Android)
        @param device_token:             device_toke
        @param language:        APP language
        @param token:             token
        @return:
        r   N)r|   )get_system_setting)r   )send_email_reset_pwd_link)aes_encrypt)reset_pwd_link_email)r   )r   )r   )r   z?^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$)r   r   r   email_settingZemail_setting_does_not_exists)Zemail__iexactF)r   Z!department__company__name__iexactTZemail_or_employee_id_not_existsZ,your_email_not_exist_please_connect_to_adminz{'emp_code':'z', 'company_name':'z'}z
{'email':'zutf-8)encodingzbiotime:reset_pwdz,{scheme}://{host}{reset_pwd_url}?code={code})schemehostreset_pwd_urlcoder   Zsentr.   )(r9   r   r|   Zmysite.utilsr   r0   r   Zmysite.accounts.urlsr   Zmysite.tools.encryption_utilsr   Zmysite.base.tasksr   r   r   Zdjango.core.urlresolversr   r4   r   r1   r   rA   rB   rC   rD   r;   r   r   rH   r)   rT   r   ZDOMAIN_HOSTZis_employeer   rL   Zdelayr   r<   r=   )%rY   r   r!   r\   r    r]   r%   r9   r|   r   r   r   r   r   r   r   r   r   rc   Zcheck_is_userZcompany_datar_   r`   ra   Zcompany_valuerf   r   re   Zis_empr   r   r   r   Zraw_dataZaes_datar   Zlink_urlrk   rk   rl   forget_password  s    




zBioTimeAppLogin.forget_passwordN)__name__
__module____qualname__r   rH   rN   rm   r   ro   rv   r{   r   r   rk   rk   rk   rl   r      s   "    \*r   )Zmysite.ladon.ladonizerr   Zmysite.mobile.utilsr   r   r   r   r   r   r	   Zmysite.base.threadlocalsr
   r   Zdjango.utils.translationr   r;   r   Zdjango.core.cacher   r   r   r3   r   r<   r   r   rk   rk   rk   rl   <module>   s   