o
    j"                     @   s   d dl Z d dlZd dlmZ d dlmZ d dl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ZdegfdegfdegfdegfdegfdegfdZG dd dZdS )    N)KerberosTarget)KerberosCredential)KerberosSecretType)AIOKerberosClient)KerbrosClient)urlparseparse_qs)UniProto)UniProxyTarget)EncryptionTypea7  ==== Extra Help ====
   kerberos connection url secret types: 
   - Plaintext: "pw" or "pass" or "password"
   - NT hash: "nt"
   - RC4 key: "rc4"
   - AES128/256 key: "aes"
   - CCACHE file: "ccache"
   - SSPI: "sspi"
   
   Example:
   - Plaintext + SOCKS5 proxy:
      kerberos+password://domain\user:SecretPassword@127.0.0.1/proxytype=socks5&proxyhost=127.0.0.1&proxyport=1080
   - Plaintext:
      kerberos+password://domain\user:SecretPassword@127.0.0.1
      kerberos+pw://domain\user:SecretPassword@127.0.0.1
      kerberos+pass://domain\user:SecretPassword@127.0.0.1
   - NT hash:
      kerberos+nt://domain\user:921a7fece11f4d8c72432e41e40d0372@127.0.0.1
   - SSPI:
      TEST/user/sspi:@192.168.1.1
   - RC4 key:
      kerberos+rc4://domain\user:921a7fece11f4d8c72432e41e40d0372@127.0.0.1
   - AES key:
      kerberos+aes://domain\user:921a7fece11f4d8c72432e41e40d0372@127.0.0.1
   - CCACHE file:
      kerberos+ccache://domain\user:creds.ccache@127.0.0.1
   - KEYTAB file:
      kerberos+keytab://domain\user:creds.keytab@127.0.0.1
   - PFX file:
      kerberos+pfx://TEST.corp\Administrator:admin@10.10.10.2/?certdata=test.pfx
   - PFX string (b64):
      kerberos+pfxstr://TEST.corp\Administrator:admin@10.10.10.2/?certdata=BASE64DATA
   - No auth (preauth not req):
      kerberos+none://TEST.corp\asrepuser@10.10.10.2/
timeoutcertdatakeydataetype	certstore
commonname)r   r   r   r   r   cnc                   @   sv   e Zd Zddg ddfdefddZdd Zdd Zd	d
 Zdd Zdd Z	de
fddZde
fddZedd ZdS )KerberosClientFactoryNtargetc                 C   sf   d | _ d | _d | _d | _d | _d| _d | _d | _tj	| _
d| _d| _|| _|| _|| _|| _|| _d S )NMY
   X   )domainusernamesecret_typesecretr   r   r   dc_ipr	   
CLIENT_TCPprotocolr   portr   
credentialproxiesr   r   )selfr   r    r!   r   r    r#   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/minikerberos/common/factory.py__init__@   s    
zKerberosClientFactory.__init__c                 C   sV   | j d ur| j jd u r| jd ur| j| j _t| j S t| j| jtj| j| j	d}|S )N)r   r   r!   r   )
r   r!   copydeepcopyr   r   r   r	   r   r   r"   resr#   r#   r$   
get_targetT   s   

z KerberosClientFactory.get_targetc                 C   s   |   S N)	get_credsr"   r#   r#   r$   get_credentialb   s   z$KerberosClientFactory.get_credentialc                 C   s  | j d urt| j S | jtjkrt| j| j	| j
S | jtjkr't| jS | jtjkr5t| j| jS | jtjkrHtj| j| j| j	| j
dS | jtjkrYtj| j| j	| j
dS | jtjkrltj| j| j| j	| j
dS | jtjkrtj| j| jd | j	| j
dS t }| j	|_	| j
|_
| jtjtjtjfv r| j|_n| jtjtj fv rt!| jdkrt"d| j | j|_#| j|_$n| jtj%tj&tj'fv r| jtj'krt!| jdkr| j|_(nt!| jdkr| j|_)n~t"d| j | jtj%krt!| jdkrt"d| j | j|_(n\t!| jdkrt"d	| j | j|_)nH| jtj*kr6t!| jd
kr1t"d| j | j|_+n-| jtj,tj-fv rTt!| jdkrOt"d| j | j|_.n| jtj/kr_d|_0nt"d| j1d urpt2| j1g|_3|S )N)r   r   )	principalrealm)certstore_namedhparamsr   r       zIncorrect RC4/NT key! %s@   zIncorrect AES key! %szIncorrect AES128 key! %szIncorrect AES256 key! %s   zIncorrect DES key! %s   zIncorrect DES3 key! %sTzMissing/unknown secret_type!)4r    r&   r'   r   r   KEYTABr   from_keytabr   r   r   KIRBI
from_kirbiPFXSTRfrom_pfx_stringr   PFXfrom_pfx_fileCCACHEfrom_ccachePEMfrom_pem_filer   	CERTSTOREfrom_windows_certstorer   r   PASSWORDPWPASSpasswordNTRC4len	Exceptionnt_hashkerberos_key_rc4AES128AES256AESkerberos_key_aes_128kerberos_key_aes_256DESkerberos_key_desDES3TDESkerberos_key_des3NONE	nopreauthr   r   override_etypesr(   r#   r#   r$   r,   e   sl   








zKerberosClientFactory.get_credsc                 C      t |  |  S r+   )r   r,   r*   r-   r#   r#   r$   
get_client      z KerberosClientFactory.get_clientc                 C   r\   r+   )r   r,   r*   r-   r#   r#   r$   get_client_blocking   r^   z)KerberosClientFactory.get_client_blockingcredc                 C      t t||  S r+   )r   r&   r'   r*   r"   r`   r#   r#   r$   get_client_newcred      z(KerberosClientFactory.get_client_newcredc                 C   ra   r+   )r   r&   r'   r*   rb   r#   r#   r$   get_client_newcred_blocking   rd   z1KerberosClientFactory.get_client_newcred_blockingc           
      C   sV  t  }t| }|j|_|j d}|d dvr!td|d  |d ddu r.t	j
|_|d }|dd	krL| d
rL|dd }t |_zt||_W n	   td| |jd ury|jdd	kru|jd\|_|_ntd|jtjkrtd|jd u r|j|_|jd urt|j|_t|j}d }|D ]-}|dkr|| d }|tv r|| d }t| d D ]}	|	|}t|t| d | qq|d urt||j|j|_|jd u r|jtjkrtd|jtjkrtj|_t |_|jd u rtd|jd u rtd|jd u r)|jtj kr)|jtj!tjfvr)td|S )N+r   )KERBEROSzKERBEROS-TCP, KERBEROS-UDPKRB5zKRB5-UDPzKRB5-TCPzUnknown protocol! %sUDPT   -z-PROMPTzUnknown secret type! %s\zDomain missing from username!zMissing username!	proxytypezMissing secret_type!zMissing target hostname or IP!zMissing secret/password!)"r   r   hostnamer   schemeuppersplitrL   endswithr	   
CLIENT_UDPr   findgetpassr   r   r   r   r   rC   rH   r   intr   queryKerberosClientFactory_param2varsetattrr
   from_url_paramsr!   PWPROMPTrE   rY   rA   )
url_strr)   urlschemesttyperx   
proxy_typekdatacr#   r#   r$   from_url   sr   







zKerberosClientFactory.from_url)__name__
__module____qualname__r   r%   r*   r.   r,   r]   r_   r   rc   re   staticmethodr   r#   r#   r#   r$   r   ?   s    @r   )rv   r&   minikerberos.common.targetr   minikerberos.common.credsr   minikerberos.common.constantsr   minikerberos.aioclientr   minikerberos.clientr   urllib.parser   r   asysocks.unicomm.common.targetr	   asysocks.unicomm.common.proxyr
   minikerberos.protocol.constantsr   kerberos_url_help_epilogrw   strry   r   r#   r#   r#   r$   <module>   s(   &	