
    .
0hC                         d Z ddlZddlZddlmZ d Z G d d          Z G d d          Z G d	 d
          Z G d d          Z	 G d d          Z
dS )z Firebase user import sub module.    N)_auth_utilsc                 N    t          j        |                                           S N)base64urlsafe_b64encodedecode)bytes_values    V/var/www/html/nourish/venv/lib/python3.11/site-packages/firebase_admin/_user_import.py
b64_encoder      s    #K0077999    c                   .   e Zd ZdZddZed             Zej        d             Zed             Zej        d             Zed             Z	e	j        d	             Z	ed
             Z
e
j        d             Z
ed             Zej        d             Zd ZdS )UserProvideraD  Represents a user identity provider that can be associated with a Firebase user.

    One or more providers can be specified in an ``ImportUserRecord`` when importing users via
    ``auth.import_users()``.

    Args:
        uid: User's unique ID assigned by the identity provider.
        provider_id: ID of the identity provider. This can be a short domain name or the identifier
            of an OpenID identity provider.
        email: User's email address (optional).
        display_name: User's display name (optional).
        photo_url: User's photo URL (optional).
    Nc                 L    || _         || _        || _        || _        || _        d S r   )uidprovider_idemaildisplay_name	photo_url)selfr   r   r   r   r   s         r
   __init__zUserProvider.__init__*   s+    &
("r   c                     | j         S r   _uidr   s    r
   r   zUserProvider.uid1   
    yr   c                 <    t          j        |d          | _        d S NTrequiredr   validate_uidr   r   r   s     r
   r   zUserProvider.uid5       ,S4@@@			r   c                     | j         S r   )_provider_idr   s    r
   r   zUserProvider.provider_id9   s      r   c                 <    t          j        |d          | _        d S r   )r   validate_provider_idr%   )r   r   s     r
   r   zUserProvider.provider_id=   s!    '<[SWXXXr   c                     | j         S r   _emailr   s    r
   r   zUserProvider.emailA   
    {r   c                 8    t          j        |          | _        d S r   r   validate_emailr*   r   r   s     r
   r   zUserProvider.emailE       !077r   c                     | j         S r   _display_namer   s    r
   r   zUserProvider.display_nameI       !!r   c                 8    t          j        |          | _        d S r   r   validate_display_namer3   r   r   s     r
   r   zUserProvider.display_nameM       (>|LLr   c                     | j         S r   
_photo_urlr   s    r
   r   zUserProvider.photo_urlQ   
    r   c                 8    t          j        |          | _        d S r   r   validate_photo_urlr<   r   r   s     r
   r   zUserProvider.photo_urlU       %8CCr   c                     | j         | j        | j        | j        | j        d}d |                                D             S )N)rawId
providerIddisplayNamer   photoUrlc                     i | ]
\  }}|||S r    .0kvs      r
   
<dictcomp>z(UserProvider.to_dict.<locals>.<dictcomp>a       BBBAAM1MMMr   )r   r   r   r   r   itemsr   payloads     r
   to_dictzUserProvider.to_dictY   sH    X*,Z
 
 CBBBBBr   )NNN)__name__
__module____qualname____doc__r   propertyr   setterr   r   r   r   rS   rI   r   r
   r   r      sp        # # # #   X 	ZA A ZA ! ! X! Y Y Y   X \8 8 \8 " " X" M M M   X D D DC C C C Cr   r   c                   B   e Zd ZdZ	 	 	 ddZed             Zej        d             Zed             Zej        d             Zed             Z	e	j        d	             Z	ed
             Z
e
j        d             Z
ed             Zej        d             Zed             Zej        d             Zed             Zej        d             Zed             Zej        d             Zed             Zej        d             Zed             Zej        d             Zd ZdS )ImportUserRecordar  Represents a user account to be imported to Firebase Auth.

    Must specify the ``uid`` field at a minimum. A sequence of ``ImportUserRecord`` objects can be
    passed to the ``auth.import_users()`` function, in order to import those users into Firebase
    Auth in bulk. If the ``password_hash`` is set on a user, a hash configuration must be
    specified when calling ``import_users()``.

    Args:
        uid: User's unique ID. Must be a non-empty string not longer than 128 characters.
        email: User's email address (optional).
        email_verified: A boolean indicating whether the user's email has been verified (optional).
        display_name: User's display name (optional).
        phone_number: User's phone number (optional).
        photo_url: User's photo URL (optional).
        disabled: A boolean indicating whether this user account has been disabled (optional).
        user_metadata: An ``auth.UserMetadata`` instance with additional user metadata (optional).
        provider_data: A list of ``auth.UserProvider`` instances (optional).
        custom_claims: A ``dict`` of custom claims to be set on the user account (optional).
        password_hash: User's password hash as a ``bytes`` sequence (optional).
        password_salt: User's password salt as a ``bytes`` sequence (optional).

    Raises:
        ValueError: If provided arguments are invalid.
    Nc                     || _         || _        || _        || _        || _        || _        || _        || _        || _        || _	        |	| _
        |
| _        d S r   )r   r   r   phone_numberr   password_hashpassword_saltemail_verifieddisableduser_metadataprovider_datacustom_claims)r   r   r   r`   r   r]   r   ra   rb   rc   rd   r^   r_   s                r
   r   zImportUserRecord.__init__~   sf     
(("**, ***r   c                     | j         S r   r   r   s    r
   r   zImportUserRecord.uid   r   r   c                 <    t          j        |d          | _        d S r   r    r"   s     r
   r   zImportUserRecord.uid   r#   r   c                     | j         S r   r)   r   s    r
   r   zImportUserRecord.email   r+   r   c                 8    t          j        |          | _        d S r   r-   r/   s     r
   r   zImportUserRecord.email   r0   r   c                     | j         S r   r2   r   s    r
   r   zImportUserRecord.display_name   r4   r   c                 8    t          j        |          | _        d S r   r6   r8   s     r
   r   zImportUserRecord.display_name   r9   r   c                     | j         S r   )_phone_numberr   s    r
   r]   zImportUserRecord.phone_number   r4   r   c                 8    t          j        |          | _        d S r   )r   validate_phonerl   )r   r]   s     r
   r]   zImportUserRecord.phone_number   s    (7EEr   c                     | j         S r   r;   r   s    r
   r   zImportUserRecord.photo_url   r=   r   c                 8    t          j        |          | _        d S r   r?   rA   s     r
   r   zImportUserRecord.photo_url   rB   r   c                     | j         S r   )_password_hashr   s    r
   r^   zImportUserRecord.password_hash       ""r   c                 :    t          j        |d          | _        d S )Nr^   )r   validate_bytesrr   )r   r^   s     r
   r^   zImportUserRecord.password_hash       )8XXr   c                     | j         S r   )_password_saltr   s    r
   r_   zImportUserRecord.password_salt   rs   r   c                 :    t          j        |d          | _        d S )Nr_   )r   ru   rx   )r   r_   s     r
   r_   zImportUserRecord.password_salt   rv   r   c                     | j         S r   )_user_metadatar   s    r
   rb   zImportUserRecord.user_metadata   rs   r   c                     ||j         nd }||j        nd }t          j        |d          | _        t          j        |d          | _        || _        d S )Ncreation_timestamplast_sign_in_timestamp)r}   r~   r   validate_timestamp_created_at_last_login_atr{   )r   rb   
created_atlast_login_ats       r
   rb   zImportUserRecord.user_metadata   sg    9F9R]55X\
@M@Y<<_c&9*FZ[[)<35 5+r   c                     | j         S r   )_provider_datar   s    r
   rc   zImportUserRecord.provider_data   rs   r   c                     |G	 t          d |D                       rt          d          n# t          $ r t          d          w xY w|| _        d S )Nc                 :    g | ]}t          |t                     S rI   )
isinstancer   rK   ps     r
   
<listcomp>z2ImportUserRecord.provider_data.<locals>.<listcomp>   s%    OOOAJq,777OOOr   z0One or more provider data instances are invalid.zprovider_data must be iterable.)any
ValueError	TypeErrorr   )r   rc   s     r
   rc   zImportUserRecord.provider_data   s    $DOOOOOPP Y$%WXXXY D D D !BCCCD+s	   (- Ac                     | j         S r   )_custom_claimsr   s    r
   rd   zImportUserRecord.custom_claims   rs   r   c                     t          |t                    rt          j        |          n|}t	          j        |          | _        || _        d S r   )r   dictjsondumpsr   validate_custom_claims_custom_claims_strr   )r   rd   json_claimss      r
   rd   zImportUserRecord.custom_claims   sQ    3=44! 4! 4dj///&3 	"-"D["Q"Q+r   c                    | j         | j        | j        | j        | j        | j        t          | j                  nd| j        t          | j                  nd| j        | j	        | j
        | j        rt          | j                  nd| j        rt          | j                  ndd}| j        rd | j        D             |d<   d |                                D             S )zAReturns a dict representation of the user. For internal use only.N)localIdr   rF   phoneNumberrG   emailVerifiedra   customAttributes	createdAtlastLoginAtpasswordHashsaltc                 6    g | ]}|                                 S rI   )rS   r   s     r
   r   z,ImportUserRecord.to_dict.<locals>.<listcomp>   s     *S*S*S1199;;*S*S*Sr   providerUserInfoc                     i | ]
\  }}|||S r   rI   rJ   s      r
   rN   z,ImportUserRecord.to_dict.<locals>.<dictcomp>   rO   r   )r   r   r   r]   r   r`   boolra   r   r   r   r^   r   r_   rc   rP   rQ   s     r
   rS   zImportUserRecord.to_dict   s     xZ,,!%!4!@ #4#6777FJ/3}/HT]+++d $ 7).>B>PZJt'9:::VZ6:6HRJt1222d
 
  	T*S*S@R*S*S*SG&'BBBBBBr   )NNNNNNNNNNN)rT   rU   rV   rW   r   rX   r   rY   r   r   r]   r   r^   r_   rb   rc   rd   rS   rI   r   r
   r[   r[   d   s        2 ^bRVGK+ + + +    X 	ZA A ZA   X \8 8 \8 " " X" M M M " " X" F F F   X D D D # # X# Y Y Y # # X# Y Y Y # # X# , , , # # X# , , , # # X# , , ,C C C C Cr   r[   c                   V   e Zd ZdZddZd Zed             Zed             Zed             Z	ed             Z
ed	             Zed
             Zed             Zed             Zed             Zed             Zed             Zedd            Zed             Zed             ZdS )UserImportHasha  Represents a hash algorithm used to hash user passwords.

    An instance of this class must be specified when importing users with passwords via the
    ``auth.import_users()`` API. Use one of the provided class methods to obtain new
    instances when required. Refer to `documentation`_ for more details.

    .. _documentation: https://firebase.google.com/docs/auth/admin/import-users
    Nc                 "    || _         || _        d S r   )_name_data)r   namedatas      r
   r   zUserImportHash.__init__  s    



r   c                 Z    d| j         i}| j        r|                    | j                   |S )NhashAlgorithm)r   r   updaterQ   s     r
   rS   zUserImportHash.to_dict  s1    "DJ/: 	'NN4:&&&r   c                 n    dt          t          j        |dd                    i}t          ||          S )N	signerKeykeyTr   )r   r   ru   r   )clsr   r   r   s       r
   _hmaczUserImportHash._hmac  s=     K$>sETX$Y$Y$YZZ
 dD)))r   c                 .    |                      d|          S )zCreates a new HMAC SHA512 algorithm instance.

        Args:
            key: Signer key as a byte sequence.

        Returns:
            UserImportHash: A new ``UserImportHash``.
        HMAC_SHA512r   r   r   s     r
   hmac_sha512zUserImportHash.hmac_sha512       yy,,,r   c                 .    |                      d|          S )zCreates a new HMAC SHA256 algorithm instance.

        Args:
            key: Signer key as a byte sequence.

        Returns:
            UserImportHash: A new ``UserImportHash``.
        HMAC_SHA256r   r   s     r
   hmac_sha256zUserImportHash.hmac_sha256)  r   r   c                 .    |                      d|          S )zCreates a new HMAC SHA1 algorithm instance.

        Args:
            key: Signer key as a byte sequence.

        Returns:
            UserImportHash: A new ``UserImportHash``.
        	HMAC_SHA1r   r   s     r
   	hmac_sha1zUserImportHash.hmac_sha15  s     yyc***r   c                 .    |                      d|          S )zCreates a new HMAC MD5 algorithm instance.

        Args:
            key: Signer key as a byte sequence.

        Returns:
            UserImportHash: A new ``UserImportHash``.
        HMAC_MD5r   r   s     r
   hmac_md5zUserImportHash.hmac_md5A  s     yyS)))r   c           
      P    t          ddt          j        |ddd          i          S )zCreates a new MD5 algorithm instance.

        Args:
            rounds: Number of rounds. Must be an integer between 0 and 8192.

        Returns:
            UserImportHash: A new ``UserImportHash``.
        MD5roundsr       r   r   validate_intr   r   s     r
   md5zUserImportHash.md5M  s5     {/!TJJKM M 	Mr   c           
      P    t          ddt          j        |ddd          i          S )zCreates a new SHA1 algorithm instance.

        Args:
            rounds: Number of rounds. Must be an integer between 1 and 8192.

        Returns:
            UserImportHash: A new ``UserImportHash``.
        SHA1r      r   r   r   s     r
   sha1zUserImportHash.sha1[  s5     {/!TJJKM M 	Mr   c           
      P    t          ddt          j        |ddd          i          S )zCreates a new SHA256 algorithm instance.

        Args:
            rounds: Number of rounds. Must be an integer between 1 and 8192.

        Returns:
            UserImportHash: A new ``UserImportHash``.
        SHA256r   r   r   r   r   s     r
   sha256zUserImportHash.sha256i  5     {/!TJJKM M 	Mr   c           
      P    t          ddt          j        |ddd          i          S )zCreates a new SHA512 algorithm instance.

        Args:
            rounds: Number of rounds. Must be an integer between 1 and 8192.

        Returns:
            UserImportHash: A new ``UserImportHash``.
        SHA512r   r   r   r   r   s     r
   sha512zUserImportHash.sha512w  r   r   c           
      P    t          ddt          j        |ddd          i          S )zCreates a new PBKDF SHA1 algorithm instance.

        Args:
            rounds: Number of rounds. Must be an integer between 0 and 120000.

        Returns:
            UserImportHash: A new ``UserImportHash``.
        
PBKDF_SHA1r   r    r   r   s     r
   
pbkdf_sha1zUserImportHash.pbkdf_sha1  s5     {/!VLLMO O 	Or   c           
      P    t          ddt          j        |ddd          i          S )zCreates a new PBKDF2 SHA256 algorithm instance.

        Args:
            rounds: Number of rounds. Must be an integer between 0 and 120000.

        Returns:
            UserImportHash: A new ``UserImportHash``.
        PBKDF2_SHA256r   r   r   r   r   s     r
   pbkdf2_sha256zUserImportHash.pbkdf2_sha256  s5     {/!VLLMO O 	Or   c                    t          t          j        |dd                    t          j        |ddd          t          j        |ddd          d	}|r%t          t          j        |d
                    |d<   t	          d|          S )a$  Creates a new Scrypt algorithm instance.

        This is the modified Scrypt algorithm used by Firebase Auth. See ``standard_scrypt()``
        function for the standard Scrypt algorith,

        Args:
            key: Signer key as a byte sequence.
            rounds: Number of rounds. Must be an integer between 1 and 8.
            memory_cost: Memory cost as an integer between 1 and 14.
            salt_separator: Salt separator as a byte sequence (optional).

        Returns:
            UserImportHash: A new ``UserImportHash``.
        r   Tr   r   r      memory_cost   )r   r   
memoryCostsalt_separatorsaltSeparatorSCRYPT)r   r   ru   r   r   )r   r   r   r   r   r   s         r
   scryptzUserImportHash.scrypt  s    " $K$>sETX$Y$Y$YZZ!.vxAFF%2;qRTUU
 

  	3$.{/I 002 02 %3 %3D!h---r   c                      t          d          S )zyCreates a new Bcrypt algorithm instance.

        Returns:
            UserImportHash: A new ``UserImportHash``.
        BCRYPT)r   )r   s    r
   bcryptzUserImportHash.bcrypt  s     h'''r   c                     t          j        |dd          t          j        |dd          t          j        |dd          t          j        |dd          d}t          d|          S )	a  Creates a new standard Scrypt algorithm instance.

        Args:
            memory_cost: CPU Memory cost as a non-negative integer.
            parallelization: Parallelization as a non-negative integer.
            block_size: Block size as a non-negative integer.
            derived_key_length: Derived key length as a non-negative integer.

        Returns:
            UserImportHash: A new ``UserImportHash``.
        r   r   )lowparallelization
block_sizederived_key_length)
cpuMemCostr   	blockSizedkLenSTANDARD_SCRYPT)r   r   r   )r   r   r   r   r   r   s         r
   standard_scryptzUserImportHash.standard_scrypt  s~     &2;STUUU*7IZ`abbb$1*lPQRRR -.@BV\]^^^	
 
 /666r   r   )rT   rU   rV   rW   r   rS   classmethodr   r   r   r   r   r   r   r   r   r   r   r   r   r   rI   r   r
   r   r     s              * * [* 	- 	- [	- 	- 	- [	- 	+ 	+ [	+ 	* 	* [	* M M [M M M [M M M [M M M [M O O [O O O [O . . . [.2 ( ( [( 7 7 [7 7 7r   r   c                   D    e Zd ZdZd Zed             Zed             ZdS )	ErrorInfozRepresents an error encountered while performing a batch operation such
    as importing users or deleting multiple user accounts.
    c                 :    |d         | _         |d         | _        d S )Nindexmessage)_index_reason)r   errors     r
   r   zErrorInfo.__init__  s    GnY'r   c                     | j         S r   )r   r   s    r
   r   zErrorInfo.index  r+   r   c                     | j         S r   )r   r   s    r
   reasonzErrorInfo.reason  s
    |r   N)rT   rU   rV   rW   r   rX   r   r   rI   r   r
   r   r     sc         ( ( (   X   X  r   r   c                   Z    e Zd ZdZd Zed             Zed             Zed             ZdS )UserImportResultzrRepresents the result of a bulk user import operation.

    See ``auth.import_users()`` API for more details.
    c                     |                     dg           }|t          |          z
  | _        t          |          | _        d |D             | _        d S )Nr   c                 ,    g | ]}t          |          S rI   )r   )rK   errs     r
   r   z-UserImportResult.__init__.<locals>.<listcomp>  s    9993	#999r   )getlen_success_count_failure_count_errors)r   resulttotalerrorss       r
   r   zUserImportResult.__init__  sO    GR((#c&kk1!&kk99&999r   c                     | j         S )z2Returns the number of users successfully imported.)r  r   s    r
   success_countzUserImportResult.success_count       ""r   c                     | j         S )z7Returns the number of users that failed to be imported.)r  r   s    r
   failure_countzUserImportResult.failure_count   r  r   c                     | j         S )zQReturns a list of ``auth.ErrorInfo`` instances describing the errors encountered.)r  r   s    r
   r  zUserImportResult.errors  s     |r   N)	rT   rU   rV   rW   r   rX   r  r  r  rI   r   r
   r   r     s~         
: : : # # X# # # X#   X  r   r   )rW   r   r   firebase_adminr   r   r   r[   r   r   r   rI   r   r
   <module>r     s=   ' &   & & & & & &: : :FC FC FC FC FC FC FC FCR[C [C [C [C [C [C [C [C|U7 U7 U7 U7 U7 U7 U7 U7p       *         r   