o
    tBh                     @   s   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
 d dlmZ d dlmZmZmZ dZeeZdd ZG d	d
 d
eZdS )    )print_functionN)OrderedDict)AuthBase)	urlencodequoteurlparsez0.4c                 C   s   t | |dtj S )z Sign message using key utf-8)hmacnewencodehashlibsha256digest)keymsg r   m/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/sp_api/base/aws_sig_v4.pysign_msg   s   r   c                   @   s   e Zd Zdd Zdd ZdS )AWSSigV4c                 K   sV   || _ |d| _|d| _|d| _| jd u s| jd u r#td|d| _d S )Naws_access_key_idaws_secret_access_keyaws_session_tokenz4AWS Access Key ID and Secret Access Key are requiredregion)servicegetr   r   r   KeyErrorr   )selfr   kwargsr   r   r   __init__   s   zAWSSigV4.__init__c              
   C   s<  t j  }|d| _|d| _td| j t|j}|j	}t
j|j}t|jdkrDttdd |jd}t|dd d	}nt }d
d |D }dtdd |}|| jd}	| jd urn| j|	d< | j|jd< tt|	 dd d	}
dtdd |
 }d|
 }|jdkrtdd }n|jsd|_t|jd }d|j|||||g}d| j| j | j!dg}dd| j|t|d g}td| t"d| j# d| j}t"|| j }t"|| j!}t"|d}t$%||dtj }d&| j'|||}|j(|| j|d |S )Nz%Y%m%dT%H%M%SZz%Y%m%dz'Starting authentication with amzdate=%sr   c                 S   s
   |  dS N=)splitparamr   r   r   <lambda>-      
 z#AWSSigV4.__call__.<locals>.<lambda>&c                 S   s   | d | d fS )Nr      r   r"   r   r   r   r$   .   s    )r   c                 S   s$   g | ]}|d  |d  ddgqS )r   r'   +z%20)replace).0elmr   r   r   
<listcomp>2   s   $ z%AWSSigV4.__call__.<locals>.<listcomp>c                 S   s
   d | S r   joinr"   r   r   r   r$   3   r%   )host
x-amz-datezx-amz-security-tokenc                 S   s   | d S )Nr   r   )tr   r   r   r$   :   s     c                 S   s   d | d S )N:
r-   )hr   r   r   r$   ;   s    ;GETr   r4   /aws4_requestzAWS4-HMAC-SHA256zString-to-Sign: '%s'AWS4zAAWS4-HMAC-SHA256 Credential={}/{}, SignedHeaders={}, Signature={})r/   r0   Authorization))datetimeutcnowstrftimeamzdate	datestamplogdebugr   urlhostnameurllibparser   pathlenquerylistmapr!   sortedr.   r   headersr   itemskeysmethodr   r   r   	hexdigestbodyr   r   r   r   r	   r
   formatr   update)r   rr1   pr/   urisplit_query_parametersordered_query_parameterscanonical_querystringheaders_to_signordered_headerscanonical_headerssigned_headerspayload_hashcanonical_requestcredential_scopestring_to_signkDatekRegionkServicekSigning	signatureauthorization_headerr   r   r   __call__!   s^   







zAWSSigV4.__call__N)__name__
__module____qualname__r   ri   r   r   r   r   r      s    	r   )
__future__r   osr<   r   r	   loggingurllib.parserE   collectionsr   requests.authr   requests.compatr   r   r   __version__	getLoggerrj   rA   r   r   r   r   r   r   <module>   s    
