o
    xhw                     @   sb   d dl Z d dlZd dlmZmZ d dlmZ d dlmZ eddZ	ddd	Z
d
d Zdd ZdS )    N)datetime	timedelta)requestwraps
SECRET_KEYZ	secret123  c                 C   s2   |   }t t|d |d< tj|tdd}|S )zQ
    Generate a JWT token for a given payload.
    Default expiry = 30 days.
    )minutesexpHS256)	algorithmN)copyr   utcnowr   jwtencoder   )payloadZexpires_in_minutesZpayload_copytoken r   OD:\Internship2\StudyBuddy\EduRuby_flask\flask_backend-main\utils\jwt_service.pygenerate_token
   s   r   c                 C   sD   zt j| tdgd}|W S  t jy   Y dS  t jy!   Y dS w )zj
    Decode and verify a JWT token.
    Returns decoded payload if valid, None if invalid or expired.
    r   
algorithmsN)r   decoder   ExpiredSignatureErrorInvalidTokenError)r   r   r   r   r   decode_token   s   r   c                    s   t   fdd}|S )Nc                     s   t jdd }|sddddfS z|dd }tj|tdgd	}|d
 t _W n! tjy8   ddddf Y S  tj	yH   ddddf Y S w  | i |S )NAuthorizationFzToken missing)statusmessagei      r   r   idzToken expiredzInvalid token)
r   headersgetsplitr   r   r   user_idr   r   )argskwargsauthr   r   fr   r   	decorated$   s   zjwt_required.<locals>.decoratedr   )r*   r+   r   r)   r   jwt_required#   s   r,   )r   )r   osr   r   flaskr   	functoolsr   getenvr   r   r   r,   r   r   r   r   <module>   s    
