
    'i                     X    d dl mZmZ ddlmZ ddlmZ ddlmZm	Z	m
Z
mZ  G d d      Zy)	    )OptionalDict   )BuilderSigner)post)BuilderApiKeyCredsBuilderTypeBuilderHeaderPayloadRemoteBuilderConfigc                       e Zd ZdZddddee   dee   ddfdZ	 	 dded	ed
ee   dee	   dee
   f
dZdefdZdefdZedee   defd       Zedee   defd       ZddZy)BuilderConfigz
    Configuration handler for builder signing/authentication.

    Supports both local signing (via API key credentials) and remote signing (via a remote builder URL + token).
    N)remote_builder_configlocal_builder_credsr   r   returnc                V   d | _         d | _        d | _        |\| j                  |j                        st        d      |j                  #t        |j                        dk(  rt        d      || _         |4| j                  |      st        d      || _        t        |      | _        y y )Nzinvalid remote url!r   zinvalid auth tokenz"invalid local builder credentials!)
r   r   signer_has_valid_remote_urlurl
ValueErrortokenlen_has_valid_local_credsr   )selfr   r   s      N/var/www/br/venv/lib/python3.12/site-packages/py_builder_signing_sdk/config.py__init__zBuilderConfig.__init__   s     EI"AE /3 ,--.C.G.GH !677%++7-3349 !566)>D&*../BC !EFF':D$'(;<DK	 +    methodpathbody	timestampc                    | j                          | j                         }|t        j                  k(  r| j                  j                  ||||      S |t        j                  k(  rM| j                  j                  }||||d}	 | j                  j                  }|rdd| ini }	t        |||	      S y# t        $ r}
t        d|
       Y d}
~
yd}
~
ww xY w)z[
        Generate signed builder headers using either local or remote credentials.
        )r   r   r   r    AuthorizationzBearer )dataheaderszerror calling remote signer:N)_ensure_validget_builder_typer	   LOCALr   create_builder_header_payloadREMOTEr   r   r   r   	Exceptionprint)r   r   r   r   r    builder_typer   payloadr   r$   errs              r   generate_builder_headersz&BuilderConfig.generate_builder_headers.   s     	,,.;,,,;;<<dI  ;---,,00C &	G2288BG?geW,=>RCgw??
 	  4c:s   .B3 3	C<CCc                 D    | j                         t        j                  k7  S N)r&   r	   UNAVAILABLEr   s    r   is_validzBuilderConfig.is_validR   s    $$&+*A*AAAr   c                     | j                   rt        j                  S | j                  rt        j                  S t        j
                  S r1   )r   r	   r'   r   r)   r2   r3   s    r   r&   zBuilderConfig.get_builder_typeU   s8    ##$$$%%%%%&&&r   credsc                     | y| j                   j                         sy| j                  j                         sy| j                  j                         syy)NFT)keystripsecret
passphrase)r6   s    r   r   z$BuilderConfig._has_valid_local_creds\   sF    =		!""$  &&(r   r   c                     t        | xr6 | j                         xr$ | j                  d      xs | j                  d            S )Nzhttp://zhttps://)boolr9   
startswith)r   s    r   r   z#BuilderConfig._has_valid_remote_urli   sA     J		J	*HcnnZ.H
 	
r   c                 \    | j                         t        j                  k(  rt        d      y )Nz!invalid builder creds configured!)r&   r	   r2   r   r3   s    r   r%   zBuilderConfig._ensure_validq   s*      "k&=&==@AA >r   )NN)r   N)__name__
__module____qualname____doc__r   r   r   r   strintr
   r/   r=   r4   r	   r&   staticmethodr   r   r%    r   r   r   r      s     @D<@	=  ((;<= &&89	=
 
=< ##'"" " sm	"
 C=" 
&	'"HB$ B'+ ' 
h/A&B 
t 
 
 
8C= 
T 
 
Br   r   N)typingr   r   r   r   http_helpers.helpersr   	sdk_typesr   r	   r
   r   r   rG   r   r   <module>rK      s&    ! ! & fB fBr   