
    WwgK'                     H   U d dl mZ d dlmZ d dlmZmZmZmZm	Z	 d dl
Z
d dlmZ d dlmZ d dlmZmZ 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 e G d d             Z ed       G d d             ZdxZZ eedZ!ee"ee   f   e#d<   defdZ$de%de%fdZ&de%de%fdZ'y)    )	dataclass)	timedelta)DictListOptionalTypeUnionN)ValidationContext)ConfigurationError)	LogConfigparse_logging_config)DEFAULT_TIME_TOLERANCEparse_trust_config)DEFAULT_SIGNING_STAMP_STYLE)KeyUsageConstraints)BaseStampStyleQRStampStyleTextStampStylec                       e Zd ZU dZeeef   ed<   	 eeef   ed<   	 eed<   	 eed<   	 eed<   	 e	ed<   	 eed<   	 dd
Z
	 ddee   de	fdZ	 ddee   defdZ	 ddee   deeef   fdZy	)	CLIConfigz%
    CLI configuration settings.
    validation_contextsstamp_stylesdefault_validation_contextdefault_stamp_styletime_toleranceretroactive_revinfo
raw_configNc                 z    |xs | j                   }	 | j                  |   S # t        $ r t        d| d      w xY w)Nz&There is no validation context named ''.)r   r   KeyErrorr   )selfnames     I/var/www/horilla/myenv/lib/python3.12/site-packages/pyhanko/cli/config.py_get_validation_settings_rawz&CLIConfig._get_validation_settings_raw\   sP    6t66	++D11 	$8bA 	s   ! :r"   as_dictc                     | j                  |      }t        || j                  | j                        }|r|S t	        di |S )a  
        Retrieve a validation context by name.

        :param name:
            The name of the validation context. If not supplied, the value
            of :attr:`default_validation_context` will be used.
        :param as_dict:
            If ``True`` return the settings as a keyword argument dictionary.
            If ``False`` (the default), return a
            :class:`~pyhanko_certvalidator.context.ValidationContext`
            object.
         )r$   r   r   r   r
   )r!   r"   r%   	vc_config	vc_kwargss        r#   get_validation_contextz CLIConfig.get_validation_contexte   sI     55d;	&t**D,D,D
	 $yG):)GY)GG    returnc                 *   | j                  |      }	 t        |d         }	 |d   }|j                  d|       	 |d   }|j                  d|       t	        j
                  |      S # t        $ r i }Y Rw xY w# t        $ r Y Iw xY w# t        $ r Y @w xY w)a:  
        Get a set of key usage constraints for a given validation context.

        :param name:
            The name of the validation context. If not supplied, the value
            of :attr:`default_validation_context` will be used.
        :return:
            A :class:`.KeyUsageConstraints` object.
        zsigner-key-usage-policyzsigner-key-usagez	key-usagezsigner-extd-key-usagezextd-key-usage)r$   dictr    
setdefaultr   from_config)r!   r"   r(   policy_settingskey_usage_stringss        r#   get_signer_key_usageszCLIConfig.get_signer_key_usagesz   s     55d;		!"9-F#GHO	 )*< =&&{4EF	 )*A B&&'79JK #..??'  	! O	!  		  		s3   A& A7 B &A43A47	BB	BBc                 6   |xs | j                   }| j                  j                  |d      }|t        d| d      	 t	        |      }t        |j                  dd         }|j                  |      S # t
        t        f$ r}t        d| d      |d}~ww xY w)a  
        Retrieve a stamp style by name.

        :param name:
            The name of the style. If not supplied, the value
            of :attr:`default_stamp_style` will be used.
        :return:
            A :class:`TextStampStyle` or `QRStampStyle` object.
        NzThere is no stamp style named 'r   z%Could not process stamp style named ''typetext)
r   r   getr   r.   	TypeError
ValueErrorSTAMP_STYLE_TYPESpopr0   )r!   r"   configstyle_configeclss         r#   get_stamp_stylezCLIConfig.get_stamp_style   s     /t//""&&tT2>$'FtfB%OPP	<L
   0 0 @A|,, :& 	$7vQ?	s   A4 4BBB)N)NF)__name__
__module____qualname____doc__r   strr.   __annotations__r   boolr$   r   r*   r   r3   r	   r   r   rA   r'   r+   r#   r   r      s     c4i(6 sDy/!	 !$#
 
  
  ;@HSMH37H, %)#@SM#@	#@L %)-SM-	~|+	,-r+   r   T)frozenc                   J    e Zd ZU dZeed<   	 eee   e	f   ed<   	 e
e   ed<   y)CLIRootConfigzs
    Config settings that are only relevant tothe CLI root and are not exposed
    to subcommands and plugins.
    r=   
log_configplugin_endpointsN)rB   rC   rD   rE   r   rG   r   r   rF   r   r   r'   r+   r#   rK   rK      s@    
  Xc]I-.. 3ir+   rK   default)qrr7   r;   r,   c                     t        j                  |       xs i }t        di t        |      dt	        di t        |      d|iiS )Nr=   r   r'   )yaml	safe_loadrK   process_root_config_settingsr   process_config_dict)yaml_strconfig_dicts     r#   parse_cli_configrW      sQ    ..*0bK 
&{
3 
!+.
;F
 r+   rV   c                 z    | j                  dg       }| j                  di       }t        |      }t        ||      S )Npluginslogging)rL   rM   )r8   r   r.   )rV   rY   log_config_specrL   s       r#   rS   rS      s?    ooi,G!ooi4O%o6J  r+   c                    t         i i}	 | d   }|j                  |       t        t        j
                  ddi}	 | d   }|j                  |       | j                  dt               }| j                  dt              }| j                  dt        j                        }t        |t              st        d      t        |	      }t        | j                  d
d            }	t        ||||	||      S # t        $ r Y w xY w# t        $ r Y w xY w)Nzvalidation-contexts	__stamp__)z
stamp-text
backgroundzstamp-styleszdefault-validation-contextzdefault-stamp-styleztime-tolerancez5time-tolerance parameter must be specified in seconds)secondszretroactive-revinfoF)r   r   r   r   r   r   )DEFAULT_VALIDATION_CONTEXTupdater    DEFAULT_STAMP_STYLEr   
stamp_textr8   r   r_   
isinstanceintr   r   rH   r.   )
rV   vcsvc_specsstamp_configsstamp_specs
default_vcr   time_tolerance_secondsr   r   s
             r#   rT   rT     s4   6;C45

8 	5@@%
M!.1[)
 $&@J &//2 )__088 ,c2 C
 	
 '=>N{/DeLM#-%/"/ G    s"   C/ C> /	C;:C;>	D
	D
)(dataclassesr   datetimer   typingr   r   r   r   r	   rQ   pyhanko_certvalidatorr
   pyhanko.config.errorsr   pyhanko.config.loggingr   r   pyhanko.config.trustr   r   pyhanko.sign.signersr    pyhanko.sign.validation.settingsr   pyhanko.stampr   r   r   r   rK   r`   rb   r;   rF   rG   rW   r.   rS   rT   r'   r+   r#   <module>rv      s    !  4 4  3 4 B K < @ F F e- e- e-P $$ $ $X 4= < 0
6 4T.112 - d t 0T 0d 0r+   