o
    3\j                     @  s   d dl mZ d dlZd dlm  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"   :/var/www/html/flask_server/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  s  |  d}|j}d}||k}|sDtd|fd||fdt v s%t|r*t|ndt|t|d }dd|i }tt	|d  } }}|
 d	 }d
}||k}|s{td|fd||ft|t|d }	dd|	i }
tt	|
d  } }}d S )N/api/v1/platform/connection  ==z3%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py5)sresponsepy0py2py5assert %(py7)spy7messagezMissing Bearer tokenz%(py1)s == %(py4)spy1py4assert %(py6)spy6)getstatus_code
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationget_json)r)   rM   @py_assert1@py_assert4@py_assert3@py_format6@py_format8@py_assert0@py_assert2@py_format5@py_format7r"   r"   r#   %test_connection_rejects_missing_tokenB   s   
rro   c                 C  s  | j dddt| id}| }|j}d}||k}|sQtd|fd||fdt v s2t|r7t	|ndt	|t	|d	 }d
d|i }t
t|d  } }}|d }	d}|	|u }
|
std|
fd|	|ft	|	t	|d }dd|i }t
t|d  }	 }
}|d d }	d}|	|k}
|
std|
fd|	|ft	|	t	|d }dd|i }t
t|d  }	 }
}|d d }	d}|	|k}
|
std|
fd|	|ft	|	t	|d }dd|i }t
t|d  }	 }
}d S )NrH   AuthorizationBearer r>      rJ   rL   rM   rN   rR   rS   authenticatedT)is)z%(py1)s is %(py4)srV   rY   rZ   identityr3   r-   rU   subjectr,   )r[   rG   re   r\   r]   r^   r_   r`   ra   rb   rc   rd   )r)   r$   rM   payloadrf   rg   rh   ri   rj   rk   rl   rm   rn   r"   r"   r#   #test_connection_accepts_valid_tokenH   s   jnrry   c           	      C  s   t |dgd}| jddd| id}|j}d}||k}|sRtd|fd	||fd
t v s3t|r8t|nd
t|t|d }dd|i }t	t
|d  } }}d S )Nzwp_invoices:read)r6   rH   rp   rq   rr   i  rJ   rL   rM   rN   rR   rS   rG   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   	r)   r$   tokenrM   rf   rg   rh   ri   rj   r"   r"   r#   #test_connection_rejects_wrong_scopeT   s   r}   c           	      C  s   t |dd}| jddd| id}|j}d}||k}|sQtd|fd	||fd
t v s2t|r7t|nd
t|t|d }dd|i }t	t
|d  } }}d S )Nzhttps://attacker.example)r0   rH   rp   rq   rr   rI   rJ   rL   rM   rN   rR   rS   rz   r{   r"   r"   r#   $test_connection_rejects_wrong_issuer]   s   r~   )r   r   r   r   )r   r*   r+   r   )!
__future__r   builtinsr_   _pytest.assertion.rewrite	assertionrewriter]   osr@   pathlibr   rB   pytest)cryptography.hazmat.primitives.asymmetricr   ,cryptography.hazmat.primitives.serializationr   r   r   r   flaskr	   platform.gateway.platform_apir
   fixturer$   r)   rG   ro   ry   r}   r~   r"   r"   r"   r#   <module>   s&    "

	