o
    j8                     @   sF   d dl Z d dlmZmZ d dlmZ g dZg dZG dd dZdS )    N)
MSLDAP_UACvn)bh_dt_convert)+accountExpiresbadPasswordTimebadPwdCountcncodePagecountryCodedisplayNamedistinguishedName	givenNameinitials
lastLogoff	lastLogonlastLogonTimestamp
logonCountnamedescriptionobjectCategoryobjectClass
objectGUID	objectSidprimaryGroupID
pwdLastSetsAMAccountNamesAMAccountTypesnuserAccountControluserPrincipalNamewhenChangedwhenCreatedmemberOfmemberservicePrincipalNamemsDS-AllowedToDelegateTo
adminCount	isDeletedmailtitlehomeDirectoryunixUserPassworduserPassword
unicodePwd
scriptPath
sIDHistory)$r   r   canLogonr   r   r   when_pw_changewhen_pw_expiresr   r   r!   r    r#   r"   r$   r   r   
UAC_SCRIPTUAC_ACCOUNTDISABLEUAC_LOCKOUTUAC_PASSWD_NOTREQDUAC_PASSWD_CANT_CHANGE#UAC_ENCRYPTED_TEXT_PASSWORD_ALLOWEDUAC_DONT_EXPIRE_PASSWDUAC_USE_DES_KEY_ONLYUAC_DONT_REQUIRE_PREAUTHUAC_PASSWORD_EXPIREDr&   r'   r(   r)   r*   r,   r+   r-   r.   c                   @   sZ   e Zd Zdd Zdd Zdd Zeddd	Zd
d Zdd Z	dd Z
dd Zdd ZdS )MSADUserc                 C   s  d | _ d | _d | _d | _d | _d | _d | _d | _d | _d | _	d | _
d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _ d | _!d | _"d | _#d | _$d | _%d | _&d | _'d | _(d | _)d | _*d | _+d | _,d | _-d | _.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-   r.   r/   r"   r#   r   r   r   r   r   r   r    r!   r   r   r   r   allowedtodelegateto
admincountr'   r	   r
   r1   r2   must_change_pwr0   )self rC   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/msldap/ldap_objects/aduser.py__init__    s^   
zMSADUser.__init__c                 C   s   t jt jt jt jt jg}|D ]}|| j@ rtjj  S q| j	t
 kr'tjjS |jt
 kr2tjjS |jjdk r<tjjS | j	|j jd dS )Ntzinfo)r   DONT_EXPIRE_PASSWDSMARTCARD_REQUIREDINTERDOMAIN_TRUST_ACCOUNTWORKSTATION_TRUST_ACCOUNTSERVER_TRUST_ACCOUNTr   datetimemaxr   	timedeltamin	maxPwdAgedaysreplace)rB   adinfoflagsflagrC   rC   rD   calc_PasswordMustChange_   s   
z MSADUser.calc_PasswordMustChangec                 C   s   t jt jt jt jt jt jg}|D ]
}|| j@ r dS qt j| j@ s3| j	j
d dtj   dk r3dS | jtjjkr<dS | jtj   dk rJdS dS )NFrG   r   T)r   ACCOUNTDISABLELOCKOUTrJ   rK   rL   rM   r   rI   r   rT   rN   nowtotal_secondsrA   rQ   )rB   rV   rW   rC   rC   rD   calc_CanLogont   s   
,zMSADUser.calc_CanLogonNc                 C   s,  t  }| d d|_| d d|_| d d|_| d d|_| d d|_| d d|_| d d|_| d d	|_	| d d
|_
| d d|_| d d|_| d d|_| d d|_| d d|_| d d|_| d d|_| d d|_| d d|_| d d|_| d d|_| d d|_| d d|_| d d|_| d d|_| d d|_| d d|_| d d|_| d d|_| d d|_| d d|_| d d |_ | d d!|_!| d d"|_"| d d#|_#| d d$|_$| d d%|_%| d d&|_&| d d'|_'| d d(|_(| d d)|_)| d d*|_*| d d+}|rt+||_,|r|j|j- j.d d,|_/|j0j1d-k rut2j2j3|_4n|j0d.kr|j|j0 j.d d,n|j|_4|5||_6|7 |_8|S )/N
attributesr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r$   r"   r#   r   r   r   r   r   r   r    r!   r   r   r   r	   r
   r'   r(   r)   r,   unixuserpasswordr-   r.   r/   r%   r&   r   rG   rF   r   )9r=   getr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r$   r"   r#   r   r   r   r   r   r   r    r!   r   r   r   r	   r
   r'   r(   r)   r,   r+   r-   r.   r/   r?   r@   r   r   	minPwdAgerT   r1   rR   rS   rN   rO   r2   rX   rA   r]   r0   )entryrU   aditemprC   rC   rD   	from_ldap   sj   
(
zMSADUser.from_ldapc                 C   sz  i }t | j|d< t | j|d< t | j|d< t | j|d< t | j|d< t | j|d< t | j|d< t | j|d< t | j	|d	< t | j
|d
< t | j|d< t | j|d< t | j|d< t | j|d< t | j|d< t | j|d< t | j|d< t | j|d< t | j|d< t | j|d< t | j|d< t | j|d< t | j|d< t | j|d< t | j|d< t | j|d< t | j|d< t | j|d< t | j|d< t | j|d< t | j|d< t | j |d < t | j!|d!< t | j"|d"< t | j#|d#< | j$|d$< t | j%|d%< t | j&|d&< t | j'|d'< t | j(|d(< t | j)|d)< t | j*|d*< t | j+|d+< t | j,|d,< t | j-|d-< |S ).Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r$   r"   r#   r   r   r   r   r   r   r    r!   r   r   r   r	   r
   r   r1   r2   rA   r@   r0   r'   r(   r)   r*   r,   r+   r-   r.   ).r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r$   r"   r#   r   r   r   r   r   r   r    r!   r   r   r   r	   r
   r   r1   r2   rA   r@   r0   r'   r(   r)   r*   r,   r+   r-   r.   rB   trC   rC   rD   to_dict   s^   
zMSADUser.to_dictc                 C   s<   | j d u s
| j dkrdS tt|dd  }| j |@ rdS dS )N zN/A   TF)r   getattrr   )rB   attr_sattrrC   rC   rD   uac_to_textflag   s   
zMSADUser.uac_to_textflagc                    s       fdd|D S )Nc                    s8   g | ]}|d d dkrt |nt  |qS )Nrj   UAC_)strr`   rn   ).0xrf   rC   rD   
<listcomp>  s   8 z$MSADUser.get_row.<locals>.<listcomp>)rh   )rB   attrsrC   rf   rD   get_row  s   zMSADUser.get_rowc                 C   sF  d}|d| j  7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d	| j 7 }|d
| j 7 }|d| j	 7 }|d| j
 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d | j 7 }|d!| j 7 }|d"| j  7 }|d#| j! 7 }|d$| j" 7 }|d%| j# 7 }|d&| j$ 7 }|d'| j% 7 }|d(| j& 7 }|d)| j' 7 }|d*| j( 7 }|S )+Nz	MSADUser
zsn: %s
zcn: %s
zdistinguishedName: %s
zinitials: %s
zdisplayName: %s
z	name: %s
zprimaryGroupID: %s
zsAMAccountName: %s
zuserPrincipalName: %s
zservicePrincipalName: %s
zmemberOf: %s
zmember: %s
zaccountExpires: %s
zbadPasswordTime: %s
zlastLogoff: %s
zlastLogon: %s
zlastLogonTimestamp: %s
zpwdLastSet: %s
zwhenChanged: %s
zwhenCreated: %s
zobjectGUID: %s
zobjectSid: %s
zbadPwdCount: %s
zlogonCount: %s
zsAMAccountType: %s
zcodePage: %s
zcountryCode: %s
zuserAccountControl: %s
zwhen_pw_change: %s
zwhen_pw_expires: %s
zmust_change_pw: %s
zadmincount: %s
zcanLogon: %s
zisDeleted: %s
z	mail: %s
z
title: %s
zhomeDirectory: %s
zuserPassword: %s
zunixUserPassword: %s
zunicodePwd: %s
zscriptPath: %s
))r   r   r   r   r   r   r   r   r   r$   r"   r#   r   r   r   r   r   r   r    r!   r   r   r   r   r   r	   r
   r   r1   r2   rA   r@   r0   r'   r(   r)   r*   r,   r+   r-   r.   rf   rC   rC   rD   __str__  sV   zMSADUser.__str__c                 C   s  | j }|d u rtd}g }| jd ur| jD ]	}|t| q| jg g t| jt| jddd d t| j g g t	| j
di dd| j | f d|dt| jddd d	t| j d
| ddtj|v dtj|v dtj|vdt| jdt| jdt| jdtj|v dtj|v dtj|v d| jd ur| jng dt	| jd| j| j| j| j| j| jt	| j |t| j!| j"| j#| j$| jdd dd
S )Nr   -   Fr   z%s@%sdomain	domainsiddistinguishednameunconstraineddelegationUAC_TRUSTED_FOR_DELEGATIONtrustedtoauthpasswordnotreqdenabled	lastlogonlastlogontimestamp
pwdlastsetdontreqpreauthpwdneverexpires	sensitiveserviceprincipalnameshasspndisplayname)emailr)   homedirectoryr   userpasswordr@   
sidhistorywhencreatedunixpasswordunicodepasswordlogonscriptsamaccountname	highvaluesfupassword)
_allowerdtodelegatetoAcesAllowedToDelegateObjectIdentifierPrimaryGroupSID
SPNTargetsHasSIDHistory	IsDeletedIsACLProtected
Properties)%r   r   r/   appendrp   r?   r   rsplitr   boolr'   r   upperr   rn   &TRUSTED_TO_AUTHENTICATE_FOR_DELEGATIONPASSWD_NOTREQDrY   r   r   r   r   DONT_REQUIRE_PREAUTHrI   NOT_DELEGATEDr$   r   r(   r)   r*   r   r,   r@   r!   r+   r-   r.   )rB   ry   uacr   sidrC   rC   rD   to_bh4  s   

"




	






zMSADUser.to_bhr>   )__name__
__module____qualname__rE   rX   r]   staticmethodre   rh   rn   ru   rv   r   rC   rC   rC   rD   r=      s    ?=1/r=   )	rN   msldap.ldap_objects.commonr   r   msldap.commons.utilsr   MSADUser_ATTRSMSADUser_TSV_ATTRSr=   rC   rC   rC   rD   <module>   s   

