o
    3\j                     @  s   d dl mZ d dlZd dlZd dlmZ d dlZd dlZd dlm	Z	 d dl
mZmZmZmZ d dlmZ d dlmZ e dddZe dd ZdddZdd Zdd Zdd Zdd ZdS )     )annotationsN)Path)rsa)EncodingNoEncryptionPrivateFormatPublicFormat)Flask)platform_apitmp_pathr   monkeypatchpytest.MonkeyPatchc                 C  sp   t jddd}|tjtjt }| 	tjt
j}| d | |dt|  |dd |dd	 |S )
Ni  i   )public_exponentkey_sizeztest-key.pemJWT_PUBLIC_KEYS_DIRJWT_AUDIENCEabsolutems-apiJWT_ALLOWED_ISSUERShttps://absolutems.com.au)r   generate_private_keyprivate_bytesr   PEMr   PKCS8r   
public_keypublic_bytesr   SubjectPublicKeyInfowrite_bytessetenvstr)r   r   private_keyprivate_pem
public_pem r"   tests/platform/test_jwt_auth.pyjwt_keys   s   r$   c                  C  s   t t} | t |  S )N)r	   __name__register_blueprintr
   test_client)appr"   r"   r#   client(   s   
r)   r   bytesreturnr   c                 K  sT   t t }ddddddgdgd||d	 |d
 d}|| tj|| dddidS )Nr   r   	wp-user-1
absolutemsz	test-siteadministratorzplatform:connectztest-request   i,  )issaudsub	tenant_idsite_idrolesscopesjtiiatnbfexpRS256kidztest-key)	algorithmheaders)inttimeupdatejwtencode)r   	overridesnowclaimsr"   r"   r#   
make_token/   s   
rG   c                 C  s0   |  d}|jdksJ | d dksJ d S )N/api/v1/platform/connection  messagezMissing Bearer token)getstatus_codeget_json)r)   responser"   r"   r#   %test_connection_rejects_missing_tokenB   s   
rO   c                 C  sn   | j dddt| id}| }|jdksJ |d du s!J |d d	 d
ks+J |d d dks5J d S )NrH   AuthorizationBearer r>      authenticatedTidentityr3   r-   subjectr,   )rK   rG   rM   rL   )r)   r$   rN   payloadr"   r"   r#   #test_connection_accepts_valid_tokenH   s   rX   c                 C  s8   t |dgd}| jddd| id}|jdksJ d S )Nzwp_invoices:read)r6   rH   rP   rQ   rR   i  rG   rK   rL   r)   r$   tokenrN   r"   r"   r#   #test_connection_rejects_wrong_scopeT   s   r\   c                 C  s6   t |dd}| jddd| id}|jdksJ d S )Nzhttps://attacker.example)r0   rH   rP   rQ   rR   rI   rY   rZ   r"   r"   r#   $test_connection_rejects_wrong_issuer]   s   r]   )r   r   r   r   )r   r*   r+   r   )
__future__r   osr@   pathlibr   rB   pytest)cryptography.hazmat.primitives.asymmetricr   ,cryptography.hazmat.primitives.serializationr   r   r   r   flaskr	   platform.gateway.platform_apir
   fixturer$   r)   rG   rO   rX   r\   r]   r"   r"   r"   r#   <module>   s&    

	