o
    g                     @   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                   @   sR   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   K/home/ubuntu/webapp/venv/lib/python3.10/site-packages/zeep/wsse/username.py__init__)   s   
zUsernameToken.__init__c                 C   s   t |}|dtj }|d u rt j }|| | jd ur&|| j t j| j	g}| j
d us8| jd urJ| jrC||   n||   || ||fS )Nz{%s}UsernameToken)r   get_security_headerfindr   WSSEr   appendr   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
r$| j	d}n| j	}| jsG| jrGtt||d t|   d}n| js_t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)EncodingType)r   encodeosurandomr   get_timestampr	   r   
isinstancer   strr   r   base64	b64encodehashlibsha1digestdecoder   r#   r$   Noncesoap_message_secutity_nsWSUCreated)r   r   	timestampr   r2   r   r   r   r   f   s@   


z%UsernameToken._create_password_digest)NNFNNNNN)__name__
__module____qualname____doc__r$   r5   r   r   r    r   r   r   r   r   r   r   	   s"    
r   )r.   r0   r)   zeepr   	zeep.wsser   r   r   r   r   r   <module>   s    