o
    Óó·i�  ã                   @   sX   d Z ddlmZmZ ddgZG dd„ dƒZG dd„ dƒZG dd	„ d	ƒZG d
d„ dƒZdS )zM
L{twisted.python.fakepwd} provides a fake implementation of the L{pwd} API.
é    )ÚListÚOptionalÚUserDatabaseÚShadowDatabasec                   @   sP   e Zd ZdZdededededededed	d
fdd„Zd	efdd„Zdd„ Zd
S )Ú_UserRecordzÉ
    L{_UserRecord} holds the user data for a single user in L{UserDatabase}.
    It corresponds to the C{passwd} structure from the L{pwd} module.
    See that module for attribute documentation.
    ÚnameÚpasswordÚuidÚgidÚgecosÚhomeÚshellÚreturnNc                 C   s.   || _ || _|| _|| _|| _|| _|| _d S ©N©Úpw_nameZ	pw_passwdÚpw_uidZpw_gidZpw_gecosÚpw_dirZpw_shell)Úselfr   r   r	   r
   r   r   r   © r   ú\C:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-packages\twisted/python/fakepwd.pyÚ__init__   s   

z_UserRecord.__init__c                 C   ó   dS )Né   r   ©r   r   r   r   Ú__len__'   ó   z_UserRecord.__len__c                 C   s$   | j | j| j| j| j| j| jf| S r   r   ©r   Úindexr   r   r   Ú__getitem__*   s   ùøz_UserRecord.__getitem__©	Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚintr   r   r   r   r   r   r   r      s*    þýüûúùø	
÷r   c                   @   s¶   e Zd ZU dZee ed< dZeed< dZ	eed< dd	d
„Z
						ddededee dee dedededdfdd„Zdedefdd„Zdedefdd„Zdee fdd„ZdS )r   zí
    L{UserDatabase} holds a traditional POSIX user data in memory and makes it
    available via the same API as L{pwd}.

    @ivar _users: A C{list} of L{_UserRecord} instances holding all user data
        added to this database.
    Ú_usersiu'  Ú_lastUIDiêN  Ú_lastGIDr   Nc                 C   ó
   g | _ d S r   ©r'   r   r   r   r   r   C   ó   
zUserDatabase.__init__r   Ú ú/bin/shÚusernamer	   r
   r   r   r   c           	      C   s\   |du r| j }|  j d7  _ |du r| j}|  jd7  _t|||||||ƒ}| j |¡ dS )aâ  
        Add a new user record to this database.

        @param username: The value for the C{pw_name} field of the user
            record to add.

        @param password: The value for the C{pw_passwd} field of the user
            record to add.

        @param uid: The value for the C{pw_uid} field of the user record to
            add.

        @param gid: The value for the C{pw_gid} field of the user record to
            add.

        @param gecos: The value for the C{pw_gecos} field of the user record
            to add.

        @param home: The value for the C{pw_dir} field of the user record to
            add.

        @param shell: The value for the C{pw_shell} field of the user record to
            add.
        Né   )r(   r)   r   r'   Úappend)	r   r/   r   r	   r
   r   r   r   ZnewUserr   r   r   ÚaddUserF   s   "zUserDatabase.addUserc                 C   s$   | j D ]}|j|kr|  S qtƒ ‚)zH
        Return the user record corresponding to the given uid.
        N)r'   r   ÚKeyError)r   r	   Úentryr   r   r   Úgetpwuidq   s
   

ÿzUserDatabase.getpwuidr   c                 C   s@   t |tƒstdt|ƒ› �ƒ‚| jD ]}|j|kr|  S qtƒ ‚)zM
        Return the user record corresponding to the given username.
        z%getpwuam() argument must be str, not N)Ú
isinstancer%   Ú	TypeErrorÚtyper'   r   r3   )r   r   r4   r   r   r   Úgetpwnamz   s   


ÿzUserDatabase.getpwnamc                 C   ó   | j S )z4
        Return a list of all user records.
        Nr+   r   r   r   r   Úgetpwall…   ó   zUserDatabase.getpwall©r   N)r   NNr-   r-   r.   )r!   r"   r#   r$   r   r   Ú__annotations__r(   r&   r)   r   r%   r   r2   r5   r9   r;   r   r   r   r   r   6   s@   
 
øþýüûúùø	
÷+	c                   @   sX   e Zd ZdZdededededededed	ed
eddfdd„Zdefdd„Zdd„ ZdS )Ú_ShadowRecordzº
    L{_ShadowRecord} holds the shadow user data for a single user in
    L{ShadowDatabase}.  It corresponds to C{spwd.struct_spwd}.  See that class
    for attribute documentation.
    r/   r   Ú
lastChangeÚminÚmaxÚwarnÚinactÚexpireÚflagr   Nc
           
      C   s:   || _ || _|| _|| _|| _|| _|| _|| _|	| _d S r   ©	Úsp_namZsp_pwdZ	sp_lstchgZsp_minZsp_maxZsp_warnZsp_inactZ	sp_expireZsp_flag©
r   r/   r   r@   rA   rB   rC   rD   rE   rF   r   r   r   r   “   s   
z_ShadowRecord.__init__c                 C   r   )Né	   r   r   r   r   r   r   ©   r   z_ShadowRecord.__len__c              	   C   s,   | j | j| j| j| j| j| j| j| jf	| S r   rG   r   r   r   r   r   ¬   s   ÷
öz_ShadowRecord.__getitem__r    r   r   r   r   r?   Œ   s2    þýüûúùø	÷
ö
õr?   c                   @   st   e Zd ZU dZee ed< ddd„Zdeded	e	d
e	de	de	de	de	de	ddfdd„Z
dedefdd„Zdd„ ZdS )r   zý
    L{ShadowDatabase} holds a shadow user database in memory and makes it
    available via the same API as C{spwd}.

    @ivar _users: A C{list} of L{_ShadowRecord} instances holding all user data
        added to this database.

    @since: 12.0
    r'   r   Nc                 C   r*   r   r+   r   r   r   r   r   Ç   r,   zShadowDatabase.__init__r/   r   r@   rA   rB   rC   rD   rE   rF   c
           
      C   s$   | j  t|||||||||	ƒ	¡ dS )a‘  
        Add a new user record to this database.

        @param username: The value for the C{sp_nam} field of the user record to
            add.

        @param password: The value for the C{sp_pwd} field of the user record to
            add.

        @param lastChange: The value for the C{sp_lstchg} field of the user
            record to add.

        @param min: The value for the C{sp_min} field of the user record to add.

        @param max: The value for the C{sp_max} field of the user record to add.

        @param warn: The value for the C{sp_warn} field of the user record to
            add.

        @param inact: The value for the C{sp_inact} field of the user record to
            add.

        @param expire: The value for the C{sp_expire} field of the user record
            to add.

        @param flag: The value for the C{sp_flag} field of the user record to
            add.
        N)r'   r1   r?   rI   r   r   r   r2   Ê   s
   (ÿÿzShadowDatabase.addUserc                 C   sB   t |tƒstdt|ƒ› �ƒ‚| jD ]}|j|kr|  S qt|ƒ‚)zT
        Return the shadow user record corresponding to the given username.
        z%getspnam() argument must be str, not N)r6   r%   r7   r8   r'   rH   r3   )r   r/   r4   r   r   r   Úgetspnamø   s   


ÿzShadowDatabase.getspnamc                 C   r:   )z;
        Return a list of all shadow user records.
        Nr+   r   r   r   r   Úgetspall  r<   zShadowDatabase.getspallr=   )r!   r"   r#   r$   r   r?   r>   r   r%   r&   r2   rK   rL   r   r   r   r   r   º   s6   
 

þýüûúùø	÷
ö
õ.N)	r$   Útypingr   r   Ú__all__r   r   r?   r   r   r   r   r   Ú<module>   s   (V.