U
    #hB                     @   s   d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
mZ d dlmZ d dlmZ d dlT d dlmZ d dlmZ d d	lmZ d dlZd d
lmZ G dd dejZdS )    N)LDAPException)TlsServer
ConnectionNTLMSIMPLE)cmf_context)commit_all_ds)*)
log_config)cmf_auth_ldap_plugin)cached_property)Pathc                       s  e Zd ZdZdZejjd ZdZejj	dddddd	d
g Z	dZ
eejdddZdd ZdYeedddZdddddZdd ZdZedddZd[edddZeedddddd d!d" Zeeddd#d$dd d%d& Zd'd( Zeeddd)dd*d+d,d-d.Zeeddd/d0d1 Zd\d2d3Zd]d5d6Zeeddddd7d8d9 Z eeddd$dd7d:d; Z!eeddd<dd7dd+d=d>d?Z"d@dA Z#dBdC Z$edDdE Z%dFdG Z&dHdI Z'ddddJ fdKdL
Z( fdMdNZ)dOdP Z*dQdR Z+dSdT Z,dUdV fdWdX
Z-  Z.S )^CmfAuthLdapPluginN)loggerTapplyclearsyncsync_allsync_newget_log_filenametest_connectr   )returnc                 C   s   | j r| j S tjj| tjd}|stj| tjd}|  |jsJ|d ddl	m
}m}m} |tj || td| _ tj| j |jtjd nt|  | _ | j S )uE    Журнал логирования процесса импорта )parentname    r   ) set_library_log_activation_levelset_library_log_detail_levelEXTENDEDldap3)level)_CmfAuthLdapPlugin__loggermodelsZCmfAttachmentgetr   LOG_NAMEsaveZfile_existsZupload_fileZldap3.utils.logr   r   r   loggingZERRORZ	getLoggerZinit_loggerZfull_path_fileINFOZ
get_loggerget_files_dir)selfZ
attachmentr   r   r    r*   1./modules/settings/models/cmf_auth_ldap_plugin.pyr   #   s    

zCmfAuthLdapPlugin.loggerc                 C   s>   t   | j dkr:t   | _tjj| jdgdj}|dkS dS )N
   sync_statusidfieldsin_progressF)timebroken_startr"   r   sgetr/   r-   )r)   Z
new_statusr*   r*   r+   broken8   s
    
zCmfAuthLdapPlugin.broken)ldap_user_nameldap_user_pwdc           
   
   O   s   t   | dddddg |s,| jjj}|s<| jj }tt	j
t	jdd}t| jj d| jj |d	}t}t||||d
| jjd}| r|W  5 Q R  S d|j }	| j|	 t|	W 5 Q R X d S )Nplugin.ext_urlplugin.ext_portconnection_timeoutzplugin.ext_loginplugin.ext_passwordz"/etc/ssl/certs/ca-certificates.crt)ZvalidateversionZca_certs_file:)ZtlsF)userpasswordauthenticationZauto_referralsZreceive_timeoutu@   Не удалось подключиться к серверу: )cmfutildisable_aclload_fieldsplugin	ext_loginvalueext_passworddecryptr   sslZCERT_OPTIONALZPROTOCOL_TLSv1_2r   Zext_urlZext_portr   r   r:   ZbindZ
last_errorr   error	Exception)
r)   r6   r7   argskwargsZtls_configurationZserverr@   connerrr*   r*   r+   connect?   s2    

 
 
 zCmfAuthLdapPlugin.connect)rE   rG   c             
   O   sz   z2|  || W 5 Q R X td | jd W dS  tk
rt } z$td|  | jd W Y dS d }~X Y nX d S )NuK   Подключение к серверу выполнено успешно.TuO   Подключение к серверу выполнено с ошибкой: uN   Подключение к серверу выполнено с ошибкой.F)rP   	cmf_alertr   infor   	exception)r)   rE   rG   rL   rM   er*   r*   r+   r   U   s    
zCmfAuthLdapPlugin.test_connectc              	   c   sd   d}d}|   8}|jjj||d|ddd}|D ]}|V  |d7 }q0W 5 Q R X | jd|  d S )Nr,   r   r
   T)search_basesearch_filter
attributes
paged_size	generatorZget_operational_attributes   u"   Загружено записей )rP   extendZstandardZpaged_searchr   rR   )r)   rU   rV   rX   totalrN   Zentry_generatorentryr*   r*   r+   _paged_searchb   s    

 zCmfAuthLdapPlugin._paged_searchc              	   c   sN  z"|  dddg | jj}|r6| jr0| jj}nW d S d}d}|rn|d dkrjtddtd	d|}d
}d
}|r| jdkr|d| d| d7 }n|d| d7 }|rd
}|rd| d}| jd|  | j	r| j	
dD ]&}| |  d| j |E d H  qn| | jj|E d H  W n$ tk
rH   | jd  Y nX d S )Nadditional_user_dnuser_object_class_filterbase_dnFrZ   &z\)$ z\(&Tadz(|(whenCreated>=z)(whenChanged>=))z(modifyTimeStamp>=)z(&u%   Фильтр запроса к LDAP: ;,u8   Ошибка загрузки пользователей)rC   r`   rF   user_disabled_filterresubdirectory_typer   rR   r_   splitr^   stripra   rK   rS   )r)   prev_sync_gtdisabledrV   Zcombine_filtersZfilter_was_not_emptyadd_dnr*   r*   r+   ldap_get_usersp   s<    

&z CmfAuthLdapPlugin.ldap_get_usersc                 c   s   zn|  dddg | jj}| jrV| jdD ]&}| |  d| j |E d H  q,n| | jj|E d H  W n" tk
r   | j	
d  Y nX d S )Nadditional_group_dngroup_object_class_filterra   rg   rh   u(   Ошибка загрузки групп)rC   rt   rF   rs   rm   r^   rn   ra   rK   r   rS   )r)   ro   rV   rq   r*   r*   r+   ldap_get_groups   s    &z!CmfAuthLdapPlugin.ldap_get_groupsz	@minutely  	   )	only_once
system_jobZschedulesoft_time_limitpriorityc                  C   s   t jdddgddgdD ]l} | jr6| jj| jjd kr| jd|  d	 t j| j	jd
dd t j
| j	jdd | jd|  d qd S )N	auto_sync==T	sync_datesync_intervalfilterr0   <   u.   Частичная синхронизация     запущенаu-   частичная синхронизацияauth_plugin_iddelta_minutes
sync_titler   r       завершена)r   listr~   ager   rF   r   rR   r   r/   r   auth_pluginr*   r*   r+   	cron_sync   s    
zCmfAuthLdapPlugin.cron_syncz	H 4 * * *ip  c                  C   s   t jdddgddgdD ]} | jr>| jj| jjd d d kr| jd	|  d
 t j| j	jd dd t j
| j	jdd | jd	|  d q| jd	|  d| jjd  d qd S )Nr|   r}   Tsync_all_datesync_all_intervalr   r      u(   Полная синхронизация r   u'   полная синхронизацияr   r   r   u/    пропускается: sync_all_date.age = u    мин.)r   r   r   r   r   rF   r   rR   r   r/   r   r   r*   r*   r+   cron_full_sync   s    
"z CmfAuthLdapPlugin.cron_full_syncc              	   C   s  | j d t }dddg}| j|dD ]}|  r< dS |jj D ]n\}}||kr\qH|| d| d}| j d| d	|d
   t	|
 dg }tjjddd| dg|d}|stjjd
d|d
 g|d}|s| j d|  tj|d
 |d}|j s||_||jkr4|j | |_| D ]f\}	}
|	dkrRq<t||	r<|jr|	d
ksz|	dkr| j d|	 d|  nt||	|
 q<|jrH|  t  qHq(| j dt| d dS )Nu)   Синхронизируем группы--r/   groupsr0   Fz::u-   Обрабатываем группу ext_id=z name=r   systemext_idZLIKE%r   r}   u0   Не нашли группу, создадим: )r   r   codeu5   Игнорируется изменение поля u!    системной группы u   Обработано u    группT)r   rR   setall_raw_datar5   r   rF   itemsaddr   keysr"   CmfPersonGroupr#   r   loadhasattrr   warningsetattr
is_changedr%   
cmf_commitlen)r)   Zsyncedr0   objZgroup_idvalr   Zgroup_fieldsgroupkeyrF   r*   r*   r+   process_groups   sF    



z CmfAuthLdapPlugin.process_groupsi@8  )ry   rx   rz   r{   u   синхронизация)r   c                 O   s  ddl }td|  d dt_tjj| ddgd}z |jd	kr|jj	d
krf|j
|  d n|j
|  d W dS |j
d|  |j  d	|_|  t  tj  | s|j
|  d W dS t  |jstdtjjdddgdddgdd|ggddid t | t f d}dd tjjdd|gdddggdgdgdD }t|}d}	td||| D ]}
tjjdd|gdddgdd||
| |
| |  ggdddgdgdD ]}| r|j
|  d   W 5 Q R  W 5 Q R  W dS |	d 7 }	z<|j
|  d!|j  d"|	 d#| d |!  t  W n0   |j"#  |j
$|  d$|  Y nX qؐqW 5 Q R X W 5 Q R X d%|_|  t  tdd&D ]F}	tj%j&d	kr|j
|  d' t'tj(j)  qt*+d  q|j
|  d( t'tj,j- W nd t.k
r } zDt/| d)|_|  t'tj,j- t  |j
$|  d*  W 5 d}~X Y nX dS )+uP   
        Сохраняем данные в CmfPerson и CmfPersonGroup
        r   NzStart CmfAuthLdapPlugin.apply(rf   Tr-   r~   r.   r1   rv   h    пользователей зависла, запускаем форсированно повторно    уже запущена   Запущена u8   : синхронизация групп прерванаuH   Укажите "Домен для логина" в настройках.dirtyr}   FZ	person_idr   )r   values2   c                 S   s   g | ]
}|j qS r*   )r/   ).0ir*   r*   r+   
<listcomp>	  s     z+CmfAuthLdapPlugin.apply.<locals>.<listcomp>r/   z-ldap_deleted)r   r0   Zorder_byINr   loginuM   : обработка данных пользователей прерванаrZ   u!   : обрабатываем login= (    из uH   : ошибка обработки данных пользователя closedr   u-   : синхронизируем с eva_accountu2   : изменения применены в eva_apprJ   u6   : ошибка применения изменений)0mathgdebug license_disable_user_count_hooksr"   r   r#   r-   r~   r   r   rR   
capitalizeset_nowr%   r   r   
ldap_groupr   domainAssertionErrorCmfAuthPluginDataZbulk_updaterA   Zdisable_notifyrB   Zslistr   rangeceilr   r5   r   Zprocess_personZdpZrollbackrS   
global_varaccount_sync_statusschedule_deferred_job	CmfPersonaccount_sync_usersr2   sleep
CmfLicenserecalc_users_countsrK   cmf_rollback)r   r   _args_kwargsr   r   stepZall_dirty_idscntr   chunkraw_datarT   r*   r*   r+   r      s    


 
 

*

<zCmfAuthLdapPlugin.apply)rx   ry   c              	   O   s  t d|  d dt _tjj| ddgd}|jdkrF|jd d S |jd	 |j	
  d|_|  t  d
}|jd tjj| d}d}d}||k r|| |k r| r|jd d S tjj| d|gdddddgdD ]}z|jrT|jjs|jjd|j  d|j_tj }	|	|jjkrB|jj|	 |jj  d |_|  |d
7 }t  |jd| d|  W q tk
r   |jd Y qX q|d
7 }qd
}tjj| d}|jd tjj| dgdD ]x}
zN|
jrd |
_|
  W q|
  |jd| d|  |d
7 }t  W n" tk
rX   |jd Y nX qd|_|  |jd ttjj  d S ) NzStart CmfAuthLdapPlugin.clear(rf   Tr-   r~   r.   r1   u2   Синхронизация уже запущенаu)   Очищаем синхронизациюrZ   uh   Удаляем данные по пользователям (не самих пользователей)r      r   u:   Очистка синхронизации прерванаzperson.does_not_workzperson.rg_member_ofr   zperson.is_adminzperson.is_support)r   slicer0   u    Блокируем учетку u   Удалено r   u/   Ошибка удаления CmfAuthPluginDatau   Удаляем группы
cmf_import)r   r0   u,   Ошибка удаления CmfPersonGroupr   u!   Очистка завершена)!r   r   r   r"   r   r#   r-   r   rR   r~   r   r%   r   r   countr5   r   ZpersonZis_adminr   Zdoes_not_workr   r   Zrg_member_ofremoverF   deleterK   rS   r   r   r   r   )r   r   r   r   r   r\   r   ndataZldap_grpr   r*   r*   r+   r   8  sv    






zCmfAuthLdapPlugin.clearc                 c   sx   ddl }d}|r|ntjjdd| gd}t||| D ]8}tjjdd| g||| || | gdD ]
}|V  qfq:dS )uB  Частями загружаем в память и отдаем, иначе будет утечка памяти

        Args:
            fields (list, optional): Поля для загрузки. Defaults to None.

        Yields:
            CmfAuthPluginData: загруженные сырые данные
        r   Nr   r   r}   )r   )r   r0   r   )r   r"   r   r   r   r   r   )r)   r0   r   r   r   r   rowr*   r*   r+   r   x  s    	
zCmfAuthLdapPlugin.all_raw_datar   c              	   C   sp   ddl m}m} |jsd S |j||d |j }t|jd	dd |j
|j|j|j|jfD  }|d S )Nr   )	timedeltatimezone)Zminutesrc   c                 s   s*   | ]"}d dt t|  t| V  qdS )0   N)r   str)r   itemr*   r*   r+   	<genexpr>  s   z6CmfAuthLdapPlugin._generalized_time.<locals>.<genexpr>z.0Z)Zdatetimer   r   rF   Z
astimezoneZutcZ	timetupler   tm_yearjointm_montm_mdaytm_hourtm_mintm_sec)r)   Z	date_timer   r   r   ZdtZgtimer*   r*   r+   _generalized_time  s    
z#CmfAuthLdapPlugin._generalized_time)rx   ry   rz   r{   c                 O   s"   t j| ddd t j| dd d S )Niu:   ручная частичная синхронизацияr   r   r   r   r   r   r   r   r*   r*   r+   r     s    zCmfAuthLdapPlugin.sync_newc                 O   s    t j| dd t j| dd d S )Nu4   ручная полная синхронизацияr   r   r   r*   r*   r+   r     s    zCmfAuthLdapPlugin.sync_alli   )r   r   c                  O   sR	  t d|  d dt _tjj| dddddd	d
ddddgd}z|jdkr|jjdkrp|j	
|  d n|j	
|  d W d S |j	
d|  |r|j|j|dnd }|j }d|_|  t  |j	
d i }|j|dD ]h}	| r|j	
|  d  W d S |	ds>|j	d|	  qt|jjd}
|jdksb|jjrtt|	d |
d< nt|	d |jj|
d< t|
d tr|
d d |
d< |	d |jj}t|tr|d }|r||
d < |	d |jj}t|tr|d }|r||
d!< |jr8|	d |jjg |
d"< nd#|
d"< |
||	d < |j	
|
  q|j	
|  d$ t }t }t }|j |dD ]&}|!|}|sq|||d < qt"|rt | }t"|| }|j	
|  d%t"| d&|d'd(|d)d* t }t }|j#rZ|j d|d+D ]&}|!|}|sJq2|||d < q2t"|rt | }t"|| }|j	
|  d%t"| d,d-|d'd(|d)d*  d}d}d}d}t$ }t }|rd.ntj%j&| d}|rf|j'dd/d d0d1d2d3d4d5d6d7d8gd9D ]P}z| rD|j	
|  d: W  W d S |j(j|krXW q|)|j(j}|srW q|*||| |+|j(j |d;7 }|j,rd<|_,|j(|k|_-|j.r|j	
|  d=|d/  d-| d>| d |d;7 }d|_/|jdd? W n` t0k
r` } z@|j	1|  d@|d/  dA|d  dB|  dC|_|d;7 }W 5 d }~X Y nX qt | }|r|| }|j	
|  dD| dE|d'd(|d)d* |r|| }|j	
|  dF| dE|d'd(|d)d* t }|2 D ]\}}z| r*|j	
|  dG W  W d S |j	
dH|d/   tj%||dI}|*||| d|_/|  t  |+|j(j |d;7 }W n` t0k
r } z@dC|_|j	1|  dJ|d/  dA|d  dB|  |d;7 }W 5 d }~X Y nX q|r4t | }|| }|j	
|  dK| dE|d'd(|d)d* d}|s|jdCkr|j'dd7d6gd9D ]4}|j(j|kr\d|_,d|_/|jdd? |d;7 }q\|rt | }|| }|j	
|  dL| dE|d'd(|d)d* |jdkrdM|_|  t  tj34  tj56  t7ddND ]0}t j8j9dkr:t:tj3j;  qHt<d; q|r|j	|  dO| dP t=j>|  dQ| dR| dP|dS n&|j	
|  dT ||j_|  t:tj?j@ W n t0k
	rL } zhtA| |	r:|j	1|  dU dC|_|  t=j>|  dQ| dU|dS t:tj?j@ t   W 5 d }~X Y nX d S )VNzStart CmfAuthLdapPlugin.sync(rf   Tr8   r9   zplugin.loginr;   ra   r   zcmf_owner.loginrl   r-   use_user_groups_attrr~   r.   r1   i0*  r   r   r   )r   u   Загружаем группы)ro   u.   : загрузка групп прерванаrW   u-   У записи нет аттрибутов: r   ZentryDNdnr   r   r   textmembersrc   u,   : загружаем сырые данныеu   : загружено u2    изменённых пользователей (z.1fu
    сек., z.0fu    польз./сек.))rp   ro   u2    отключенных пользователейr   i  r   
first_name	last_nameemailemployee_numberr   ldap_disabledldap_deletedr   
fields_mapr   u?   : обновление сырых данных прерваноrZ   Fu;   : синхронизируем учетную запись /)Z	only_datauC   : Ошибка синхронизации пользователя (z): rJ   u   : проверено u    пользователей (u#   : синхронизировано u/   : импортирование прерваноu$   Импортируем учетку )r   r   uC   : ошибка синхронизации пользователя u   : добавлено u   : удалено r   r   u)    завершена с ошибками (z). u(    завершена с ошибками()r   u#    успешно завершена.u%    завершена с ошибкой)Br   r   r   r"   r   r#   r-   r~   r   r   rR   r   r   Znowr%   r   ru   r5   r   dictr/   rF   group_uid_attrZis_nullr   
isinstancer   group_name_attrgroup_desc_attrr   group_users_attrr2   rr   ldap_user_attributesr   ri   r   r   r   r   r   popupdate_raw_datar   r   r   r   r   rK   rS   r   r   Zflush_all_notify_opt_cacheZCmfProjectNotifySchemeZtrigger_reloadr   r   r   r   r   r   rA   Zadmin_alertr   r   r   ) r   r   r   r   r   r   ro   Z
sync_start
cached_grpgrpr   Zgrp_nameZgrp_attrZ
start_timeZldap_users_dict	ldap_userr>   ZdurationZspeedZldap_disabled_users_dictZsync_errorsZusers_addedZusers_synchronizedZusers_updatedZldap_synchronizedr   r   rT   r   raw_userZusers_deletedr   r*   r*   r+   r     s           




0

     

,.,,

.,,

&zCmfAuthLdapPlugin.syncc              
   C   s  dd l }|dsd S |d | jj}t|tr:|d }t|d | jj}t|trb|d }|sntd|d | j	j}t|tr|d }|d | j
j}t|tr|d }|d | jj}t|tr|d }|d | jj}t|tr|d }|d | jjg }	t|||||||	|d d}
| jrd|d | jj}t|tr\|d }||
d< | jrt |
d< || jj}| D ]l\}}|d |}t|tr|d |
d |< n6t|tr||
d |< n| jd| d	|d   q|
S )
Nr   rW   uW   Не удалось получить уникальный ИД пользователяr   )r   r   	name_attruser_name_attruser_last_name_attruser_email_attruser_groupsr   user_employee_number_attrr   u   Аттрибута нет u    в )jsonr#   user_full_name_attrrF   r   r   r   user_uid_attrr   user_display_name_attrr  r  r  user_groups_attrr   r  mapping_fieldsloadsr   r   rR   )r)   r	  r  r   r   r  r  r  r  r  r>   r  r  Z	attr_nameZ
field_nameZatt_valr*   r*   r+   r    s^    






  
 z&CmfAuthLdapPlugin.ldap_user_attributesc           	      C   s  |d |_ d|kr|d |_nd |_d|krL|d rL|d d |jj |_nd |_d|krz|d rz|d d |jj |_nd |_d|kr|d |_nd |_d|kr|d |_nd |_d|kr|d |_g }| jr:|D ]`}|| }|d |d	 kr|	|d
  |d
 |j
kr| jd|  ||j
|d
 < |j
|_
qnz|d D ]p}| jd|  ||}|r|	|d
  |d
 |j
kr||j
|d
 < |j
|_
n| jd|  qBt|j
j D ] }||kr|j
|= |j
|_
qd S )Nr   r  r  r  r  r  r   r   r   r   u9   Добавляем пользователю группу r  u   Ищем группу u   Не нашли группу )r   r   r   Z
max_lengthr   r   r   r   r   appendr   r   rR   r#   warnr   rF   r   )	r)   r
  r	  r  Zcurrent_user_groupsZ	group_uidr   entry_dnZ	gr_ext_idr*   r*   r+   r    sR    




z!CmfAuthLdapPlugin.update_raw_datac                  C   sZ   t jdkrdS g } tjjddgdD ]}| |d q$t | ddd	}td
| dS )u=   
        Отправляем в аккаунт 1к1
        FalseNz**plugin.*r   r   )Zeva_app_tokenauth_pluginsZrpc_account_plugin_push)rM   methodzauth/sync_accounts)	configZEVA_ACCOUNT_USEr"   r   r   r  dumpsZgen_eva_app_tokenZcall_eva_account)r  rD   r   r*   r*   r+   account_plugin_push  s    

z%CmfAuthLdapPlugin.account_plugin_pushc                 C   s.   | j jsd S | j r*ttjjd| jjid d S )Nr   )rM   )r|   r   r   r"   r   r   r/   rF   r)   r*   r*   r+   _process_auto_sync   s    z$CmfAuthLdapPlugin._process_auto_syncc                 C   sJ   dd l }| jjr| jsd S z|| jj W n   tddd Y nX d S )Nr   uY   Не правильный формат маппинга. прим {"description": "text"}Tabort)r  r  r   r  rF   rQ   )r)   r  r*   r*   r+   _validate_mapping_fields  s    z*CmfAuthLdapPlugin._validate_mapping_fieldsdepthnotifyemitc                   sf   t jstddd | jr,| js,tj g| _t j| _	| 
  |   |   t j||||d|S )NuE   Модуль доступен только в версии On-PremiseTr$  r'  )r  ZIS_BOX_VERSIONrQ   Zis_newZdefault_groupsr"   r   Z
user_groupZORG_NAMEZorg_name_process_directory_typer!  r&  superr%   )r)   r(  r)  r*  rL   rM   	__class__r*   r+   r%     s    zCmfAuthLdapPlugin.savec                    s   t   ddg S )Nr
   r  )r,  save_preload_fieldsr"  r-  r*   r+   r/    s    z%CmfAuthLdapPlugin.save_preload_fieldsc                 C   s  | j jsd S | j dkrd| _d| _d| _d| _d| _d| _d| _d	| _	d
| _
d| _d| _d| _d| _d| _d| _d| _d| _d| _d| _n~| j dkrd| _d| _d| _d| _d| _d| _d| _d	| _	d
| _
d| _d| _d| _d| _d| _d| _d| _d| _d| _d| _d S )Nrd   r>   z,(&(objectCategory=Person)(sAMAccountName=*))zZ(&(objectCategory=Person)(sAMAccountName=*)(userAccountControl:1.2.840.113556.1.4.803:=2))ZsAMAccountNameZcnZ	givenNameZsnZdisplayNameZmailZ
unicodePwdZ	plaintextZ
objectGUIDr   z6(&(objectCategory=group)(!(isCriticalSystemObject=*)))descriptionmemberZmemberOfZldapZinetorgpersonz(objectclass=inetorgperson)rc   ZuserPasswordZshaZ	entryUUIDZgroupOfUniqueNamesz (objectclass=groupOfUniqueNames)ZuniqueMember)rl   r   user_object_classr`   ri   r  Zuser_rdn_attrr  r  r  r  Zuser_password_attrZuser_password_cryptr  r   Zgroup_object_classrt   r  r  r  r  r"  r*   r*   r+   r+  !  sT    
z)CmfAuthLdapPlugin._process_directory_typec                 C   s   t   | ddddg tdD ]}z| | jjj| jj	 }d| j
 d| j d| d	}|j| jj|d
dr|jD ]L}| |j|4}|W  5 Q R    W  5 Q R  W   W  5 Q R  S Q R X q~W 5 Q R X W q&   | jd| d|  Y q&X q&td| dd W 5 Q R X dS )u?   Авторизация через внешнюю системуr2  r  ra   r     z(&(ObjectClass=z)(=re   r
   )rW   u   Ошибка u-    попытки авторизации login=u7   Не удалось авторизоваться login=Tr$  N)rA   rB   rC   r   rP   rD   rE   rF   rG   rH   r2  r  searchra   entriesr  r   rS   rQ   )r)   r   r?   r   rN   Z_filterresZ
_test_connr*   r*   r+   signinO  s    
H zCmfAuthLdapPlugin.signinc                 O   sF   t j|  tj}t jt jtj|s8| j	
d t jd|S )Ninitfiles)ospathr   r(   r   r$   existsr  Z
UPLOAD_DIRr   rR   )r)   rL   rM   Z	file_pathr*   r*   r+   r   `  s    z"CmfAuthLdapPlugin.get_log_filenameF)forcec                   sL   t jj| d}|r(td| dd d S t j||dd| |   d S )Nr   uM   Сначала очистите интегрированные данные: Tr$  )r>  	recursive)r"   r   r   rQ   r,  r   r!  )r)   r>  rL   rM   Zhas_datar-  r*   r+   r   f  s    zCmfAuthLdapPlugin.delete)NN)NN)N)NN)r   )/__name__
__module____qualname__Z_CmfAuthLdapPlugin__connectr!   r   r   Zui_meta_skipZ	api_allowZapi_methodsr3   propertyr&   ZLoggerr   r5   r   rP   r   r^   r   rr   ru   staticmethodZcmf_deferred_jobr   r   r   r   r   r   r   r   r   r   r  r  r!  r#  r&  r%   r/  r+  r8  r   r   __classcell__r*   r*   r-  r+   r      sv   	$(Q
>

	 f17
.r   )gcr2   r&   rj   Zldap3.core.exceptionsr   r   r   r   r   r   r   Zcmf.appr   Zcmf.data_providers.baser	   Zcmf.includeZcmf.modules.logsr   Zmodules.settings.fieldsr   r   rI   pathlibr   r   r*   r*   r*   r+   <module>   s   