o
    žh�j  ã                   @   s¦   d dl m Z mZmZ d dlmZmZ d dlZd dlZd dlm	Z	 de
de
fdd„Zd	e
d
e
defdd„ZddededB de
fdd„Zde
dee
ef dB fdd„ZdS )é    )ÚdatetimeÚtimezoneÚ	timedelta)ÚAnyÚDictN)ÚsettingsÚpasswordÚreturnc                 C   s4   |   d¡dd… }tjdd�}t ||¡}| d¡S )zZ
    Hashes a plain-text password using bcrypt (72-byte max length truncated safely).
    úutf-8NéH   é   )Úrounds)ÚencodeÚbcryptÚgensaltÚhashpwÚdecode)r   Ú	pwd_bytesÚsaltÚhashed© r   ú3/web/html/dev/chatbot/backend/app/utils/security.pyÚhash_password   s   
r   Úplain_passwordÚhashed_passwordc                 C   sL   | r|sdS z|   d¡dd… }|  d¡}t ||¡W S  ty%   Y dS w )z?
    Verifies a plain-text password against a bcrypt hash.
    Fr
   Nr   )r   r   ÚcheckpwÚ	Exception)r   r   r   Ú
hash_bytesr   r   r   Úverify_password   s   
ÿr   ÚdataÚexpires_deltac                 C   sj   |   ¡ }t tj¡}|r|| }n|ttjd� }| t	| 
¡ ƒt	| 
¡ ƒdœ¡ tj|tjtjd�}|S )zz
    Creates a JWT access token containing agent identity claims.
    Required payload keys: 'sub' (agentId), 'role'.
    )Úminutes)ÚexpÚiat)Ú	algorithm)Úcopyr   Únowr   Úutcr   r   Újwt_expiration_minutesÚupdateÚintÚ	timestampÚjwtr   Ú
jwt_secretÚjwt_algorithm)r   r    Ú	to_encoder&   ÚexpireÚencoded_jwtr   r   r   Úcreate_access_token   s   


þýr2   Útokenc              	   C   sB   | sdS zt j| tjtjgd�}|W S  t jt jfy    Y dS w )z~
    Decodes and verifies a JWT access token.
    Returns the token payload if valid and non-expired, or None if invalid.
    N)Ú
algorithms)r,   r   r   r-   r.   ÚExpiredSignatureErrorÚInvalidTokenError)r3   Úpayloadr   r   r   Údecode_access_token6   s   ýÿr8   )N)r   r   r   Útypingr   r   r,   r   Ú
app.configr   Ústrr   Úboolr   Údictr2   r8   r   r   r   r   Ú<module>   s    	"