U
    g                     @   s2  d dl mZmZmZmZ d dlZd dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZ d$ee ee eee ef eeee ef eee dd	d
ZejedddZejdddedejdddde
dejdddeddddejdddde
dgZedejdZeedddZd d! Zd"d# ZdS )%    )IterableOptionalTypeVarUnionN)	CLIConfig)loggerreadable_file)ConfigurationError)init_validation_context_kwargs)load_certs_from_pemder)
cli_configvalidation_contexttrusttrust_replaceother_certsretroactive_revinfoallow_fetchingc           
   
   C   s  z<|d k	rt ||fr"td| d kr4tdz| j|dd}W nF tk
r } z(d| d}	tj|	|d t|	W 5 d }~X Y nX n||s|rt||||d}nb| d k	rz| jdd}W n@ tk
r } z d	}	tj|	|d t|	W 5 d }~X Y nX ni }|d k	r ||d
< n|d
d |r:d|d< |W S  tjk
rX    Y n~ t	k
r } z d}	tj|	|d t|	W 5 d }~X Y n@ t
k
r } z d}	tj|	|d t|	W 5 d }~X Y nX d S )NzC--validation-context is incompatible with --trust and --other-certszNo config file specified.T)Zas_dictzAConfiguration problem. Are you sure that the validation context 'z0' is properly defined in the configuration file?)exc_info)r   r   r   r   z*Failed to load default validation context.r   r   z+I/O problem while reading validation configz:Generic processing problem while reading validation config)anyclickClickExceptionZget_validation_contextr	   r   errorr
   
setdefaultIOError	Exception)
r   r   r   r   r   r   r   resultemsg r   6/tmp/pip-unpacked-wheel-owvgwkas/pyhanko/cli/_trust.pybuild_vc_kwargs   sb    	
 




r    )ctxr   c                 C   s    | j j}|d krd S |j|dS )N)name)objconfigZget_signer_key_usages)r!   r   r   r   r   r   _get_key_usage_settingsT   s    r%   )z--validation-contextz"use validation context from configF)helprequiredtype)z--trustz#list trust roots (multiple allowed)T)r&   r'   multipler(   )z--trust-replacez4listed trust roots supersede OS-provided trust store)r&   r'   r(   Zis_flagdefaultZshow_default)z--other-certsz#other certs relevant for validationFC)bound)freturnc                 C   s   | j t | S )N)paramsextendTRUST_OPTIONS)r-   r   r   r   trust_options   s    r2   c                 C   s6   |r|rt d|rd}n|r&d}nd}|| d< | S )Nz<--soft-revocation-check is incompatible with --force-revinforequirez	soft-failz	hard-failZrevocation_mode)r   r   )Z	vc_kwargsZsoft_revocation_checkZforce_revinfoZrev_moder   r   r   _prepare_vc   s    r4   c              
   C   sT   | sd S zt t| W S  ttfk
rN } ztd|  |W 5 d }~X Y nX d S )Nz!Could not load certificates from )listr   r   
ValueErrorr   r   )filesr   r   r   r   
grab_certs   s    r8   )N)typingr   r   r   r   r   Zpyhanko.cli.configr   Zpyhanko.cli.utilsr   r   Zpyhanko.config.errorsr	   Zpyhanko.config.trustr
   Zpyhanko.keysr   strboolr    Contextr%   Optionr1   Commandr+   r2   r4   r8   r   r   r   r   <module>   sf   
 H	!