o
    Žõ±jå8  ã                   @   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+¡}|�r”t+|ƒ|_,|�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   

