U
    dc                     @   s   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mZmZmZmZ d d	lmZ G d
d de
jZdS )    )Loggerfields)*)
log_config)LOG_NAME)cmf_auth_ldap_pluginN)TlsServer
ConnectionNTLMSIMPLE)cached_propertyc                       s   e Zd ZdZejjd ZeedddZ	de
e
dddZ fd	d
Zdd Zddddd fdd
Zdd Zdd Zedd Z  ZS )CmfAuthLdapPluginN)logger)returnc                 C   s   t |  S )uE    Журнал логирования процесса импорта )r   Z
get_loggerget_files_dirself r   -./modules/auth/models/cmf_auth_ldap_plugin.pyr      s    zCmfAuthLdapPlugin.logger)ldap_user_nameldap_user_pwdc           
      O   s   |  dddg |s| jjj}|s,| jjj}ttjtjdd}t	| jj
 d| jj |d}t}t||||d| jjd	}| r|S d
}	| j|	 t|	d S )Nplugin.ext_urlplugin.ext_portconnection_timeoutz"/etc/ssl/certs/ca-certificates.crt)ZvalidateversionZca_certs_file:)ZtlsF)userpasswordauthenticationZauto_referralsZreceive_timeoutux   Не удалось подключиться к серверу, неправильный логин или пароль.)Zload_fieldsZpluginZ	ext_loginvalueZext_passwordr	   sslZCERT_OPTIONALZPROTOCOL_TLSv1_2r
   Zext_urlZext_portr   r   r   Zbindr   error	Exception)
r   r   r   argskwargsZtls_configurationZserverr    connerrr   r   r   connect   s*    

 
 zCmfAuthLdapPlugin.connectc                    s   t   ddddddg S )Nr   r   zplugin.loginzplugin.passwordbase_dndomain)supersave_preload_fieldsr   	__class__r   r   r-   *   s     z%CmfAuthLdapPlugin.save_preload_fieldsc                 C   s   | j jsd S | j dkr~d| _d| _d| _d| _d| _d| _d| _d	| _	d
| _
d| _d| _d| _d| _d| _d| _d| _d| _np| j dkrd| _d| _d| _d| _d| _d| _d| _d	| _	d| _
d| _d| _d| _d| _d| _d| _d| _d| _d S )NZadr   z,(&(objectCategory=Person)(sAMAccountName=*))ZsAMAccountNameZcnZ	givenNameZsnZdisplayNameZmailZ
unicodePwdZ	plaintextZ
objectGUIDgroupz(objectCategory=Group)descriptionmemberZmemberOfZldapZinetorgpersonz(objectclass=inetorgperson)ZuserPasswordZshaZ	entryUUIDZgroupOfUniqueNamesz (objectclass=groupOfUniqueNames)ZuniqueMember)Zdirectory_typeZ
is_changeduser_object_classZuser_object_class_filteruser_full_name_attrZuser_rdn_attrZuser_name_attrZuser_last_name_attrZuser_display_name_attrZuser_email_attrZuser_password_attrZuser_password_cryptuser_uid_attrZgroup_object_classZgroup_object_class_filterZgroup_name_attrZgroup_desc_attrZgroup_users_attrZuser_groups_attrr   r   r   r   _process_directory_type.   sL    

z)CmfAuthLdapPlugin._process_directory_typer   Tdepthnotifyemitorderno_filterc                   s   t  j|||||d|S )Nr7   )r,   save)r   r8   r9   r:   r;   r%   r&   r.   r   r   r<   X   s    zCmfAuthLdapPlugin.savec              
   C   sz   |   h}d| j d| j d| d}|rl|j| jj|ddrl|jD ]&}|  |j|rD|  W  5 Q R  S qDW 5 Q R X dS )u?   Авторизация через внешнюю системуz(&(ObjectClass=z)(=z))r   )Z
attributesN)r)   r3   r4   searchr*   r!   entriesZentry_dn)r   loginr   r'   Z_filterresr   r   r   signin]   s    

 zCmfAuthLdapPlugin.signinc                 O   s   |    dt S )N/)r   r   )r   r%   r&   r   r   r   get_log_filenameg   s    z"CmfAuthLdapPlugin.get_log_filenamec                 C   s   t d d }| jdgdD ]}zH|||}|rdtjjt||jjjdgd}tj	j|j
dW   S W q tk
r } z|jd| d|  W 5 d }~X Y qX q|S )	Nget_by_challenge_respzplugin.*r   r@   )Zext_idr   )r@   u?   Неудачная попытка авторизации login=z: )printlistrB   ZmodelsZ	CmfPersongetgetattrr5   r!   ZCmfAuthr@   r$   r   r#   )clsr@   r   rA   Zauth_pluginZpersoner   r   r   rE   j   s    ,z'CmfAuthLdapPlugin.get_by_challenge_resp)NN)__name__
__module____qualname__Z_CmfAuthLdapPlugin__connectr   r   Zui_meta_skipr   r   r   strr)   r-   r6   r<   rB   rD   classmethodrE   __classcell__r   r   r.   r   r      s   *
r   )Zloggingr   Zcmfr   Zcmf.includeZcmf.modules.logsr   Zcmf.modules.logs.log_configr   Zmodules.auth.fieldsr   r"   Zldap3r	   r
   r   r   r   r   r   r   r   r   r   <module>   s   