o
    j@3                     @   s   d dl Z d dlZd dlZd dlmZmZmZ d dlmZm	Z	m
Z
 d dlmZmZmZ d dlmZmZmZ G dd d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 g dZdS )    N)urlparseparse_qsunquote)str_oneint_onebool_one)asyauthSecretasyauthProtocolasyauthSubProtocol)SubProtocolSubProtocolNativeSubProtocolSSPIc                   @   s   e Zd Zdddejde fdedededededefdd	Z	d!d
dZ
edd Zedd Zdd Zedd Zedd ZedefddZedefddZedefddZed"dededefdd ZdS )#UniCredentialNsecretusernamedomainstypeprotocolsubprotocolc           	      K   s   || _ || _|| _|| _|| _|| _|| _|tjtj	fv r#tj
| _d S |tjkr7tj
| _t| j | _d S |tjkratj
| _t| j| _t| jd dkrYt| jdkrYd S | j | _d S |tjkrvdd l}tj
| _|d| _d S d S )N   r   2   zEnter password: )r   r   r   r   r   r   metadatar   PASSPWPASSWORDPWB64base64	b64decodedecodePWHEXbytesfromhexlenPWPROMPTgetpass)	selfr   r   r   r   r   r   kwargsr$    r'   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/asyauth/common/credentials/__init__.py__init__
   s.   

 
zUniCredential.__init__c           	      K   s  |d u r| j }|tjkr4| jjtjkr-ddlm} || j	| j
| j| jfd| ji| S td| j |tjkrb| jjtjkr[ddlm} || j	| j
| j| jf| j|d| S td| j |tjkr| jjtjkrddlm} || jdd|i|g| jd	 S td| j |tjkr| jjtjkrdd
lm} || jdd|i|g| jd	 S td| j |tjkr| jjtjkrddlm} || jdd|i|g| jd	 S td| j t| S )Nr   NTLMCredentialr   zUnsupported subprotocol "%s"KerberosCredential)r   targetSPNEGOCredentialr.   )r   SPNEGOEXCredentialCREDSSPCredentialr'   )r   r	   NTLMr   typer
   NATIVEasyauth.common.credentials.ntlmr+   r   r   r   r   build_context	ExceptionKERBEROS#asyauth.common.credentials.kerberosr-   SPNEGO!asyauth.common.credentials.spnegor0   SPNEGOEX#asyauth.common.credentials.spnegoexr2   CREDSSP"asyauth.common.credentials.credsspr4   copydeepcopy)	r%   r   r.   r&   r+   r-   r0   r2   r4   r'   r'   r(   r9   '   sP   
(


$
$
$
zUniCredential.build_contextc                   C   s   t tttttdS )N)timeoutdnsdnscdcdccrealmc)r   r   r'   r'   r'   r(   get_url_paramsY   s   zUniCredential.get_url_paramsc                  C   s  ddl m}m} d }d }d }tj}tj}t }t| }	|	 }
|
	 D ]\}}t
|tu r3t||
|< q#|	jdi |
}	|	j d}t|dkrVzt|}W nn   Y ni|d dd}zt|}W nZ   |d d}t|dkrzt|d }W n   t|d }t|d }Y n/t|d }d }|	jd urt|	j}t||}nzt|d }tj}W n
   t|d }Y Y |	jd ur|	jddkr|	jd\}}|d	krd }nd }|	j}|	j}d }|tjkrdd
lm} |}n|tjtjfv rddl m!} |}i }|d ur|" }t#" }t$%t#" d }t$%|& d }d}|	jd ur^t|	j}|D ]+}|'ddu r>d}||v rM|| || ||< ||v r\|| || ||< q2|tjtjfv r|||||fd|i|}|tjkr~tj|_(|S |tjkrd }|du rddl)m*} |j|	j|	j+dd}d }|d d ur||d d|j,||d |d d}d }|d d ur||d d|j,||d |d d}|d }|||||||d |d |d |d ||||d dS t#||||||S ) Nr   	UniTargetUniProto+   -_\.r,   r*   FproxyTr   )UniProxyTargetX   )endpoint_portrH   rF   )proxiesrF   dc_iprI   rG   etypealtname	altdomaincertdatakeydatarJ   )	r.   r]   r^   r_   r`   etypesr   cross_targetcross_realmr'   )-asysocks.unicomm.common.targetrM   rN   r   NONEr	   r   r   _asdictitemsr6   strr   _replaceschemeuppersplitr"   replacer
   queryr   r   from_url_paramsr5   r   findpasswordr;   r<   r-   SICILYr8   r+   rK   r   dictfromkeyskeys
startswithr   asysocks.unicomm.common.proxyrW   hostname
CLIENT_TCP) connection_urlrM   rN   r   r   r   r   r   r   url_eurl_dictpropvalschemes	auth_tagssptrn   credobjr-   r+   extraparamsparamstemplateparamsextraproxy_presentkresrZ   rW   r.   rb   ra   r'   r'   r(   from_urld   s   









""zUniCredential.from_urlc                 C   s^   dd l }d}| jD ]#}| j| }t||jr|}n	t||jr"|j}|d|t|f 7 }q	|S )Nr   z==== UniCredential ====
z%s: %s
)enum__dict__
isinstanceIntFlagEnumnamerh   )r%   r   tr   r~   r'   r'   r(   __str__   s   

zUniCredential.__str__c                  C   sP   t  dkr
tdddlm}  ddlm} |  }|d|d |d tjt	 d	S )
zJReturns an NTLM credential object matching the current user (Windows only)Windows,This function only works on Windows systems!r   get_logon_infor*   Nr   r   )r   r   )
platformsystemr:   winacl.functions.highlevelr   r8   r+   r   re   r   )r   r+   userinfor'   r'   r(   get_sspi_ntlm   s   zUniCredential.get_sspi_ntlmc                  C   s   t  dkr
tdddlm}  ddlm} ddlm}m	} |  }||d d|j
|d |d	 d
}|d|d |d	 tj|t dS )zMReturns a Kerberos credential object matching the current user (Windows only)r   r   r   r   r,   rL   logonserverrX   dnsdomainname)r[   r   Nr   )r   r.   r   )r   r   r:   r   r   r<   r-   rd   rM   rN   ry   r   re   r   )r   r-   rM   rN   r   dctargetr'   r'   r(   get_sspi_kerberos  s*   zUniCredential.get_sspi_kerberosauthtypec                 C   sL   t  dkr
td|  dkrt }|S |  dkr"t }|S td)Nr   r   r5   r;   z0Only NTLM or KERBEROS auth types supported here!)r   r   r:   rk   r   r   r   )r   r   r'   r'   r(   get_sspi&  s   zUniCredential.get_sspic                 C   4   t  dkr
tdddlm} t| }||gS )zKReturns a SPNEGO credential object matching the current user (Windows only)r   r   r   r/   )r   r   r:   r>   r0   r   r   )r   r0   r   r'   r'   r(   get_sspi_spnego2  
   

zUniCredential.get_sspi_spnegoc                 C   r   )zLReturns a CREDSSP credential object matching the current user (Windows only)r   r   r   r3   )r   r   r:   rB   r4   r   r   )r   r4   r   r'   r'   r(   r   ;  r    
authprotosr   c                 C   s   d}|| ||f S )z5Returns user help regarding the credential url formata  
URL format:

	protocol+authproto-secrettype://[domain]\username:secret@[ip|hostname]:[port]/?param1=value1&param2=value2

protocol: The protocol to use (see below)
	%s
authproto (protocol dependent): 
	%s
username: The username to authenticate with
secret: The secret to authenticate with (depends on secrettype)
domain: The domain of the user
secrettype: The type of the secret (see below)
	password/pw/pass: A plaintext password
	pwb64: A base64 encoded password
	pwprompt: Password will be prompted for on STDIN
	pwhex: A hex encoded password
	nt: NT hash
	==== Kerberos only ====
	rc4: RC4 key (Kerberos only)
	aes: AES key (any size, Kerberos only)
	aes128: AES128 key (Kerberos only)
	aes256: AES256 key (Kerberos only)
	ccache: ccache file name (only local directory)
	ccachehex: A hex encoded ccache file
	ccacheb64: A base64 encoded ccache file
	keytab: keytab file name (only local directory)
	keytabhex: A hex encoded keytab file
	keytabb64: A base64 encoded keytab file
	pfx: pfx file name (only local directory)
	pfxhex: A hex encoded pfx file
	pfxb64: A base64 encoded pfx file
	pem: pem file name (only local directory)
	pemhex: A hex encoded pem file
	pemb64: A base64 encoded pem file
	certstore: Use Windows certificate store (Windows only, Kerberos only)
	kirbi: kirbi file name (only local directory)
	kirbihex: A hex encoded kirbi file
	kirbib64: A base64 encoded kirbi file
	==== SSH Only ====
	sshprivkey: ssh private key file name (only local directory)
	sshprivkeystr: ssh private key file data in string format
	sshprivkeyb64: A base64 encoded ssh private key file

Extra parameters are in the form of param=value. The following parameters are supported:
	altname: Alternative name for certificate authentication
	altdomain: Alternative domain for certificate authentication
	etype: Supported encryption type to use (Kerberos only)
	dc: The domain controller to use (Kerberos only)
	dns: Don't use this.
	%s
r'   )r   r   r   templater'   r'   r(   get_helpD  s   4zUniCredential.get_help)NN)r   r   r   )__name__
__module____qualname__r   re   r   rh   r	   r   r)   r9   staticmethodrK   r   r   r   r   r   r   r   r'   r'   r'   r(   r   	   s*    4
2


 

r   r3   r,   r*   r/   r1   )r4   r-   r+   r0   r2   )r   r   rC   urllib.parser   r   r   asyauth.utils.paramprocessorr   r   r   asyauth.common.constantsr   r	   r
   asyauth.common.subprotocolsr   r   r   r   rB   r4   r<   r-   r8   r+   r>   r0   r@   r2   __all__r'   r'   r'   r(   <module>   s       y