U
    H4f                     @   sB   d dl Z d dlZd dlZd dlmZ d dlmZ G dd dZdS )    N)ns)utilsc                   @   sB   e Zd ZdZdZdZdddZdd	 Zd
d Zdd Z	dd Z
dS )UsernameTokenaP  UsernameToken Profile 1.1

    https://docs.oasis-open.org/wss/v1.1/wss-v1.1-spec-os-UsernameTokenProfile.pdf

    Example response using PasswordText::

        <wsse:Security>
          <wsse:UsernameToken>
            <wsse:Username>scott</wsse:Username>
            <wsse:Password Type="wsse:PasswordText">password</wsse:Password>
          </wsse:UsernameToken>
        </wsse:Security>

    Example using PasswordDigest::

        <wsse:Security>
          <wsse:UsernameToken>
            <wsse:Username>NNK</wsse:Username>
            <wsse:Password Type="wsse:PasswordDigest">
                weYI3nXd8LjMNVksCKFV8t3rgHh3Rw==
            </wsse:Password>
            <wsse:Nonce>WScqanjCEAC4mQoBE07sAQ==</wsse:Nonce>
            <wsu:Created>2003-07-16T01:24:32Z</wsu:Created>
          </wsse:UsernameToken>
        </wsse:Security>

    zRhttp://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0zQhttp://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0NFc
           
      C   s:   || _ || _|| _|| _|| _|| _|| _|| _|	| _dS )z
        Some SOAP services want zulu timestamps with Z in timestamps and
        in password digests they may want password to be hashed before
        adding it to nonce and created.
        N)	usernamepasswordpassword_digestnoncecreated
use_digesttimestamp_tokenzulu_timestamphash_password)
selfr   r   r   r
   r   r	   r   r   r    r   6/tmp/pip-unpacked-wheel-04z2hmy8/zeep/wsse/username.py__init__)   s    zUsernameToken.__init__c                 C   s   t |}|dtj }|d kr6t j }|| | jd k	rL|| j t j| j	g}| j
d k	sp| jd k	r| jr||   n||   || ||fS )Nz{%s}UsernameToken)r   Zget_security_headerfindr   WSSEr   appendr   ZUsernamer   r   r   r
   extend_create_password_digest_create_password_text)r   envelopeheaderssecuritytokenelementsr   r   r   applyD   s    




zUsernameToken.applyc                 C   s   d S )Nr   )r   r   r   r   r   verify\   s    zUsernameToken.verifyc                 C   s   t jj| jd| j dgS )Nz%s#PasswordTextType)r   r   Passwordr   username_token_profile_ns)r   r   r   r   r   _   s
     z#UsernameToken._create_password_textc                 C   s  | j r| j d}n
td}t| j| j}t| j	t
rH| j	d}n| j	}| js| jrtt||d t|   d}n6| jstt||d |  d}n| j}tjj|d| j dtjjt|dd| j dtj|gS )Nzutf-8   asciiz%s#PasswordDigestr   z%s#Base64Binary)ZEncodingType)r   encodeosurandomr   Zget_timestampr	   r   
isinstancer   strr   r   base64	b64encodehashlibsha1digestdecoder   r!   r"   ZNoncesoap_message_secutity_nsZWSUCreated)r   r   	timestampr   r.   r   r   r   r   f   s@    
 
z%UsernameToken._create_password_digest)NNFNNNNN)__name__
__module____qualname____doc__r"   r0   r   r   r   r   r   r   r   r   r   r   	   s            
r   )r*   r,   r&   Zzeepr   Z	zeep.wsser   r   r   r   r   r   <module>   s
   