
    Vhx<                        d dl mZmZmZ e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mZ i ddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/Z e	j"                  d0      Zd1 ZdZd2ZdZd3ZdZd4ZdZd5Zd6 Z ed7       ed8       ed9       ed:       ed;       ed<       ed=       ed>d?@       edA       edB      dC
Z edD       edE       edF       edG       edH       edI       edJ       edK       edL       edM       edN       edO      dPZ G dQ dRe      Z ej:                  dSdTg      Z G dU dVe      Z  e!       Z" G dW dX      Z#dZdYZ$y)[    )absolute_importdivisionprint_functionN)to_text	to_native)PopenPIPE   ErrorGeneric   CouldNotReadInputFile   CouldNotWriteOutputFile   ErrorDumpingTree   ErrorReadingConfig   &ErrorInvalidKMSEncryptionContextFormat   ErrorInvalidSetFormat   ErrorConflictingParameters   ErrorEncryptingMac   ErrorEncryptingTree   ErrorDecryptingMac   ErrorDecryptingTree1   #CannotChangeKeysFromNonExistentFile3   MacMismatch4   MacNotFound=   ConfigFileNotFoundU   KeyboardInterruptInvalidTreePathFormatNoFileSpecifiedCouldNotRetrieveKeyNoEncryptionKeyFoundFileHasNotBeenModifiedNoEditorFoundFailedToCompareVersionsFileAlreadyEncrypted)[   d      o               z"^sops ([0-9]+)\.([0-9]+)\.([0-9]+)c                 R    |j                  dd      }|r| n|j                  |       y )NpreF)popextend)arguments_prearguments_postargskwargsr=   s        l/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/community/sops/plugins/module_utils/sops.py_add_argumentrE   5   s$    
**UE
"C]~55d;    c                       fd}|S )Nc                 8    t        ||t        |              y Nr=   rE   r   valuer@   rA   envversionargument_namer=   s        rD   fz_create_single_arg.<locals>.f;   s    m^]IeDTZ]^rF    rP   r=   rQ   s   `` rD   _create_single_argrT   :   s    _ HrF   c                       fd}|S )Nc                     dj                  | D cg c]  }t        |       c}      } t        |||        y c c}w )N,rJ   )joinr   rE   rM   r@   rA   rN   rO   vrP   r=   s         rD   rQ   z"_create_comma_separated.<locals>.fB   s5    61)A,67m^]EsS 7s   ;rR   rS   s   `` rD   _create_comma_separatedr[   A   s    T HrF   c                       fd}|S )Nc           	      F    | D ]  }t        ||t        |              y rI   rK   rY   s         rD   rQ   z_create_repeated.<locals>.fJ   s*     	_A-	RSZ]^	_rF   rR   rS   s   `` rD   _create_repeatedr^   I   s    _ HrF   c                       fd}|S )Nc                 *    | rt        ||       y y rI   )rE   rL   s        rD   rQ   z_create_boolean.<locals>.fR   s    -CP rF   rR   rS   s   `` rD   _create_booleanra   Q   s    Q HrF   c                       fd}|S )Nc                     | |<   y NrR   )rM   r@   rA   rN   rO   rP   s        rD   rQ   z_create_env_variable.<locals>.fZ   s    "MrF   rR   )rP   rQ   s   ` rD   _create_env_variablere   Y   s    # HrF   SOPS_AGE_KEYSOPS_AGE_KEY_FILESOPS_AGE_SSH_PRIVATE_KEY_FILEz--aws-profileAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKENz--configTrJ   z--enable-local-keyservicez--keyservice)
age_keyage_keyfileage_ssh_private_keyfileaws_profileaws_access_key_idaws_secret_access_keyaws_session_tokenconfig_pathenable_local_keyservice
keyservicez--agez--kmsz	--gcp-kmsz
--azure-kvz--hc-vault-transitz--pgpz--unencrypted-suffixz--encrypted-suffixz--unencrypted-regexz--encrypted-regexz--encryption-contextz!--shamir-secret-sharing-thresholdagekmsgcp_kmsazure_kvhc_vault_transitpgpunencrypted_suffixencrypted_suffixunencrypted_regexencrypted_regexencryption_contextshamir_secret_sharing_thresholdc                   $     e Zd ZdZd fd	Z xZS )	SopsErrorz7 Extend Exception class with sops specific information c           
          ||rdnd}|t         v rt         |   }d|||t        |      fz  }nd|d|d|dt        |      }t        t        |   |       y )Ndecryptencryptz.error with file %s: %s exited with code %d: %sz
could not z file z; Unknown sops error code: z; message: )SOPS_ERROR_CODESr   superr   __init__)selffilename	exit_codemessage
decryption	operationexception_name	__class__s          rD   r   zSopsError.__init__   sq    %/	YI((-i8NF.)Yw5GJI IG ) 8Y	'0BDGi'0rF   )TN)__name__
__module____qualname____doc__r   __classcell__)r   s   @rD   r   r   ~   s    A
1 
1rF   r   SopsFileStatus	encryptedc                   N    e Zd Zd Zd Zd ZddZddZ	 	 ddZddZ	d	 Z
d
 Zy)
SopsRunnerc                 |    |y |j                         D ]&  \  }} ||      }| |||||| j                         ( y rd   )itemsrO   )	r   command_precommand_postrN   get_option_valueoptionsoptionrQ   rZ   s	            rD   _add_optionszSopsRunner._add_options   sI    #  	CIFA (A}![,T\\B	CrF   c                     | j                   r| j                   j                  |       y | j                  r| j                  j                  |       y y rd   )displayvvvvmoduledebugr   r   s     rD   _debugzSopsRunner._debug   s9    <<LLg&[[KKg& rF   c                     | j                   r| j                   j                  |       y | j                  r| j                  j                  |       y y rd   )r   warningr   warnr   s     rD   _warnzSopsRunner._warn   s9    <<LL  )[[KKW% rF   Nc                 L   || _         || _        || _        d| _        d| _        | j                  | j                   ddg      \  }}}|dk(  rt        j                  |j                  d            }|rt        |j                  d            t        |j                  d            t        |j                  d	            f| _        d
| j                  z  | _        | j                  d| j                         y | j                  dt        |      z         y | j                  d       y )N)r   r   r   z(before 3.8.0)z	--versionz--disable-version-checkr   zutf-8r
   r   r   z%d.%d.%dzSOPS version detected as z$Cannot extract SOPS version from: %szECannot detect SOPS version efficiently, likely a version before 3.8.0)binaryr   r   rO   version_string_run_command_SOPS_VERSIONmatchdecodeintgroupr   r   repr)r   r   r   r   r   outputerrms           rD   r   zSopsRunner.__init__   s     .!%!2!2DKKNg3h!i	63>##FMM'$:;A"1771:AGGAJQWWQZP&04<<&?#T\\LM

ADLPQKK_`rF   c                     | j                   r!| j                   j                  |||d |d      S t        ||d nt        t        t        ||      }|j	                  |      \  }}|j
                  ||fS )NT)environ_updatecwdencodingdatabinary_data)stdinstdoutstderrr   rN   )input)r   run_commandr   r	   communicate
returncode)r   commandrN   r   r   processr   r   s           rD   r   zSopsRunner._run_command   su    ;;;;**73CZ^eiw{*||t|td[_ehnqr)))5!!63..rF   c	                    | j                   g}	g }
t        j                  j                         }| j	                  |	|
||t
               | j                  dk\  r|	j                  d       |	j                  |
       ||	j                  d|g       ||	j                  d|g       | j                  dk  r|	j                  d       ||	j                  d|g       |d}|	j                  |       | j                  |	||      \  }}}|rt        |d	
      }|r| j                  dt        |d	
      z          |dk7  rt        |||d      |r|j                         }|S )Nr   	   r   r   --input-type--output-typez	--decryptz	--extract
/dev/stdin)rN   r   surrogate_or_stricterrorsUnexpected stderr:
r   Tr   )r   osenvironcopyr   GENERAL_OPTIONSrO   appendr?   r   r   r   r   rstrip)r   encrypted_filecontentdecode_outputr   
input_typeoutput_typer   extractr   r   rN   r   r   r   s                  rD   r   zSopsRunner.decrypt   sK    ;;-jjoo'<6FX<<9$NN9%|$!NNNJ78"NNO[9:<<)#NN;'NNK12)N~&!%!2!27'!2!R	63V,ABF
 KK/'#F[2\\]>NIstLL]]_FrF   c                    | j                   g}g }t        j                  j                         }	| j	                  |||	|t
               | j	                  |||	|t               | j                  dk\  r|j                  d       |j                  |       ||j                  d|g       ||j                  d|g       | j                  dk  r|j                  d       | j                  dk\  r|r|j                  d|g       |j                  d       | j                  ||	||      \  }
}}|r| j                  d	t        |d
      z          |
dk7  rt        d|
|d      |S )Nr   r   r   r   z	--encryptz--filename-overrider   )rN   r   r   r   r   r   r   z	to stdoutFr   )r   r   r   r   r   r   ENCRYPT_OPTIONSrO   r   r?   r   r   r   r   )r   r   r   r   r   r   r   r   r   rN   r   r   r   s                rD   r   zSopsRunner.encrypt   sC   ;;-jjoo'<6FX'<6FX<<9$NN9%|$!NNNJ78"NNO[9:<<)#NN;'<<9$NN18<=|$!%!2!27$TW!2!X	63 KK/'#F[2\\]>KCEJJrF   c                      | j                   dk\  S )Nr   )rO   )r   s    rD   has_filestatuszSopsRunner.has_filestatus  s    ||y((rF   c                    | j                   d|g}| j                  |      \  }}}|r| j                  dt        |d      z          |dk7  rt	        |||d      	 t        j                  |      }t        |d         S # t        $ r6}| j                  d	t        |d      z          t	        |dd
|z  d      d }~ww xY w)N
filestatusr   r   r   r   inspect)r   r   zUnexpected stdout:
z#Cannot decode filestatus result: %s)	r   r   r   r   r   jsonloadsr   	Exception)r   pathr   r   r   r   resultexcs           rD   get_filestatuszSopsRunner.get_filestatus  s    ;;d3!%!2!27!;	63 KK/'#F[2\\]>D)SIFF	gZZ'F!&"566 	gKK/'&I^2__`D!%JS%P\eff	gs   "A> >	B=1B88B=NN)NNN)NTTNNNN)NNNNN)r   r   r   r   r   r   r   r   r   r   r   r   rR   rF   rD   r   r      s<    C'&a(/ /3sw(T@)grF   r   c                   l    e Zd ZdZed        Zedd       Zedd       Ze	 	 d	d       Zed
d       Z	y)Sopsz+ Utility class to perform sops CLI actions c                 &    | r | d      nd }|d}|S )Nsops_binarysopsrR   )r   cmds     rD   get_sops_binaryzSops.get_sops_binary*  s     1A}-t;C
rF   Nc                     t         j                  | g       }|D ]  \  }}||u s|c S  t        | ||      }|j                  ||f       |t         | <   |S Nr   r   )_SOPS_RUNNER_CACHEgetr   r   )r   r   r   
candidatescand_modulecand_runnerrunners          rD   get_sops_runner_from_binaryz Sops.get_sops_runner_from_binary1  si    '++K<
(2 	#$Kf$""	# KH66*+*4;'rF   c                 X    t         j                  t         j                  |       ||      S r   )r   r  r   )r   r   r   s      rD   get_sops_runner_from_optionsz!Sops.get_sops_runner_from_options<  s(    //0D0DEU0V_eov/wwrF   c
           
      d    t         j                  |||      }
|
j                  | |||||||	      S )Nr   )r   r   r   r   r   r   r   )r   r  r   )r   r   r   r   r   r   r   r   r   r   r   s              rD   r   zSops.decrypt@  sK     223CF\c2d~~'!#-  	
 		
rF   c                 `    t         j                  |||      }|j                  | |||||      S )Nr   )r   r   r   r   r   )r   r  r   )	r   r   r   r   r   r   r   r   r   s	            rD   r   zSops.encryptO  sC    223CF\c2d~~!#-  
 	
rF   r   )	NNTTNNNNN)NNNNNNN)
r   r   r   r   staticmethodr   r  r  r   r   rR   rF   rD   r   r   '  ss    5    x x (, OS
 
 	
 	
rF   r   c                     ddidddddiddiddiddiddddddddidddd	dd
d}| r>|j                  d	dd
d	dd
d	dd
d	dd
d	dd
d	dd
ddiddiddiddid	dd
dddd       |S )Ntyper   strT)r  no_logboolF)r  defaultlist)r  elements)r   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   r   rv   )update)add_encrypt_specificargument_specs     rD   get_sops_argument_specr  \  sL    F
 

 F
 F$
 E
 E
 "

 

 F
 $

 
G'MP !
 !
 !
 !
 !!
 !
 # ! "   !#
 0S-
 -	\ rF   )F)%
__future__r   r   r   r  __metaclass__collectionsr   r   re+ansible.module_utils.common.text.convertersr   r   
subprocessr   r	   r   compiler   rE   rT   r[   r^   ra   re   r   r   r   r   
namedtupler   objectr   dictr   r   r  rR   rF   rD   <module>r     sy  
 A @   	 	 J #
~   	
  /  #     -    !" #$ 	 				!		"	3 8 

@A<
 $N3'(;<34ST%o6-.AB12IJ-.AB%jd;./JK">2 #7+"7+&{3'5/0DE"7+,-CD*+?@+,AB)*=>12HI'9:]'^ 1	 1  (''(8;-HPg Pgf V 2
 2
jXrF   