
    hB                     <   d Z ddlmZ ddlZddlmZ ddlmZ dZ G d d          Z G d	 d
e          Z	 G d de          Z
 G d d          Z G d de          Z G d de          Z G d dej                  Z G d d          Zd Zd Zd Zd Zd ZdS )z.Firebase auth providers management sub module.    )parseN)_auth_utils)	_user_mgtd   c                   Z    e Zd ZdZd Zed             Zed             Zed             ZdS )ProviderConfigz9Parent type for all authentication provider config types.c                     || _         d S N_data)selfdatas     b/var/www/html/e360mart/e360mart_env/lib/python3.11/site-packages/firebase_admin/_auth_providers.py__init__zProviderConfig.__init__   s    


    c                 R    | j         d         }|                    d          d         S )Nname/)r   split)r   r   s     r   provider_idzProviderConfig.provider_id"   s#    z&!zz#r""r   c                 6    | j                             d          S )NdisplayNamer   getr   s    r   display_namezProviderConfig.display_name'   s    z~~m,,,r   c                 8    | j                             dd          S )NenabledFr   r   s    r   r   zProviderConfig.enabled+   s    z~~i///r   N)	__name__
__module____qualname____doc__r   propertyr   r   r    r   r   r   r      sz        CC   # # X# - - X- 0 0 X0 0 0r   r   c                       e Zd ZdZed             Zed             Zed             Zed             Zed             Z	dS )OIDCProviderConfigz{Represents the OIDC auth provider configuration.

    See https://openid.net/specs/openid-connect-core-1_0-final.html.
    c                     | j         d         S )Nissuerr   r   s    r   r)   zOIDCProviderConfig.issuer6   s    z(##r   c                     | j         d         S )NclientIdr   r   s    r   	client_idzOIDCProviderConfig.client_id:   s    z*%%r   c                 6    | j                             d          S )NclientSecretr   r   s    r   client_secretz OIDCProviderConfig.client_secret>   s    z~~n---r   c                 `    | j                             di                               dd          S )NresponseTypeidTokenFr   r   s    r   id_token_response_typez)OIDCProviderConfig.id_token_response_typeB   s(    z~~nb1155iGGGr   c                 `    | j                             di                               dd          S )Nr1   codeFr   r   s    r   code_response_typez%OIDCProviderConfig.code_response_typeF   s(    z~~nb1155feDDDr   N)
r    r!   r"   r#   r$   r)   r,   r/   r3   r6   r%   r   r   r'   r'   0   s         
 $ $ X$ & & X& . . X. H H XH E E XE E Er   r'   c                       e Zd ZdZed             Zed             Zed             Zed             Zed             Z	dS )SAMLProviderConfigzRepresents he SAML auth provider configuration.

    See http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0.html.
    c                 D    | j                             di           d         S )N	idpConfigidpEntityIdr   r   s    r   idp_entity_idz SAMLProviderConfig.idp_entity_idQ   s    z~~k2..}==r   c                 D    | j                             di           d         S )Nr:   ssoUrlr   r   s    r   sso_urlzSAMLProviderConfig.sso_urlU   s    z~~k2..x88r   c                 \    | j                             di           d         }d |D             S )Nr:   idpCertificatesc                     g | ]
}|d          S x509Certificater%   ).0cs     r   
<listcomp>z8SAMLProviderConfig.x509_certificates.<locals>.<listcomp>\   s    444#$444r   r   )r   certss     r   x509_certificatesz$SAMLProviderConfig.x509_certificatesY   s1    
{B//0AB44e4444r   c                 D    | j                             di           d         S )NspConfigcallbackUrir   r   s    r   callback_urlzSAMLProviderConfig.callback_url^   s    z~~j"--m<<r   c                 D    | j                             di           d         S )NrK   
spEntityIdr   r   s    r   rp_entity_idzSAMLProviderConfig.rp_entity_idb   s    z~~j"--l;;r   N)
r    r!   r"   r#   r$   r<   r?   rI   rM   rP   r%   r   r   r8   r8   K   s         
 > > X> 9 9 X9 5 5 X5 = = X= < < X< < <r   r8   c                   f    e Zd ZdZd Zed             Zed             Zed             Zd Z	d Z
dS )	ListProviderConfigsPageaj  Represents a page of AuthProviderConfig instances retrieved from a Firebase project.

    Provides methods for traversing the provider configs included in this page, as well as
    retrieving subsequent pages. The iterator returned by ``iterate_all()`` can be used to iterate
    through all provider configs in the Firebase project starting from this page.
    c                 D    || _         || _         |||          | _        d S r
   )	_download_max_results_current)r   download
page_tokenmax_resultss       r   r   z ListProviderConfigsPage.__init__o   s(    !' [99r   c                     t           )zBA list of ``AuthProviderConfig`` instances available in this page.)NotImplementedErrorr   s    r   provider_configsz(ListProviderConfigsPage.provider_configst   s
     "!r   c                 8    | j                             dd          S )zKPage token string for the next page (empty string indicates no more pages).nextPageToken rV   r   r   s    r   next_page_tokenz'ListProviderConfigsPage.next_page_tokeny   s     }  "555r   c                 *    t          | j                  S )z6A boolean indicating whether more pages are available.)boolra   r   s    r   has_next_pagez%ListProviderConfigsPage.has_next_page~   s     D()))r   c                 `    | j         r&|                     | j        | j        | j                  S dS )zRetrieves the next page of provider configs, if available.

        Returns:
            ListProviderConfigsPage: Next page of provider configs, or None if this is the last
            page.
        N)rd   	__class__rT   ra   rU   r   s    r   get_next_pagez%ListProviderConfigsPage.get_next_page   s3      	[>>$.$2FHYZZZtr   c                      t          |           S )ae  Retrieves an iterator for provider configs.

        Returned iterator will iterate through all the provider configs in the Firebase project
        starting from this page. The iterator will never buffer more than one page of configs
        in memory at a time.

        Returns:
            iterator: An iterator of AuthProviderConfig instances.
        )_ProviderConfigIteratorr   s    r   iterate_allz#ListProviderConfigsPage.iterate_all   s     't,,,r   N)r    r!   r"   r#   r   r$   r\   ra   rd   rg   rj   r%   r   r   rR   rR   g   s         : : :
 " " X" 6 6 X6 * * X*	 	 	
- 
- 
- 
- 
-r   rR   c                   $    e Zd Zed             ZdS )_ListOIDCProviderConfigsPagec                 L    d | j                             dg           D             S )Nc                 ,    g | ]}t          |          S r%   )r'   rE   r   s     r   rG   zA_ListOIDCProviderConfigsPage.provider_configs.<locals>.<listcomp>   s!    ^^^T"4((^^^r   oauthIdpConfigsr`   r   s    r   r\   z-_ListOIDCProviderConfigsPage.provider_configs   s*    ^^T]5F5FGXZ\5]5]^^^^r   Nr    r!   r"   r$   r\   r%   r   r   rl   rl      s2        _ _ X_ _ _r   rl   c                   $    e Zd Zed             ZdS )_ListSAMLProviderConfigsPagec                 L    d | j                             dg           D             S )Nc                 ,    g | ]}t          |          S r%   )r8   ro   s     r   rG   zA_ListSAMLProviderConfigsPage.provider_configs.<locals>.<listcomp>   s!    aaaT"4((aaar   inboundSamlConfigsr`   r   s    r   r\   z-_ListSAMLProviderConfigsPage.provider_configs   s*    aaT]5F5FG[]_5`5`aaaar   Nrq   r%   r   r   rs   rs      s2        b b Xb b br   rs   c                   $    e Zd Zed             ZdS )ri   c                     | j         j        S r
   )_current_pager\   r   s    r   itemsz_ProviderConfigIterator.items   s    !22r   N)r    r!   r"   r$   rz   r%   r   r   ri   ri      s-        3 3 X3 3 3r   ri   c                       e Zd ZdZdZddZd Z	 	 ddZ	 	 	 ddZd Z	de
fd	Zde
fd
Zd Z	 ddZ	 	 ddZd Zde
fdZde
fdZde
fdZd ZdS )ProviderConfigClientz1Client for managing Auth provider configurations.z)https://identitytoolkit.googleapis.com/v2Nc                 l    || _         |p| j        }| d| | _        |r| xj        d| z  c_        d S d S )Nz
/projects/z	/tenants/)http_clientPROVIDER_CONFIG_URLbase_url)r   r~   
project_id	tenant_idurl_override
url_prefixs         r   r   zProviderConfigClient.__init__   s[    &!=T%=
%==== 	5MM4444MMMM	5 	5r   c                 p    t          |           |                     dd|           }t          |          S )Nr   /oauthIdpConfigs/)_validate_oidc_provider_id_make_requestr'   r   r   bodys      r   get_oidc_provider_configz-ProviderConfigClient.get_oidc_provider_config   s<    ";///!!%)J[)J)JKK!$'''r   c	                    t          |           t          |d          t          |d          d}	|t          j        |d          |	d<   |t          j        |d          |	d<   i }
|du r|du rt          d	          |t          j        |d
          |
d<   |-t          j        |d          |
d<   |rt          |d          |	d<   |
r|
|	d<   d| }|                     dd|	|          }t          |          S )z=Creates a new OIDC provider config from the given parameters.r,   r)   )r+   r)   Nr   r   r   F,At least one response type must be returned.r3   r2   r6   r5   r/   r.   r1   zoauthIdpConfigId=post/oauthIdpConfigsjsonparams)	r   _validate_non_empty_string_validate_urlr   validate_stringvalidate_boolean
ValueErrorr   r'   )r   r   r,   r)   r   r   r/   r3   r6   reqresponse_typer   r   s                r   create_oidc_provider_configz0ProviderConfigClient.create_oidc_provider_config   sM    	#;///29kJJ#FH55
 
 #!,!<\>!Z!ZC(9'9MMC	N!U**/AU/J/JKLLL!-'2'C&(@(B (BM)$)$/$@"$8%: %:M&!! a&@P_&`&`N# 	0"/C2[22!!&*<3v!VV!$'''r   c	                    t          |           i }	|.|t          j        k    rd|	d<   nt          j        |d          |	d<   |t          j        |d          |	d<   |rt          |d          |	d<   |rt          |d          |	d<   i }
|du r|du rt          d	          |t          j        |d
          |
d<   |-t          j        |d          |
d<   |rt          |d          |	d<   |
r|
|	d<   |	st          d          t          j	        |	          }dd
                    |           }d| }|                     d||	|          }t          |          S )zCUpdates an existing OIDC provider config with the given parameters.Nr   r   r   r,   r+   r)   Fr   r3   r2   r6   r5   r/   r.   r1   4At least one parameter must be specified for update.updateMask=,r   patchr   )r   r   DELETE_ATTRIBUTEr   r   r   r   r   r   build_update_maskjoinr   r'   )r   r   r,   r)   r   r   r/   r3   r6   r   r   update_maskr   urlr   s                  r   update_oidc_provider_configz0ProviderConfigClient.update_oidc_provider_config   s   
 	#;///#y999%)M""%0%@~%^%^M"(9'9MMC	N 	Q8KPPC
O 	<)&(;;CM!U**/AU/J/JKLLL!-'2'C&(@(B (BM)$)$/$@"$8%: %:M&!! a&@P_&`&`N# 	0"/C 	USTTT!3C886sxx4466/+//!!'3S!HH!$'''r   c                 V    t          |           |                     dd|            d S )Ndeleter   )r   r   r   r   s     r   delete_oidc_provider_configz0ProviderConfigClient.delete_oidc_provider_config  s5    ";///8%F%F%FGGGGGr   c                 .    t          | j        ||          S r
   )rl   _fetch_oidc_provider_configsr   rX   rY   s      r   list_oidc_provider_configsz/ProviderConfigClient.list_oidc_provider_configs  !    +-z;H H 	Hr   c                 0    |                      d||          S )Nr   _fetch_provider_configsr   s      r   r   z1ProviderConfigClient._fetch_oidc_provider_configs  s    ++,>
KXXXr   c                 p    t          |           |                     dd|           }t          |          S )Nr   /inboundSamlConfigs/)_validate_saml_provider_idr   r8   r   s      r   get_saml_provider_configz-ProviderConfigClient.get_saml_provider_config  s<    ";///!!%)M)M)MNN!$'''r   c	                    t          |           t          |d          t          |d          t          |          dt          |d          t          |d          dd}	|t	          j        |d	          |	d
<   |t	          j        |d          |	d<   d| }
|                     dd|	|
          }t          |          S )z=Creates a new SAML provider config from the given parameters.r<   r?   )r;   r>   rA   rP   rM   )rO   rL   )r:   rK   Nr   r   r   zinboundSamlConfigId=r   /inboundSamlConfigsr   )	r   r   r   _validate_x509_certificatesr   r   r   r   r8   )r   r   r<   r?   rI   rP   rM   r   r   r   r   r   s               r   create_saml_provider_configz0ProviderConfigClient.create_saml_provider_config  s     	#;///  :-YY';;#>?P#Q#Q  9~VV,\>JJ 

 

 #!,!<\>!Z!ZC(9'9MMC	N555!!&*?cRX!YY!$'''r   c	                    t          |           i }	|t          |d          |	d<   |t          |d          |	d<   |t          |          |	d<   i }
|t          |d          |
d<   |t          |d	          |
d
<   i }|.|t          j        k    rd|d<   nt          j        |d          |d<   |t          j        |d          |d<   |	r|	|d<   |
r|
|d<   |st          d          t          j
        |          }dd                    |           }d| }|                     d|||          }t          |          S )zCUpdates an existing SAML provider config with the given parameters.Nr<   r;   r?   r>   rA   rP   rO   rM   rL   r   r   r   r:   rK   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r8   )r   r   r<   r?   rI   rP   rM   r   r   
idp_config	sp_configr   r   r   r   r   s                   r   update_saml_provider_configz0ProviderConfigClient.update_saml_provider_config4  s    	#;///
$(B=Ra(b(bJ}%#0)#D#DJx (,GHY,Z,ZJ()	#&@~&^&^Il##'4\>'R'RIm$#y999%)M""%0%@~%^%^M"(9'9MMC	N 	*)C 	('C
O 	USTTT!3C886sxx44662[22!!'3S!HH!$'''r   c                 V    t          |           |                     dd|            d S )Nr   r   )r   r   r   s     r   delete_saml_provider_configz0ProviderConfigClient.delete_saml_provider_config]  s5    ";///8%IK%I%IJJJJJr   c                 .    t          | j        ||          S r
   )rs   _fetch_saml_provider_configsr   s      r   list_saml_provider_configsz/ProviderConfigClient.list_saml_provider_configsa  r   r   c                 0    |                      d||          S )Nr   r   r   s      r   r   z1ProviderConfigClient._fetch_saml_provider_configse  s    ++,A:{[[[r   c                 :   |&t          |t                    r|st          d          t          |t                    st          d          |dk     s|t          k    rt          dt           d          d| }|r|d| z  }|                     d	||
          S )z'Fetches a page of auth provider configsNz&Page token must be a non-empty string.zMax results must be an integer.   z=Max results must be a positive integer less than or equal to .z	pageSize=z&pageToken=r   )r   )
isinstancestrr   intMAX_LIST_CONFIGS_RESULTSr   )r   pathrX   rY   r   s        r   r   z,ProviderConfigClient._fetch_provider_configsh  s    !j#.. Kj K !IJJJ+s++ 	@>?????k,DDD/+/ / /0 0 0 +[** 	10J000F!!%f!===r   c                     | j          | }	  | j        j        ||fi |S # t          j        j        $ r}t          j        |          d }~ww xY wr
   )r   r~   r   requests
exceptionsRequestExceptionr   handle_auth_backend_error)r   methodr   kwargsr   errors         r   r   z"ProviderConfigClient._make_requesty  so    &&&	?(4#(?????"3 	? 	? 	?7>>>	?s   ! AA		A)NN)NNNNN)NNNNNNN)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|      s       ;;E5 5 5 5( ( ( NRPT( ( ( (B JNEI#(( (( (( ((TH H H 59F^ H H H H 7;H` Y Y Y Y( ( ( DH( ( ( (4 TXMQ'( '( '( '(RK K K 59F^ H H H H 7;H` \ \ \ \ 8<Ia > > > >"? ? ? ? ?r   r|   c                     t          | t                    st          d|  d          |                     d          st          d|  d          | S )NzInvalid OIDC provider ID: ). Provider ID must be a non-empty string.zoidc.r   r   r   r   
startswithr   s    r   r   r     o    k3'' a____a a 	a!!'** FDkDDDEEEr   c                     t          | t                    st          d|  d          |                     d          st          d|  d          | S )NzInvalid SAML provider ID: r   zsaml.r   r   r   s    r   r   r     r   r   c                     t          | t                    st          d| d|  d          | st          | d          | S )z5Validates that the given value is a non-empty string.zInvalid type for z: r   z must not be empty.)r   r   r   )valuelabels     r   r   r     s[    eS!! @>U>>e>>>??? 8E666777Lr   c                    t          | t                    r| st          d|  d| d          	 t          j        |           }|j        st          d| d|  d          | S # t          $ r}t          d| d|  d          |d}~ww xY w)z;Validates that the given value is a well-formed URL string.zInvalid photo URL: "z". z must be a non-empty string.z
Malformed z: "z".N)r   r   r   r   urlparsenetloc	Exception)r   r   parsed	exceptions       r   r   r     s    c3 Ps PN3NN5NNNP P 	PH$$} 	=;%;;C;;;<<<
 H H H7e7777788iGHs   2A" "
B,BBc                     t          | t                    r| st          d          t          d | D                       st          d          d | D             S )Nz+x509_certificates must be a non-empty list.c              3   D   K   | ]}t          |t                    o|V  d S r
   )r   r   rE   certs     r   	<genexpr>z._validate_x509_certificates.<locals>.<genexpr>  s1      LL$z$$$-LLLLLLr   z6x509_certificates must only contain non-empty strings.c                     g | ]}d |iS rC   r%   r   s     r   rG   z/_validate_x509_certificates.<locals>.<listcomp>  s    DDD$%DDDr   )r   listr   all)rI   s    r   r   r     ss    '.. H6G HFGGGLL:KLLLLL SQRRRDD2CDDDDr   )r#   urllibr   r   firebase_adminr   r   r   r   r'   r8   rR   rl   rs   PageIteratorri   r|   r   r   r   r   r   r%   r   r   <module>r      s"   5 4        & & & & & & $ $ $ $ $ $  0 0 0 0 0 0 0 0(E E E E E E E E6< < < < < < < <81- 1- 1- 1- 1- 1- 1- 1-h_ _ _ _ _#: _ _ _b b b b b#: b b b3 3 3 3 3k6 3 3 3N? N? N? N? N? N? N? N?b      H H HE E E E Er   