o
    ×èFhD  ã                   @   sÜ   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„ dƒZG d	d
„ d
eƒZ	G dd„ deƒZ
G dd„ dƒZG dd„ deƒZG dd„ deƒZG dd„ dejƒZG dd„ dƒZdd„ Zdd„ Zdd„ Zdd„ Zdd „ ZdS )!z.Firebase auth providers management sub module.é    )ÚparseN)Ú_auth_utils)Ú	_user_mgtéd   c                   @   s<   e Zd ZdZdd„ Zedd„ ƒZedd„ ƒZedd	„ ƒZd
S )ÚProviderConfigz9Parent type for all authentication provider config types.c                 C   s
   || _ d S ©N©Ú_data)ÚselfÚdata© r   úW/var/www/html/loop/nvenv/lib/python3.10/site-packages/firebase_admin/_auth_providers.pyÚ__init__   s   
zProviderConfig.__init__c                 C   s   | j d }| d¡d S )NÚnameú/éÿÿÿÿ)r	   Úsplit)r
   r   r   r   r   Úprovider_id"   s   
zProviderConfig.provider_idc                 C   ó   | j  d¡S )NÚdisplayName©r	   Úget©r
   r   r   r   Údisplay_name'   ó   zProviderConfig.display_namec                 C   ó   | j  dd¡S )NÚenabledFr   r   r   r   r   r   +   s   zProviderConfig.enabledN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpropertyr   r   r   r   r   r   r   r      s    

r   c                   @   óL   e Zd ZdZedd„ ƒZedd„ ƒZedd„ ƒZedd	„ ƒZed
d„ ƒZ	dS )ÚOIDCProviderConfigz{Represents the OIDC auth provider configuration.

    See https://openid.net/specs/openid-connect-core-1_0-final.html.
    c                 C   ó
   | j d S )NÚissuerr   r   r   r   r   r%   6   ó   
zOIDCProviderConfig.issuerc                 C   r$   )NÚclientIdr   r   r   r   r   Ú	client_id:   r&   zOIDCProviderConfig.client_idc                 C   r   )NÚclientSecretr   r   r   r   r   Úclient_secret>   r   z OIDCProviderConfig.client_secretc                 C   ó   | j  di ¡ dd¡S )NÚresponseTypeÚidTokenFr   r   r   r   r   Úid_token_response_typeB   ó   z)OIDCProviderConfig.id_token_response_typec                 C   r+   )Nr,   ÚcodeFr   r   r   r   r   Úcode_response_typeF   r/   z%OIDCProviderConfig.code_response_typeN)
r   r   r   r    r!   r%   r(   r*   r.   r1   r   r   r   r   r#   0   s    



r#   c                   @   r"   )ÚSAMLProviderConfigz�Represents he SAML auth provider configuration.

    See http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0.html.
    c                 C   ó   | j  di ¡d S )NÚ	idpConfigÚidpEntityIdr   r   r   r   r   Úidp_entity_idQ   ó   z SAMLProviderConfig.idp_entity_idc                 C   r3   )Nr4   ÚssoUrlr   r   r   r   r   Ússo_urlU   r7   zSAMLProviderConfig.sso_urlc                 C   s    | j  di ¡d }dd„ |D ƒS )Nr4   ÚidpCertificatesc                 S   s   g | ]}|d  ‘qS ©Úx509Certificater   )Ú.0Úcr   r   r   Ú
<listcomp>\   ó    z8SAMLProviderConfig.x509_certificates.<locals>.<listcomp>r   )r
   Úcertsr   r   r   Úx509_certificatesY   s   z$SAMLProviderConfig.x509_certificatesc                 C   r3   )NÚspConfigÚcallbackUrir   r   r   r   r   Úcallback_url^   r7   zSAMLProviderConfig.callback_urlc                 C   r3   )NrC   Ú
spEntityIdr   r   r   r   r   Úrp_entity_idb   r7   zSAMLProviderConfig.rp_entity_idN)
r   r   r   r    r!   r6   r9   rB   rE   rG   r   r   r   r   r2   K   s    



r2   c                   @   sL   e Zd ZdZdd„ Zedd„ ƒZedd„ ƒZedd	„ ƒZd
d„ Z	d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                 C   s   || _ || _|||ƒ| _d S r   )Ú	_downloadÚ_max_resultsÚ_current)r
   ÚdownloadÚ
page_tokenÚmax_resultsr   r   r   r   o   s   z ListProviderConfigsPage.__init__c                 C   s   t ‚)zBA list of ``AuthProviderConfig`` instances available in this page.)ÚNotImplementedErrorr   r   r   r   Úprovider_configst   s   z(ListProviderConfigsPage.provider_configsc                 C   r   )zKPage token string for the next page (empty string indicates no more pages).ÚnextPageTokenÚ ©rK   r   r   r   r   r   Únext_page_tokeny   s   z'ListProviderConfigsPage.next_page_tokenc                 C   s
   t | jƒS )z6A boolean indicating whether more pages are available.)ÚboolrT   r   r   r   r   Úhas_next_page~   s   
z%ListProviderConfigsPage.has_next_pagec                 C   s   | j r|  | j| j| j¡S dS )zÇRetrieves the next page of provider configs, if available.

        Returns:
            ListProviderConfigsPage: Next page of provider configs, or None if this is the last
            page.
        N)rV   Ú	__class__rI   rT   rJ   r   r   r   r   Úget_next_pageƒ   s   z%ListProviderConfigsPage.get_next_pagec                 C   s   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   r   r   r   Úiterate_allŽ   s   
z#ListProviderConfigsPage.iterate_allN)r   r   r   r    r   r!   rP   rT   rV   rX   rZ   r   r   r   r   rH   g   s    


rH   c                   @   ó   e Zd Zedd„ ƒZdS )Ú_ListOIDCProviderConfigsPagec                 C   ó   dd„ | j  dg ¡D ƒS )Nc                 S   ó   g | ]}t |ƒ‘qS r   )r#   ©r=   r   r   r   r   r?   Ÿ   r@   zA_ListOIDCProviderConfigsPage.provider_configs.<locals>.<listcomp>ÚoauthIdpConfigsrS   r   r   r   r   rP   �   ó   z-_ListOIDCProviderConfigsPage.provider_configsN©r   r   r   r!   rP   r   r   r   r   r\   ›   ó    r\   c                   @   r[   )Ú_ListSAMLProviderConfigsPagec                 C   r]   )Nc                 S   r^   r   )r2   r_   r   r   r   r?   ¦   r@   zA_ListSAMLProviderConfigsPage.provider_configs.<locals>.<listcomp>ÚinboundSamlConfigsrS   r   r   r   r   rP   ¤   ra   z-_ListSAMLProviderConfigsPage.provider_configsNrb   r   r   r   r   rd   ¢   rc   rd   c                   @   r[   )rY   c                 C   s   | j jS r   )Ú_current_pagerP   r   r   r   r   Úitems«   s   z_ProviderConfigIterator.itemsN)r   r   r   r!   rg   r   r   r   r   rY   ©   rc   rY   c                   @   sÄ   e Zd ZdZdZd"dd„Zdd„ Z		d#dd	„Z			d$d
d„Zdd„ Z	de
fdd„Zde
fdd„Zdd„ Z	d"dd„Z		d$dd„Zdd„ Zde
fdd„Zde
fdd„Zde
fdd„Zd d!„ ZdS )%ÚProviderConfigClientz1Client for managing Auth provider configurations.z)https://identitytoolkit.googleapis.com/v2Nc                 C   s>   || _ |p| j}d ||¡| _|r|  jd |¡7  _d S d S )Nz{0}/projects/{1}z/tenants/{0})Úhttp_clientÚPROVIDER_CONFIG_URLÚformatÚbase_url)r
   ri   Ú
project_idÚ	tenant_idÚurl_overrideÚ
url_prefixr   r   r   r   µ   s   
ÿzProviderConfigClient.__init__c                 C   ó"   t |ƒ |  dd |¡¡}t|ƒS )Nr   ú/oauthIdpConfigs/{0})Ú_validate_oidc_provider_idÚ_make_requestrk   r#   ©r
   r   Úbodyr   r   r   Úget_oidc_provider_config¼   ó   z-ProviderConfigClient.get_oidc_provider_configc	                 C   sÜ   t |ƒ t|dƒt|dƒdœ}	|durt |d¡|	d< |dur't |d¡|	d< i }
|du r5|du r5td	ƒ‚|durAt |d
¡|
d< |durVt |d¡|
d< |rVt|dƒ|	d< |
r\|
|	d< d |¡}| j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.r.   r-   r1   r0   r*   r)   r,   zoauthIdpConfigId={0}Úpostú/oauthIdpConfigs©ÚjsonÚparams)
rs   Ú_validate_non_empty_stringÚ_validate_urlr   Úvalidate_stringÚvalidate_booleanÚ
ValueErrorrk   rt   r#   )r
   r   r(   r%   r   r   r*   r.   r1   ÚreqÚresponse_typer~   rv   r   r   r   Úcreate_oidc_provider_configÁ   s4   þÿÿ
z0ProviderConfigClient.create_oidc_provider_configc	                 C   s(  t |ƒ i }	|dur|tjkrd|	d< nt |d¡|	d< |dur(t |d¡|	d< |r1t|dƒ|	d< |r:t|dƒ|	d< i }
|du rH|du rHtd	ƒ‚|durTt |d
¡|
d< |durit |d¡|
d< |rit|dƒ|	d< |
ro|
|	d< |	sutdƒ‚t 	|	¡}d 
d |¡¡}d 
|¡}| jd||	|d�}t|ƒS )zCUpdates an existing OIDC provider config with the given parameters.Nr   r   r   r(   r'   r%   Fry   r.   r-   r1   r0   r*   r)   r,   ú4At least one parameter must be specified for update.úupdateMask={0}ú,rr   Úpatchr|   )rs   r   ÚDELETE_ATTRIBUTEr   r�   r‚   r   r€   rƒ   Úbuild_update_maskrk   Újoinrt   r#   )r
   r   r(   r%   r   r   r*   r.   r1   r„   r…   Úupdate_maskr~   Úurlrv   r   r   r   Úupdate_oidc_provider_configá   sD   

ÿÿ

z0ProviderConfigClient.update_oidc_provider_configc                 C   ó   t |ƒ |  dd |¡¡ d S )NÚdeleterr   )rs   rt   rk   ©r
   r   r   r   r   Údelete_oidc_provider_config  ó   z0ProviderConfigClient.delete_oidc_provider_configc                 C   ó   t | j||ƒS r   )r\   Ú_fetch_oidc_provider_configs©r
   rM   rN   r   r   r   Úlist_oidc_provider_configs  ó   ÿz/ProviderConfigClient.list_oidc_provider_configsc                 C   ó   |   d||¡S )Nr{   ©Ú_fetch_provider_configsr˜   r   r   r   r—     ó   z1ProviderConfigClient._fetch_oidc_provider_configsc                 C   rq   )Nr   ú/inboundSamlConfigs/{0})Ú_validate_saml_provider_idrt   rk   r2   ru   r   r   r   Úget_saml_provider_config  rx   z-ProviderConfigClient.get_saml_provider_configc	                 C   s�   t |ƒ t|dƒt|dƒt|ƒdœt|dƒt|dƒdœdœ}	|dur*t |d	¡|	d
< |dur6t |d¡|	d< d |¡}
| jdd|	|
d�}t	|ƒS )z=Creates a new SAML provider config from the given parameters.r6   r9   )r5   r8   r:   rG   rE   )rF   rD   )r4   rC   Nr   r   r   zinboundSamlConfigId={0}rz   ú/inboundSamlConfigsr|   )
r    r   r€   Ú_validate_x509_certificatesr   r�   r‚   rk   rt   r2   )r
   r   r6   r9   rB   rG   rE   r   r   r„   r~   rv   r   r   r   Úcreate_saml_provider_config  s    ýþú
z0ProviderConfigClient.create_saml_provider_configc	                 C   s&  t |ƒ i }	|durt|dƒ|	d< |durt|dƒ|	d< |dur&t|ƒ|	d< i }
|dur3t|dƒ|
d< |dur>t|d	ƒ|
d
< i }|durV|tjkrNd|d< nt |d¡|d< |durbt |d¡|d< |	rh|	|d< |
rn|
|d< |stt	dƒ‚t 
|¡}d d |¡¡}d |¡}| jd|||d�}t|ƒS )zCUpdates an existing SAML provider config with the given parameters.Nr6   r5   r9   r8   r:   rG   rF   rE   rD   r   r   r   r4   rC   r‡   rˆ   r‰   rŸ   rŠ   r|   )r    r   r€   r£   r   r‹   r   r�   r‚   rƒ   rŒ   rk   r�   rt   r2   )r
   r   r6   r9   rB   rG   rE   r   r   Ú
idp_configÚ	sp_configr„   rŽ   r~   r�   rv   r   r   r   Úupdate_saml_provider_config4  s>   



z0ProviderConfigClient.update_saml_provider_configc                 C   r‘   )Nr’   rŸ   )r    rt   rk   r“   r   r   r   Údelete_saml_provider_config]  r•   z0ProviderConfigClient.delete_saml_provider_configc                 C   r–   r   )rd   Ú_fetch_saml_provider_configsr˜   r   r   r   Úlist_saml_provider_configsa  rš   z/ProviderConfigClient.list_saml_provider_configsc                 C   r›   )Nr¢   rœ   r˜   r   r   r   r©   e  rž   z1ProviderConfigClient._fetch_saml_provider_configsc                 C   sz   |durt |tƒr|stdƒ‚t |tƒstdƒ‚|dk s |tkr'td t¡ƒ‚d |¡}|r5|d |¡7 }| jd||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.é   zAMax results must be a positive integer less than or equal to {0}.zpageSize={0}z&pageToken={0}r   )r~   )Ú
isinstanceÚstrrƒ   ÚintÚMAX_LIST_CONFIGS_RESULTSrk   rt   )r
   ÚpathrM   rN   r~   r   r   r   r�   h  s   
þ
z,ProviderConfigClient._fetch_provider_configsc              
   K   sN   d  | j|¡}z| jj||fi |¤ŽW S  tjjy& } zt |¡‚d }~ww )Nz{0}{1})	rk   rl   ri   rv   ÚrequestsÚ
exceptionsÚRequestExceptionr   Úhandle_auth_backend_error)r
   Úmethodr°   Úkwargsr�   Úerrorr   r   r   rt   y  s   
€ÿz"ProviderConfigClient._make_request)NN)NNNNN)NNNNNNN)r   r   r   r    rj   r   rw   r†   r�   r”   r¯   r™   r—   r¡   r¤   r§   r¨   rª   r©   r�   rt   r   r   r   r   rh   °   s4    

þ!
ý*
þ
þ)rh   c                 C   ó4   t | tƒstd | ¡ƒ‚|  d¡std | ¡ƒ‚| S )NzFInvalid OIDC provider ID: {0}. Provider ID must be a non-empty string.zoidc.zInvalid OIDC provider ID: {0}.©r¬   r­   rƒ   rk   Ú
startswith©r   r   r   r   rs   �  ó   
ÿÿ
rs   c                 C   r¸   )NzFInvalid SAML provider ID: {0}. Provider ID must be a non-empty string.zsaml.zInvalid SAML provider ID: {0}.r¹   r»   r   r   r   r    ‹  r¼   r    c                 C   s0   t | tƒstd || ¡ƒ‚| std |¡ƒ‚| S )z5Validates that the given value is a non-empty string.zInvalid type for {0}: {1}.z{0} must not be empty.)r¬   r­   rƒ   rk   )ÚvalueÚlabelr   r   r   r   •  s
   
r   c                 C   sd   t | tƒr| std | |¡ƒ‚zt | ¡}|js td || ¡ƒ‚| W S  ty1   td || ¡ƒ‚w )z;Validates that the given value is a well-formed URL string.z9Invalid photo URL: "{0}". {1} must be a non-empty string.zMalformed {0}: "{1}".)r¬   r­   rƒ   rk   r   ÚurlparseÚnetlocÚ	Exception)r�   r¾   Úparsedr   r   r   r€   ž  s   þ
ÿr€   c                 C   s>   t | tƒr| stdƒ‚tdd„ | D ƒƒstdƒ‚dd„ | D ƒS )Nz+x509_certificates must be a non-empty list.c                 S   s   g | ]	}t |tƒo
|‘qS r   )r¬   r­   ©r=   Úcertr   r   r   r?   °  s    z/_validate_x509_certificates.<locals>.<listcomp>z6x509_certificates must only contain non-empty strings.c                 S   s   g | ]}d |i‘qS r;   r   rÃ   r   r   r   r?   ²  r@   )r¬   Úlistrƒ   Úall)rB   r   r   r   r£   ­  s
   r£   )r    Úurllibr   r±   Úfirebase_adminr   r   r¯   r   r#   r2   rH   r\   rd   ÚPageIteratorrY   rh   rs   r    r   r€   r£   r   r   r   r   Ú<module>   s(   4 R

	