
    PqhE%                         d dl Z 	 d dlmZ d dlZ ej
                  e      ZdZdZ	dZ
dZ eee	deg      Zg dZdZ G d	 d
e      Z G d de      Zd Zd Zd Zy# e$ r	 d dlmZ Y ]w xY w)    N)urlparsezlogin.microsoftonline.uszlogin.chinacloudapi.cnzlogin.microsoftonline.comzlogin-us.microsoftonline.com)zb2clogin.comzb2clogin.cnzb2clogin.uszb2clogin.dezciamlogin.comz.ciamlogin.comc                       e Zd Zd Zd Zy)AuthorityBuilderc                 \    |j                  d      | _        |j                  d      | _        y)zA helper to save caller from doing string concatenation.

        Usage is documented in :func:`application.ClientApplication.__init__`.
        /N)rstrip	_instancestrip_tenant)selfinstancetenants      O/srv/www/ollama/chat-ollama/venv/lib/python3.12/site-packages/msal/authority.py__init__zAuthorityBuilder.__init__#   s$    
 "-||C(    c                 N    dj                  | j                  | j                        S )Nzhttps://{}/{})formatr	   r   )r   s    r   __str__zAuthorityBuilder.__str__+   s    %%dnndllCCr   N)__name__
__module____qualname__r   r    r   r   r   r   "   s    )Dr   r   c                   4    e Zd ZdZ eg       Z	 	 ddZddZy)	AuthorityzThis class represents an (already-validated) authority.

    Once constructed, it contains members named "*_endpoint" for this instance.
    TODO: It will also cache the previously-validated authority instances.
    Nc                 L    | _         t        |t              rt        |      }t	        |      \  } _        } j
                  j                  t              }|j                         dk(  xr |  _	        |j                  j                  d      }t         fdt        D              xs2 t        |      dk(  xr" |d   j                         j                  d       _         j                  xs  j                   xs |  _         j
                  t$        v }	|dv rdj'                  t(              n|}
|
rq|	so j"                  sct+        d	j'                   j
                  |j                         j                   |
      }|j-                  d
      dk(  rt/        d|z        |d   }ne|j1                  dj'                  |rt        |j                        dk  r|n|j                   j                  rdnd            j3                         }	 t5        | j                         }t6        j9                  d|       |d    _        |d    _        |j-                  d       _        t	         j<                        \  }} _         y# t.        $ r t/        dj'                  |            w xY w)a`  Creates an authority instance, and also validates it.

        :param validate_authority:
            The Authority validation process actually checks two parts:
            instance (a.k.a. host) and tenant. We always do a tenant discovery.
            This parameter only controls whether an instance discovery will be
            performed.
        adfsr   c              3   Z   K   | ]"  }j                   j                  d |z          $ yw).N)r   endswith).0dr   s     r   	<genexpr>z%Authority.__init__.<locals>.<genexpr>P   s)      01DMM""37+s   (+      b2c_)NTz$https://{}/common/discovery/instancez"https://{}{}/oauth2/v2.0/authorizeerrorinvalid_instancezinvalid_instance: The authority you provided, %s, is not whitelisted. If it is indeed your legit customized domain name, you can turn off this check by passing in validate_authority=Falsetenant_discovery_endpointz2{prefix}{version}/.well-known/openid-configuration    z/v2.0)prefixversion)pathzUnable to get authority configuration for {}. Authority would typically be in a format of https://login.microsoftonline.com/your_tenant Also please double check your tenant name or GUID is correct.zopenid_config = %sauthorization_endpointtoken_endpointdevice_authorization_endpointN)!_http_client
isinstancer   strcanonicalizer   r   _CIAM_DOMAIN_SUFFIXloweris_adfsr-   splitanyWELL_KNOWN_B2C_HOSTSlen
startswith_is_b2c_is_known_to_developerWELL_KNOWN_AUTHORITY_HOSTSr   
WORLD_WIDE_instance_discoveryget
ValueError_replacegeturltenant_discoveryloggerdebugr.   r/   r0   r   )r   authority_urlhttp_clientvalidate_authorityinstance_discovery	authorityr   is_ciampartsis_known_to_microsoftinstance_discovery_endpointpayloadr(   openid_config_s   `              r   r   zAuthority.__init__7   s   $ (m%56.M+7+F(	4=&--(()<=||~/?K$$S) 5I  Ke*/IeAhnn&6&A&A&&I 	 '+ll&\dll&\J\F\# $1K K
 $|3	 'M&S&S' :L	 	$
 '%)D)D)4;;MM9>>3!!+	-G
 {{7#'99 /
 $$% % )00K(L%(1(:(:IPP%,Y^^1D1I6&^^"&,,BG Q  ); ) &( &
	 ,)!!#M 	)=9&34L&M#+,<=-:->->?^-_*()<)<=1dk  	 P QWPVQ	   	 s   
I? ?$J#c                    | j                   | j                  j                  vr|xs; | j                  j	                  dj                  | j                   |      d|d      }|j                  dk7  r/|j                          t        j                  |j                        S | j                  j                  j                  | j                          i S )Nz<https://{netloc}/common/userrealm/{username}?api-version=1.0)netlocusernamezapplication/json)Acceptzclient-request-id)headersi  )r   	__class__%_domains_without_user_realm_discoveryr1   rB   r   status_coderaise_for_statusjsonloadstextadd)r   rW   correlation_idresponseresps        r   user_realm_discoveryzAuthority.user_realm_discovery   s     == T TT @t0044NUU==8 V =#5.<>  5  @D
 3&%%'zz$)),,NN@@DDT]]S	r   )TN)NN)r   r   r   __doc__setr[   r   re   r   r   r   r   r   /   s'    
 -0G)  $#J>Xr   r   c                    t        |       }|j                  dk(  r|j                  j                  d      }t	        |      dk\  r
|d   r|d   nd }|j
                  j                  t              rE|r|n1dj                  |j
                  j                  t        d      d         }||j
                  |fS t	        |      dk\  r|d   r||j
                  |d   fS t        d| z        )Nhttpsr   r$   r)   z{}.onmicrosoft.comr   a
  Your given address (%s) should consist of an https url with a minimum of one segment in a path: e.g. https://login.microsoftonline.com/{tenant} or https://{tenant_name}.ciamlogin.com/{tenant} or https://{tenant_name}.b2clogin.com/{tenant_name}.onmicrosoft.com/policy)r   schemer-   r8   r;   hostnamer   r5   r   rsplitrC   )authority_or_auth_endpointrM   rO   
first_partr   s        r   r4   r4      s    34I7"$$S)!$UqU1XU1X4
&&':;#-Z3G3N3N""))*=qA!D4FF i00&88u:?uQxi00%(::
	U
 %	%& &r   c                 p     |j                   |fd| ddi|}t        j                  |j                        S )Nparamsz1.0)r.   zapi-version)rB   r^   r_   r`   )urlrJ   rQ   kwargsrd   s        r   rA   rA      sA    ;??#*-eD D ::dii  r   c                 |    |j                   | fi |}|j                  dk(  rt        j                  |j                        S d|j                  cxk  rdk  r3n n0t        dj                  | |j                  |j                              |j                          t        d|j                  |j                  fz        )N   i  i  z7OIDC Discovery failed on {}. HTTP status: {}, Error: {}z)Unable to complete OIDC Discovery: %d, %s)	rB   r\   r^   r_   r`   rC   r   r]   RuntimeError)r(   rJ   rr   rd   s       r   rF   rF      s    ;??4??D3zz$))$$
d$$ RYY%II  	 	
3t7G7G6SSU Ur   )r^   urllib.parser   ImportErrorlogging	getLoggerr   rG   AZURE_US_GOVERNMENTAZURE_CHINAAZURE_PUBLICr@   rg   r?   r:   r5   objectr   r   r4   rA   rF   r   r   r   <module>r~      s    "%  
		8	$ 1 &*(
 "	"    ' 
Dv 
Db bJ&.!U]  "!"s   A A*)A*