o
    j                     @   sj   d dl mZ d dlmZ d dlmZmZ d dlmZm	Z	 d dl
mZmZmZ eedZG dd deZd	S )
    )stat)connect)	UniTargetUniProto)urlparseparse_qs)str_oneint_onebool_one)pagesizeratec                   @   sr   e Zd ZdZdejddddddddddfdeded	ed
efddZdd Zdd Z	dd Z
edd Zdd ZdS )MSLDAPTargetaq  
	Describes the connection to the server.
	
	:param host: IP address or hostname of the server
	:type host: str
	:param port: port of the LDAP service running on the server
	:type port: int
	:param proto: Connection protocol to be used
	:type proto: :class:`UniProto`
	:param tree: The tree to connect to
	:type tree: str
	:param proxies: specifies what kind of proxy to be used
	:type proxies: :class:`List[UniProxyTarget]`
	:param timeout: connection timeout in seconds
	:type timeout: int
	:param ldap_query_page_size: Maximum number of elements to fetch in each paged_query call.
	:type ldap_query_page_size: int
	:param ldap_query_ratelimit: rate limit of paged queries. This will cause a sleep (in seconds) between fetching of each page of the query
	:type ldap_query_ratelimit: float
	:param dc_ip: Ip address of the kerberos server (if kerberos is used)
	:type dc_ip: str
	  N
     r   dnsdc_ipdomainhostnamec                 C   s6   t j| |||||||||
|	d || _|| _|| _d S )N)r   ssl_ctxproxiesr   r   r   )r   __init__treeldap_query_page_sizeldap_query_ratelimit)selfipportprotocolr   r   timeoutr   r   r   r   r   r   r    r    /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/msldap/commons/target.pyr   +   s    
zMSLDAPTarget.__init__c                 C   s   d|   | jf S )Nz
ldap/%s@%s)get_hostname_or_ipr   r   r    r    r!   to_target_string1   s   zMSLDAPTarget.to_target_stringc                 C   s6   | j tjkr	d}n| j tjkrd}d||  | jf S )Nldapsldapz
%s://%s:%s)r   r   CLIENT_SSL_TCP
CLIENT_TCPr"   r   )r   protor    r    r!   get_host4   s
   zMSLDAPTarget.get_hostc                 C   s   | j tjkS )N)r   r   r'   r#   r    r    r!   is_ssl;   s   zMSLDAPTarget.is_sslc                 C   s  t | }g }|j dD ]}||dd q|d dkr&tj}d}nM|d dkr2tj}d}nA|d d	kr>tj}d}n5|d d
krJtj}d}n)|d dkrSt	 |d dkr_tj}d}n|d dkrktj}d}ntd|d  |jry|j}|d u rtdd }|jdvr|j}t| ||t\}}|d d ur|d nd}	|d d ur|d nd}
t|j|j|j||j|j|	|
|j|j|j|j|jd}|S )N+-_r   LDAPr   LDAPSi|  LDAP_SSLLDAP_TCPLDAP_UDPGCi  GC_SSLi  zUnknown protocol! %szPort must be provided!)/ Nr   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   )r   schemeuppersplitappendreplacer   r(   r'   NotImplementedError
CLIENT_UDP	Exceptionr   pathr   from_urlmsldaptarget_url_paramsr   r   r   r   r   r   r   r   r   r   )connection_urlurl_eschemesitemr   r   r@   	unitargetextraparamsr   r   targetr    r    r!   rA   >   sf   
zMSLDAPTarget.from_urlc                 C   s*   d}| j D ]}|d|| j | f 7 }q|S )Nz==== MSLDAPTarget ====
z%s: %s
)__dict__)r   tkr    r    r!   __str__|   s   
zMSLDAPTarget.__str__)__name__
__module____qualname____doc__r   r(   strr   r$   r*   r+   staticmethodrA   rM   r    r    r    r!   r      s    6
=r   N)osr   sqlite3r   asysocks.unicomm.common.targetr   r   urllib.parser   r   %asysocks.unicomm.utils.paramprocessorr   r	   r
   rB   r   r    r    r    r!   <module>   s   