U
    ~}d                     @   sB   d dl Z d dlZd dlZd dlT d dlmZ G dd dejZdS )    N)*)
cmf_personc                       s   e Zd Zdd Zdd Z fddZ fddZd' fd
d	Z fddZe	dd Z
edd Zed(ddZdd Zdd Ze	dd Zedd Zed)ddZd*dd Zd+d!d"Z fd#d$Zd%d& Z  ZS ),	CmfPersonc                 C   sT   | j js| jjsdS tj }| j r>|| jjkrP| j| n|| jjkrPd| _ dS )u   
        Вычилсяем является ли пользователь сотрудником техподдержки
        NT)
is_support
is_changedrg_member_ofmodelsCmfPersonGroupsupport_groupvalueappend)selfr
    r   ./cmf/models/cmf_person.py_check_support
   s    
zCmfPerson._check_supportc                 C   s   | j js"| jjs"| js"| j js"dS tj }| jjrt| j  || jkrPd| _ n || jj	krjt
ddd nd| _ dS | j jr|| jk| _ dS | j jr| j r| j  |jjdd | jD kr| j| dS )u\   
        Вычисляем локальный ли это пользователь
        NTu   Удаление из группы "Пользователи" временно недоступно. Для отключения пользователя можете воспользоваться удалением или увольнением.)abortFc                 S   s   g | ]}|j jqS r   )idr   ).0gr   r   r   
<listcomp>;   s     z.CmfPerson._calc_user_local.<locals>.<listcomp>)
user_localis_nullr   r   Zis_newr   r	   
user_grouploadold	cmf_alertr   r   r   )r   r   r   r   r   _calc_user_local   s6    



zCmfPerson._calc_user_localc                    s   t   ddddg S )Nr   r   r   login)supersave_preload_fieldsr   	__class__r   r   r   >   s    zCmfPerson.save_preload_fieldsc                    s2   |    |   |   |   tt| j||S N)r   r   _calc_login_calc_emailr   r   saver   argskwargsr!   r   r   r&   A   s
    zCmfPerson.saveTc                    sH   t j  t jj| dD ]}|jf d|i| qt jf d|i|S )N)person	recursive)r   CmfAccessListcheck_admin_modeCmfPersonVarlistdeleter   )r   r+   r)   rowr!   r   r   r0   H   s    
zCmfPerson.deletec                    s:   t j  t jj| ddD ]}|j|| qt j||S )NT)r*   Zinclude_deleted)r   r,   r-   r.   r/   restorer   )r   r(   r)   r1   r!   r   r   r2   O   s    
zCmfPerson.restorec                 C   s   | t j j kp| jS r#   )r   r	   Zadmin_groupZ
rg_membersZ
all_nestedr   r    r   r   r   	_is_adminU   s    zCmfPerson._is_adminc                 C   s   | j ddS )Nz.CmfPerson:00000000-0000-0000-0000-000000000001)r   )get)clsr   r   r   system_personY   s    zCmfPerson.system_personc                 O   s   t jjtjjdddddgdS )Nr   Zonline_statusZon_vacationr   Zis_admin)r   Zfields)r   r   r4   r   Zcurrent_personr   )r5   Zcreate_args_kwargsr   r   r   get_current_user]   s     zCmfPerson.get_current_userc                 C   s"   | j jrd S | j j  | _ d S r#   )r   r   r   lowerstripr    r   r   r   r$   c   s    zCmfPerson._calc_loginc                 C   s   | j r
d S | j| _ d S r#   )Zemailr   r    r   r   r   r%   i   s    zCmfPerson._calc_emailc                 C   s   d| j  d| j d| j S )N/)Z	ui_moduleZui_namecoder    r   r   r   hrefo   s    zCmfPerson.hrefc                 C   s   t |   S r#   )hashlibZsha1encodeZ	hexdigest)tokenr   r   r   
hash_tokens   s    zCmfPerson.hash_token   c                 C   s"   d tjd|d}|| |fS )N Z>qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890)k)joinrandomchoicesrB   )r5   Ztoken_lengthZ
auth_tokenr   r   r   
_gen_tokenw   s
    zCmfPerson._gen_tokenc                 K   s*   |   \}}|| _|r&td| d |S )Nu   Создан API токен k   , отображается только один раз, скопируйте его и сохраните.)rI   Zapi_token_hashr   r   Zalertr8   rA   Z
token_hashr   r   r   generate_api_token   s
    zCmfPerson.generate_api_tokenc                 K   s*   |   \}}|| _|r&td| d |S )Nu    Создан Webhook токен rJ   )rI   Zwebhook_token_hashr   rK   r   r   r   generate_webhook_token   s
    z CmfPerson.generate_webhook_tokenc                    s&   |    |   |   t j||S r#   )r   r$   r%   r   _save_importr'   r!   r   r   rN      s    zCmfPerson._save_importc                 C   s"   t jj}| jr| jjr| jj}|S r#   )r   Zglobal_settingsZtwo_factor_optZ
two_factor)r   resr   r   r   get_two_factor_opt   s    zCmfPerson.get_two_factor_opt)T)T)rC   )T)T)__name__
__module____qualname__r   r   r   r&   r0   r2   propertyr3   classmethodr6   r9   r$   r%   r>   staticmethodrB   rI   rL   rM   rN   rP   __classcell__r   r   r!   r   r   	   s0   '



	

r   )r?   rG   sysZcmf.includeZ
cmf.fieldsr   r   r   r   r   r   <module>   s
   