+
    3jz                         R t ^ RIt^ RIt^ RIHt ^ RIHt ^ RIt^ RIHt ^ RI	H
t
 ^ RIHt ^ RIHt ^ RIHt ^ R	IHt  ! R
 R]4      t ! R R4      tR# )zV
Device Code Flow implementation for OAuth 2.0 device authorization grant (RFC 8628).
N)Dict)Optional)	BaseModel)
BaseClientAnacondaAuthSite)DeviceFlowDenied)DeviceFlowError)DeviceFlowTimeoutc                   4   a  ] tR t^t o ^<t^tV 3R ltRtV tR# )DeviceAuthorizationResponsec                b   < V ^8  d   Qh/ S[ ;R&   S[ ;R&   S[ ;R&   S[ ;R&   S[;R&   S[;R&   # )   device_code	user_codeverification_uriverification_uri_complete
expires_ininterval)strint)format__classdict__s   "9lib/python3.14/site-packages/anaconda_auth/device_flow.py__annotate__(DeviceAuthorizationResponse.__annotate__   sN      N     #"	 
         N)	__name__
__module____qualname____firstlineno__r   r   __annotate_func____static_attributes____classdictcell__r   s   @r   r   r      s     
 JH  r   r   c                   x   a  ] tR t^t o RtV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR	 ltV 3R
 lt	Rt
V tR# )DeviceCodeFlowz
OAuth 2.0 Device Code Flow implementation.

This implements RFC 8628 for devices that are either browserless
or have limited input capabilities.
c                    < V ^8  d   QhRS[ /# )r   configr   )r   r   s   "r   r   DeviceCodeFlow.__annotate__(   s     ' '/ 'r   c                B    Wn         \        VR7      V n        RV n        R# )zN
Initialize device code flow.

Args:
    config: Configuration for the client
)siteN)r)   r   clientauthorize_response)selfr)   s   &&r   __init__DeviceCodeFlow.__init__(   s      f- #'r   c                    < V ^8  d   QhRS[ /# r   return)r   )r   r   s   "r   r   r*   5   s     N N/J Nr   c                >   RV P                   P                  RR/pV P                   P                  P                  f   \	        R4      h V P
                  P                  V P                   P                  P                  VV P
                  P                  RR/R7      pVP                  4        VP                  4       p\        R/ VB V n        V P                  #   \        P                   d   p\	        R	T 24      hRp?i\         d   p\	        R
T 24      hRp?ii ; i)zp
Initiate device authorization request.

Returns:
    Tuple of (user_code, verification_uri) to display to user
	client_idscopeopenidNz,Server does not support device authorizationContent-Type!application/x-www-form-urlencodeddataverifyheadersz%Device authorization request failed: z$Missing required field in response: r   )r)   r6   oidcdevice_authorization_endpointr	   r-   postr=   raise_for_statusjsonr   r.   requestsRequestExceptionKeyError)r/   r<   responseauth_responsees   &    r   initiate_device_authorization,DeviceCodeFlow.initiate_device_authorization5   s    T[[22GXF;;99A!"PQQ	N{{''  >>{{))')LM	 ( H %%'$MMOM&A&RM&RD#***(( 	O!$I!"MNN 	N!$H"LMM	Ns+   	BC D-C;;DD	DDc                6   < V ^8  d   QhRS[ S[S[3,          /# r3   r   r   )r   r   s   "r   r   r*   U   s     $B $BS#X $Br   c                   V P                   '       g   \        R4      h\        P                  ! 4       pV P                   P                  pV P                   P                  p\        P                  ! 4       V,
          V8  d    V P                  4       pV# \        R4      h  \         d    h \         d    h \         d   pR\        T4      P                  4       9   d   \        P                  ! T4        Rp?K  R\        T4      P                  4       9   d0   \        T^,           ^4      p\        P                  ! T4        Rp?K  h Rp?ii ; i)zu
Poll the token endpoint until authorization is complete.

Returns:
    Token response containing access_token, etc.
-Must call initiate_device_authorization firstauthorization_pendingN	slow_downzDevice authorization timed out)r.   r	   timer   r   _request_tokenr
   r   r   lowersleepmin)r/   
start_timer   r   token_responserI   s   &     r   poll_for_tokenDeviceCodeFlow.poll_for_tokenU   s     &&&!"QRRYY[
,,77
**33iikJ&3!%!4!4!6%%&   @AA# % # " *c!flln<JJx( CFLLN2"8a<4HJJx(s1   B E3
E>E?4E9AEEEc                6   < V ^8  d   QhRS[ S[S[3,          /# r3   rM   )r   r   s   "r   r   r*   {   s     +6 +6S#X +6r   c                   V P                   '       g   \        R4      hRRRV P                   P                  RV P                  P                  /pV P
                  P                  V P                  P                  P                  VV P
                  P                  RR/R7      pVP                  ^8X  d   VP                  4       #  VP                  4       pVP                  R	R
4      pVP                  RR4      pVR8X  d   \        R4      hVR8X  d   \        R4      hVR8X  d   \        R4      hVR8X  d   \        R4      h\        RV RV 24      h  \        P                   d    TP!                  4         Mi ; i\        R4      h)zMake a single token request.rO   
grant_typez,urn:ietf:params:oauth:grant-type:device_coder   r6   r9   r:   r;   errorunknown_errorerror_description rP   rQ   expired_tokenzDevice code expiredaccess_deniedzUser denied authorizationzToken request failed: z - zToken request failed)r.   r	   r   r)   r6   r-   rA   r?   token_endpointr=   status_coderC   getr
   r   JSONDecodeErrorrB   )r/   r<   rG   
error_data
error_coder`   s   &     r   rS   DeviceCodeFlow._request_token{   s~   &&&!"QRR H422>>..
 ;;##KK++;;%%#%HI	 $ 
 3&==?"	(!J#AJ */BB G44%&=>>{*%k22.'(=>>.&'BCC%,ZL<M;NO  ## 	(%%'	( 455s   BE %E87E8c                B   < V ^8  d   Qh/ S[ ;R&   S[S[,          ;R&   # )r   r)   r.   )r   r   r   )r   r   s   "r   r   r*      s%        !!<== r   )r.   r-   r)   N)r   r   r    r!   __doc__r0   rJ   rY   rS   r"   r#   r$   r%   s   @r   r'   r'      s@     ' 'N N@$B $BL+6 +6}  r   r'   )rl   rC   rR   typingr   r   rD   pydanticr   anaconda_auth.clientr   anaconda_auth.configr   anaconda_auth.exceptionsr   r	   r
   r   r'   r   r   r   <module>rr      sE          + 1 5 4 6) I6 I6r   