HEX
Server: LiteSpeed
System: Linux kapuas.iixcp.rumahweb.net 5.14.0-427.42.1.el9_4.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Nov 1 14:58:02 EDT 2024 x86_64
User: mirz4654 (1666)
PHP: 8.1.33
Disabled: system,exec,escapeshellarg,escapeshellcmd,passthru,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate,shell_exec,popen,pclose,dl,pfsockopen,leak,apache_child_terminate,posix_kill,posix_mkfifo,posix_setsid,posix_setuid,posix_setpgid,ini_alter,show_source,define_syslog_variables,symlink,syslog,openlog,openlog,closelog,ocinumcols,listen,chgrp,apache_note,apache_setenv,debugger_on,debugger_off,ftp_exec,dll,ftp,myshellexec,socket_bind,mail,posix_getwpuid
Upload Files
File: //usr/lib/python3.9/site-packages/ansible/cli/__pycache__/vault.cpython-39.pyc
a

�)g�W�@s�ddlmZmZmZeZddlmZddlZddl	Z	ddl
mZddl
m
Z
ddlmZddlmZddlmZmZdd	lmZdd
lmZmZmZddlmZe�ZGdd
�d
e�Zddd�Z e!dkr�e �dS)�)�absolute_import�division�print_function)�CLIN)�	constants)�context)�option_helpers)�AnsibleOptionsError)�to_text�to_bytes)�
DataLoader)�VaultEditor�VaultLib�match_encrypt_secret)�Displaycs�eZdZdZdZdZdZdZ�fdd�Z�fdd	�Z	�fd
d�Z
�fdd
�Zdd�Ze
d!dd��Zdd�Zd"dd�Zdd�Zdd�Zdd�Zdd�Zdd �Z�ZS)#�VaultCLIa9 can encrypt any structured data file used by Ansible.
    This can include *group_vars/* or *host_vars/* inventory variables,
    variables loaded by *include_vars* or *vars_files*, or variable files
    passed on the ansible-playbook command line with *-e @file.yml* or *-e @file.json*.
    Role variables and defaults are also included!

    Because Ansible tasks, handlers, and other objects are data, these can also be encrypted with vault.
    If you'd like to not expose what variables you are using, you can keep an individual task file entirely encrypted.
    z
ansible-vault�stdinzthe command line argszthe interactive promptcs>d|_d|_d|_d|_d|_d|_d|_tt|��	|�dS)NF)
Zb_vault_passZb_new_vault_pass�encrypt_string_read_stdin�encrypt_secret�encrypt_vault_id�new_encrypt_secret�new_encrypt_vault_id�superr�__init__)�self�args��	__class__��5/usr/lib/python3.9/site-packages/ansible/cli/vault.pyr-szVaultCLI.__init__c
s�tt|�jddtj�tjd�d�tj	j
dd�}t�|�t�|�|j
jdd�}d	|_tj	j
dd�}|jd
dddt��d
�tj	j
dd�}|jdgddtdd�|jdd||gd�}|j|jd�|jddddd�|jdd||gd�}|j|jd�|jddddd�|jdd||gd�}|j|jd�|jddddd�|jd d!|gd�}|j|jd�|jddddd�|jd"d#|||gd�}	|	j|jd�|	jddddd�|jd$d%|||gd�}
|
j|jd�|
jdd&d'dd�|
jd(d)d*d+d,d-�|
jd.d/dd+d0d1�|
jd2d3d4d5d6d-�|
jd7d8dd9d:�|jd;d<||gd�}|j|jd�|��}|jd=dd>d?t��d
�|jd@ddAtdBdC�|jddddd�dS)DNz4encryption/decryption utility for Ansible data fileszH
See '%s <command> --help' for more information on a specific command.

r)Zdesc�epilogF)�add_help�action)�destTz--output�output_filez9output file name for encrypt or decrypt; use - for stdout)�defaultr#�help�typez--encrypt-vault-idr�storezMthe vault id used to encrypt (required if more than one vault-id is provided))r%r#r"r'r&�createzCreate new vault encrypted file)r&�parents)�funcrZFilename�	file_name�*)r&�metavar�nargs�decryptzDecrypt vault encrypted file�editzEdit vault encrypted file�viewzView vault encrypted file�encryptzEncrypt YAML file�encrypt_stringzEncrypt a stringzString to encryptZstring_to_encryptz-pz--prompt�encrypt_string_prompt�
store_truez Prompt for the string to encrypt)r#r"r&z--show-input�show_string_inputz9Do not hide input when prompted for the string to encrypt)r#r%r"r&z-nz--name�encrypt_string_names�appendzSpecify the variable namez--stdin-name�encrypt_string_stdin_namez#Specify the variable name for stdin)r#r%r&�rekeyzRe-key a vault encrypted filez--new-vault-password-file�new_vault_password_filez!new vault password file for rekeyz--new-vault-id�new_vault_idz'the new vault identity to use for rekey)r%r#r'r&)rr�init_parser�os�path�basename�sys�argv�opt_help�argparse�ArgumentParserZadd_vault_optionsZadd_verbosity_options�parser�add_subparsers�required�add_argumentZunfrack_path�str�
add_parser�set_defaults�execute_create�execute_decrypt�execute_edit�execute_view�execute_encrypt�execute_encrypt_string�
execute_rekey�add_mutually_exclusive_group)
r�commonZ
subparsers�output�vault_idZ
create_parserZdecrypt_parserZedit_parserZview_parserZencrypt_parserZenc_str_parserZrekey_parserZrekey_new_grouprrrr>:s|
�


�
�
��
��
��zVaultCLI.init_parsercs�tt|��|�}|jt_|jr>|jD]}d|vr$td|��q$t|dd�r`t|j	�dkr`td��|j
dkr�d|j	vs�|j	r�|jr�d|_|j
r�|jr�td	��|S)
N�;zK'%s' is not a valid vault id. The character ';' is not allowed in vault idsr$�z;At most one input file may be used with the --output optionr4�-TzEThe --prompt option is not supported if also reading input from stdin)rr�post_process_args�	verbosity�display�	vault_idsr	�getattr�lenrr"r:rr5)r�optionsrXrrrr\~s

zVaultCLI.post_process_argscstt|���t�}t�d�}ttjd�}t	j
}||}tjd}|dvrz|j||ttjd�tjdd�}|sztd��|d	v�r"d}|d
vr�tjdp�t	j
}d}|j||ttjd�tjddd
�}t|�dkr�|s�tdd�dd�|D����|�std��t||d�}|d|_|d|_|dv�r�tjd�p<t	j
}g}	|�rL|}	tjd�rh|	�tjd�g}
tjd�r�|
�tjd�|j||	|
tjddd
�}|�s�td��t||d�}|d|_|d|_|�|�t|�}
t|
�|_tjd�t�|�dS)N�?r_r")r0r2r;r1�vault_password_files�ask_vault_pass)r_rdrez3A vault password is required to use Ansible's Vault)r3r4r))r1rT)r_rdreZcreate_new_passwordrZzbThe vault-ids %s are available to encrypt. Specify the vault-id to encrypt with --encrypt-vault-id�,cSsg|]}|d�qS)rr��.0�xrrr�
<listcomp>��z VaultCLI.run.<locals>.<listcomp>)rr)r;r=r<z=A new vault password is required to use Ansible's Vault rekeyr+)rr�runrr?�umask�listr�CLIARGS�CZDEFAULT_VAULT_IDENTITY_LISTZsetup_vault_secretsr	ZDEFAULT_VAULT_ENCRYPT_IDENTITYra�joinrrrr9rrZset_vault_secretsrr
�editor)r�loaderZ	old_umaskr_Zdefault_vault_idsr"Z
vault_secretsrrZ
new_vault_idsZnew_vault_password_filesZnew_vault_secretsrZvaultrrrrl�s�

�
����


���



zVaultCLI.runcCsrtjds"tj��r"tjddd�tjdp0dgD]"}|jj||j|j	tjdd�q2tj
��rntjddd�d	S)
z; encrypt the supplied file using the provided vault secret rz"Reading plaintext input from stdinT��stderrr[r$)rXr$�Encryption successfulN)rrorBr�isattyr^rrZencrypt_filerr�stdout�r�frrrrR�s�
zVaultCLI.execute_encryptNc	Csh|pd}d}|rd|}d|}g}t|�}|�|�|��D]}|�dd||f�q>d�|�}|S)N�
�z%s: z
%s!vault |z%s%s� �
)r
r9�
splitlinesrq)	�b_ciphertext�indent�nameZblock_format_var_nameZblock_format_header�linesZvault_ciphertext�lineZyaml_ciphertextrrr�format_ciphertext_yamls

zVaultCLI.format_ciphertext_yamlcCs~d}g}dd�tjdD�}tjdr�d}d}t�d�}|dkrD|}tjd	}|rZd
}nd}tj||d�}|dkr|td
��t|�}|�||j|f�|j�rt	j
��r�tjddd�t	j�
�}	|	dkr�td��t	j
��r�|	�d�s�t�d�t|	�}tjd}|�||j|f�tj�dd��r�tttjd|��}
t|�t|
�k�rrtjddd�tjdtjdddd�|t|
�d�D]}|
�d|f��q�ndd�|D�}
|
D]:}|\}}
|
dk�r�td��t|
�}|�||j|f��q�|j||jd�}g}|D]>}|�dd�}|�dd�}|�r.t	j�|�|�t|���q|j�d�|�tjd�p\d �t	j
���rztjd!dd�dS)"z= encrypt the supplied string using the provided vault secret NcSsg|]}|dkr|�qS)r[rrgrrrrj(rkz3VaultCLI.execute_encrypt_string.<locals>.<listcomp>rr5zString to encrypt: z#Variable name (enter for no name): r|r7zString to encrypt (hidden): zString to encrypt:)Zprivatez@The plaintext provided from the prompt was empty, not encryptingzpReading plaintext input from stdin. (ctrl-d to end input, twice if your content does not already have a newline)Trtzstdin was empty, not encryptingr~r:r8Fz=The number of --name options do not match the number of args.zCThe last named variable will be "%s". The rest will not have names.���cSsg|]}d|f�qS�NrrgrrrrjkrkzKThe plaintext provided from the command line args was empty, not encrypting�rX�err�out�
r$r[rv)rror^�promptr	rr9�FROM_PROMPTrrBrxrwr�read�endswith�
FROM_STDIN�getrn�zipra�	FROM_ARGS�_format_output_vault_stringsrru�writerrZ
write_datarq)r�b_plaintext�b_plaintext_listr�msgr�Zname_prompt_responseZ
hide_inputZprompt_responseZ
stdin_textZname_and_text_listZ	extra_argZ
name_and_text�	plaintextZoutputsZb_outsrWr�r�rrrrSsx





���
 zVaultCLI.execute_encrypt_stringcCs�d}t|�dkrd}g}t|�D]t\}}|\}}}	|jj||j|d�}
|j|
|	d�}d}|r�|d}
|	rxd|	|
|f}nd|
|f}|�||d��q |S)	NFrZTr�)r�zD# The encrypted version of variable ("%s", the string #%d from %s).
z4# The encrypted version of the string #%d from %s.)
)r�r�)ra�	enumeraterrZ
encrypt_bytesrr�r9)rr�rXZshow_delimiterrW�indexZb_plaintext_infor��srcr�r�Z	yaml_text�err_msgZhuman_indexrrrr��s 
z%VaultCLI._format_output_vault_stringscCsjtjds"tj��r"tjddd�tjdp0dgD]}|jj|tjdd�q2tj��rftjddd�d	S)
z; decrypt the supplied file using the provided vault secret rz#Reading ciphertext input from stdinTrtr[r$)r$zDecryption successfulN)	rrorBrrwr^rrZdecrypt_filerxryrrrrO�s
zVaultCLI.execute_decryptcCs>ttjd�dkrtd��|jjtjdd|j|jd�dS)zf create and open a file in an editor that will be encrypted with the provided vault secret when closedrrZz8ansible-vault create can take only one filename argumentrr�N)rarror	rrZcreate_filerr)rrrrrN�s
�zVaultCLI.execute_createcCs tjdD]}|j�|�q
dS)za open and decrypt an existing vaulted file in an editor, that will be encrypted again when closedrN)rrorrZ	edit_fileryrrrrP�szVaultCLI.execute_editcCs.tjdD]}|j�|�}|�t|��q
dS)z_ open, decrypt and view an existing vaulted file using a pager using the supplied vault secret rN)rrorrr�Zpagerr
)rrzr�rrrrQ�szVaultCLI.execute_viewcCs6tjdD]}|j�||j|j�q
tjddd�dS)zN re-encrypt a vaulted file with a new secret, the previous secret is required rzRekey successfulTrtN)rrorrZ
rekey_filerrr^ryrrrrT�s
�zVaultCLI.execute_rekey)NN)N)�__name__�
__module__�__qualname__�__doc__r�r�r�r�rr>r\rlrR�staticmethodr�rSr�rOrNrPrQrT�
__classcell__rrrrrs&

Dhk
!	rcCst�|�dSr�)rZcli_executor)rrrr�main�sr��__main__)N)"Z
__future__rrrr'Z
__metaclass__Zansible.clirr?rBZansiblerrprZansible.cli.argumentsrrDZansible.errorsr	Zansible.module_utils._textr
rZansible.parsing.dataloaderrZansible.parsing.vaultr
rrZansible.utils.displayrr^rr�r�rrrr�<module>s(B