o
    RDi                     @  s   d dl m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	 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 dddZdddZdddZdddZdd Zedkrae  dS dS )    )annotationsN)ArgumentParser	Namespace)gmtimestrftime)ocsp)urlsplit)SnowflakeOCSPAsn1Crypto)OCSPTelemetryData)_openssl_connectreturnr   c                  C  sb   t ddd} | jddddtd d | jd	dd
g dd | jdddd d | jdddd |  S )Ndump_ocsp_responsez3Dump OCSP Response for the URLs (an internal tool).)progdescriptionz-oz--output-fileFzDump output file)requiredhelptypedefaultz--log-levelz	Log level)DEBUGINFOWARNINGERRORCRITICAL)r   r   choicesz
--log-filezLog file)r   r   r   urls+zURLs to dump OCSP Response for)nargsr   )r   add_argumentstr
parse_args)parser r!   d/var/www/Datamplify/venv/lib/python3.10/site-packages/snowflake/connector/tool/dump_ocsp_response.py_parse_args   s*   r#   Nonec                  C  sV   t  } | jr!| jrtj| jtt| j d n	tjtjtj	d t
| j| jd dS )z$Internal Tool: OCSP response dumper.)filenamelevel)streamr&   )output_filenameN)r#   	log_levellog_fileloggingbasicConfiggetattruppersysstdoutr   r   r   output_file)argsr!   r!   r"   main*   s   r3   c                 C  s   t d|d j t d|d j |d jjd dtj  }|d jjd dtj  }t||}t dtdt	||  t
| ||rQt d d S t t| || d S )	NzThis Update: {}this_updatezNext Update: {}next_update)tzinfozTolerable Update: {}%Y%m%d%H%M%SZOK)printformatnativereplaceSFOCSP
ZERO_EPOCHtotal_seconds_calculate_tolerable_validityr   r   _is_validaity_range_validity_error_message)current_timesingle_responser4   r5   tolerable_validityr!   r!   r"   dump_good_status7   s"   rF   c                 C  sD   | d }|j d }|j d }td|tj td|  d S )Ncert_statusrevocation_timerevocation_reasonzRevoked Time: {}zRevoked Reason: )r;   r9   r:   r   r=   OUTPUT_TIMESTAMP_FORMAT)rD   revoked_inforH   rI   r!   r!   r"   dump_revoked_statusM   s   


rL   c                 C  s  t  }| D ]}|dsd| }t|}|j}|jpd}t||}||}tt }	t	d|  t	d
tdt|	 |D ]\}
}||
|\}}||
|t \}}}}}tj|}t	d t	d|jj  t	d	|
jj  t	d
|j  t	d|jd j  t	d|jj  t	d|
jj  t	d|j  t	d
|d j |j}|d }t	d
|d j tt }	|d D ]}|d j}|dkrt|	| q|dkrt| qt	d qt	d qA|rt j || qt jS )Nhttpzhttps://i  zTarget URL: zCurrent Time: {}r7   z<------------------------------------------------------------zSubject Name: zIssuer Name: z
OCSP URI: z	CRL URI: r   zIssuer Name Hash: zIssuer Key Hash: zSerial Number: zResponse Status: {}response_statustbs_response_datazResponder ID: {}responder_id	responsesrG   goodrevokedUnknown )!r=   
startswithr   hostnameportr   extract_certificate_chaininttimer9   r:   r   r   create_ocsp_requestvalidate_by_direct_connectionr
   asn1crypto_ocspOCSPResponseloadsubjectr;   	ocsp_urlscrl_distribution_pointsissuersha1
public_keyserial_numberbasic_ocsp_responsenamerF   rL   
OCSP_CACHEwrite_ocsp_response_cache_file)r   r(   r   url
parsed_urlrW   rX   
connection	cert_datarC   rd   ra   _cert_idocsp_response_derocsp_responserh   rO   rD   rG   r!   r!   r"   r   Y   sZ   







r   __main__)r   r   )r   r$   )
__future__r   r+   r/   r[   argparser   r   r   r   
asn1cryptor   r^   snowflake.connector.compatr   #snowflake.connector.ocsp_asn1cryptor	   r=   "snowflake.connector.ocsp_snowflaker
   #snowflake.connector.ssl_wrap_socketr   r#   r3   rF   rL   r   __name__r!   r!   r!   r"   <module>   s&   



1
