
    Vh                       d dl mZ d dlZd dlZd dlZd dlZd dlmZmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZmZmZ d d	lmZmZ d d
lmZ d dlmZ  e       Z G d de      Z G d de      Z  G d de      Z! G d de      Z"y)    )annotationsN)S_IRUSRS_IWUSR)	HTTPError)	constants)GalaxyError)
user_agent)to_bytes	to_nativeto_text)	yaml_dump	yaml_load)open_url)Displayc                      e Zd ZdZd Zy)NoTokenSentinelze Represents an ansible.cfg server with not token defined (will ignore cmdline and GALAXY_TOKEN_PATH. c                    | S N )clsargskwargss      D/home/dcms/DCMS/lib/python3.12/site-packages/ansible/galaxy/token.py__new__zNoTokenSentinel.__new__+   s    
    N)__name__
__module____qualname____doc__r   r   r   r   r   r   )   s
    or   r   c                  .    e Zd ZdZdZddZd Zd Zd Zy)	KeycloakTokenzpA token granted by a Keycloak server.

    Like sso.redhat.com as used by cloud.redhat.com
    ie Automation HubBearerNc                ~    || _         || _        d | _        || _        || _        | j                  d| _        d | _        y )Nzcloud-services)access_tokenauth_url_tokenvalidate_certs	client_id_expiration)selfr$   r%   r'   r(   s        r   __init__zKeycloakToken.__init__7   s@    ( ,">>!-DNr   c                :    d| j                   d| j                  S )Nz#grant_type=refresh_token&client_id=z&refresh_token=)r(   r$   r*   s    r   _form_payloadzKeycloakToken._form_payloadA   s    KO>>KOK\K\^ 	^r   c                   | j                   r(t        j                         | j                   k\  rd | _        | j                  r| j                  S | j                         }	 t	        t        | j                        || j                  dt                     }t        j                  |      }|d   dz  dz  }t        j                         |z   | _         |j                  d      | _        | j                  S # t        $ r}t        |d      d }~ww xY w)NPOST)datar'   method
http_agentzUnable to get access token
expires_in      r$   )r)   timer&   r.   r   r   r%   r'   r	   r   r   jsonloadget)r*   payloadresper1   r4   s         r   r:   zKeycloakToken.getE   s    		t/?/? ?DK;;;; $$&	?Idmm4!(+/+>+>#)'1|	5D yy ,'1,q0
99;3 hh~.{{  	?a!=>>	?s   5C1 1	D:DDc                N    i }| j                   d| j                         |d<   |S N Authorization
token_typer:   r*   headerss     r   rE   zKeycloakToken.headersj   %    .2ootxxz#J r   )NNTN)	r   r   r   r   rC   r+   r.   r:   rE   r   r   r   r!   r!   /   s$    
 J ^#Jr   r!   c                  J    e Zd ZdZdZddZed        Zd Zd Z	d Z
d	 Zd
 Zy)GalaxyTokenz4 Class to storing and retrieving local galaxy token TokenNc                `    t        t        j                  d      | _        d | _        || _        y )Nsurrogate_or_stricterrors)r
   CGALAXY_TOKEN_PATHb_file_configr&   r*   tokens     r   r+   zGalaxyToken.__init__u   s%    q22;PQr   c                    | j                   | j                         | _         | j                  r-| j                  t        u rd n| j                  | j                   d<   | j                   S NrS   )rQ   _readr&   r   r-   s    r   configzGalaxyToken.config{   sN    <<::<DL ;;,0KK?,JDPTP[P[DLL!||r   c                J   d}t         j                  j                  | j                        sQt	        | j                  d      j                          t        j                  | j                  t        t        z         d}t	        | j                  d      5 }t        |      }d d d        t        j                  |dt        | j                               r=t        |t              s-t        j                  dt        | j                        z         i S |xs i S # 1 sw Y   {xY w)NOpenedwCreatedrr@   z1Galaxy token file %s malformed, unable to read it)ospathisfilerP   openclosechmodr   r   r   displayvvvr   
isinstancedict)r*   actionfrW   s       r   rV   zGalaxyToken._read   s    ww~~dkk*c"((*HHT[['G"34F$++s# 	"qq\F	" 	vwt{{';<=*VT2KKKgVZVaVaNbbcI|	" 	"s   DD"c                2    || _         | j                          y r   )r&   saverR   s     r   setzGalaxyToken.set   s    		r   c                :    | j                   j                  dd       S rU   )rW   r:   r-   s    r   r:   zGalaxyToken.get   s    {{w--r   c                    t        | j                  d      5 }t        | j                  |d       d d d        y # 1 sw Y   y xY w)NrZ   F)default_flow_style)r`   rP   r   rW   )r*   rh   s     r   rj   zGalaxyToken.save   s;    $++s# 	@qdkk1?	@ 	@ 	@s	   9Ac                r    i }| j                         }|r"| j                  d| j                         |d<   |S r?   )r:   rC   )r*   rE   rS   s      r   rE   zGalaxyToken.headers   s3    
26//488:'NGO$r   r   )r   r   r   r   rC   r+   propertyrW   rV   rk   r:   rj   rE   r   r   r   rH   rH   p   s=    >J  &.@r   rH   c                  4    e Zd ZdZddZed        Zd Zd Zy)BasicAuthTokenBasicNc                .    || _         || _        d | _        y r   )usernamepasswordr&   )r*   ru   rv   s      r   r+   zBasicAuthToken.__init__   s      r   c                    t        | d      dt        |dd      xs d}t        j                  t        |dd            }t        |      S )	NrK   rL   :passthru)rM   	nonstring zutf-8)encodingrM   )r   base64	b64encoder
   )ru   rv   rS   b64_vals       r   _encode_tokenzBasicAuthToken._encode_token   sQ    "84IJ"84IU_`fdffh""8EGLa#bcwr   c                    | j                   r| j                   S | j                  | j                  | j                        | _         | j                   S r   )r&   r   ru   rv   r-   s    r   r:   zBasicAuthToken.get   s9    ;;;;((F{{r   c                N    i }| j                   d| j                         |d<   |S r?   rB   rD   s     r   rE   zBasicAuthToken.headers   rF   r   r   )	r   r   r   rC   r+   staticmethodr   r:   rE   r   r   r   rr   rr      s*    J
    r   rr   )#
__future__r   r}   r8   r]   r7   statr   r   urllib.errorr   ansibler   rN   ansible.galaxy.apir   ansible.galaxy.user_agentr	   +ansible.module_utils.common.text.convertersr
   r   r    ansible.module_utils.common.yamlr   r   ansible.module_utils.urlsr   ansible.utils.displayr   rc   objectr   r!   rH   rr   r   r   r   <module>r      sm   * #   	  ! " " * 0 T T A . )
)f >F >B9& 9xV r   