o
    �õ±j  ã                   @   sT   d dl mZ d dlZd dlZg d¢Zd dlZd dlZG dd„ dƒZG dd„ dƒZdS )é    )Ú
AVPAIRTypeN)
Ú
domainnameÚcomputernameÚdnsforestnameÚdnscomputernameÚdnsdomainnameÚ
local_timeÚos_major_versionÚos_minor_versionÚos_buildÚos_guessc                   @   sT   e Zd Zdd„ Zedd„ ƒZedd„ ƒZdd„ Zd	d
„ Zedd„ ƒZ	edd„ ƒZ
dS )ÚFILETIMEc                 C   s   d | _ d | _d | _d S ©N)ÚdwLowDateTimeÚdwHighDateTimeÚdatetime©Úself© r   úŸ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/asyauth/protocols/ntlm/structures/serverinfo.pyÚ__init__   s   
zFILETIME.__init__c                 C   s   t  t | ¡¡S r   )r   Úfrom_bufferÚioÚBytesIO)Údatar   r   r   Ú
from_bytes   s   zFILETIME.from_bytesc                 C   sB   t ƒ }t|  ¡ ƒ}|d d }|d@ |_|d? d@ |_| ¡  |S )Né€–˜ ì     }*{Gíì   ÿÿ é    )r   ÚintÚ	timestampr   r   Úcalc_dt)ÚdtÚtÚunix_timestampÚfiletime_valuer   r   r   Úfrom_datetime   s   
zFILETIME.from_datetimec                 C   s8   | j d u s
| jd u rtdƒ‚| j  dd¡| j dd¡ S )Nz0FILETIME values cannot be None for serializationé   Úlittle)r   r   Ú
ValueErrorÚto_bytesr   r   r   r   r+   $   s   zFILETIME.to_bytesc                 C   sv   | j dkr| jdkrt ddddd¡| _d S | j d> | j }|dkr.t ddddd¡| _d S tj |d d ¡| _d S )	Nr   i¸  é   r   r   i²  r   r   )r   r   r   Úutcfromtimestamp)r   Úftr   r   r   r"   )   s   zFILETIME.calc_dtc                 C   s&   t ƒ }| d |_| d |_| ¡  |S )Nr   r   )r   r   r   r"   )Údr$   r   r   r   Ú	from_dict3   s
   

zFILETIME.from_dictc                 C   sB   t ƒ }tj|  d¡ddd�|_tj|  d¡ddd�|_| ¡  |S )Nr(   r)   F)Ú	byteorderÚsigned)r   r    r   Úreadr   r   r"   )Úbuffr$   r   r   r   r   ;   s
   zFILETIME.from_bufferN)Ú__name__Ú
__module__Ú__qualname__r   Ústaticmethodr   r'   r+   r"   r0   r   r   r   r   r   r      s    



r   c                   @   sJ   e Zd Zdd„ Zedd„ ƒZdd„ Zddd	„Zd
d„ Zdd„ Z	dd„ Z
dS )ÚNTLMServerInfoc                 C   sF   d | _ d | _d | _d | _d | _d | _d | _d | _d | _d | _	d | _
d S r   )r   r   r   r   r   r   r	   r
   r   r   Úcredsr   r   r   r   r   F   s   
zNTLMServerInfo.__init__c                 C   s.  t ƒ }| j}|D ][}|tjkr|| |_q|tjkr || |_q|tjkr+|| |_q|tj	kr6|| |_
q|tjkrA|| |_q|tjkrct|| tƒrWt || ¡j|_qt|| tƒrc|| |_q| jd ur•| jjd urt| jj|_| jjd ur| jj|_| jjd urŠ| jj|_| jjd ur•| jj|_|S r   )r9   Ú
TargetInfor   ÚMsvAvNbDomainNamer   ÚMsvAvNbComputerNamer   ÚMsvAvDnsDomainNamer   ÚMsvAvDnsComputerNamer   ÚMsvAvDnsTreeNamer   ÚMsvAvTimestampÚ
isinstanceÚbytesr   r   r   r   ÚVersionÚProductMajorVersionr	   ÚProductMinorVersionr
   ÚProductBuildr   ÚWindowsProductr   )Ú	challengeÚsiÚtiÚkr   r   r   Úfrom_challengeS   s:   






€




zNTLMServerInfo.from_challengec                 C   sr   | j | j| j| j| j| j| j| jd d dœ
}| jd ur | jj	|d< | j
d ur+| j
j	|d< | jd ur7| j ¡ |d< |S )N)
r   r   r   r   r   r   r   r   r	   r
   r	   r
   r:   )r   r   r   r   r   r   r   r   r	   Únamer
   r:   Úto_dict©r   r$   r   r   r   rO   t   s$   ö


zNTLMServerInfo.to_dictú	c                    s*   dd„ ‰|   ¡ ‰ | ‡ ‡fdd„tD ƒ¡S )Nc                 S   s   | d u rdS t | ƒS )NÚ )Ústr)Úxr   r   r   ÚvnŠ   s   z!NTLMServerInfo.to_tsv.<locals>.vnc                    s   g | ]}ˆˆ | ƒ‘qS r   r   )Ú.0rT   ©r/   rU   r   r   Ú
<listcomp>�   s    z)NTLMServerInfo.to_tsv.<locals>.<listcomp>)rO   ÚjoinÚNTLMSERVERINFO_TSV_HDR)r   Ú	separatorr   rW   r   Úto_tsv‰   s   zNTLMServerInfo.to_tsvc                 C   s*   d}| j D ]}|d|| j | f 7 }q|S )Nz=== Server Info ====
z%s: %s
)Ú__dict__)r   r$   rL   r   r   r   Ú__str__’   s   
zNTLMServerInfo.__str__c                 C   s   t  |  ¡ ¡S r   )ÚjsonÚdumpsrO   r   r   r   r   Úto_json™   s   zNTLMServerInfo.to_jsonc                 C   sº   d}|d| j  7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }| jd urA|d	| j ¡  7 }| j	d urN|d
| j	j
 7 }| jd ur[|d| jj
 7 }|S )NrR   z[domainname,%s]z[computername,%s]z[dnscomputername,%s]z[dnsdomainname,%s]z[dnsforestname,%s]z[os_build,%s]z[os_guess,%s]z[local_time,%s]z[os_major,%s]z[os_minor,%s])r   r   r   r   r   r   r   r   Ú	isoformatr	   Úvaluer
   rP   r   r   r   Úto_grepœ   s   


zNTLMServerInfo.to_grepN)rQ   )r5   r6   r7   r   r8   rM   rO   r\   r^   ra   rd   r   r   r   r   r9   E   s    
 
	r9   )Ú(asyauth.protocols.ntlm.structures.avpairr   r   r_   rZ   r   r   r9   r   r   r   r   Ú<module>   s   8