
    'j                     &   d Z ddlZddlmZmZmZ ddlmZ ddlZddlZddl	m
Z
  ej        dd          ZdZ e ej        d	d
                    ZdedefdZdededefdZddedee         defdZdedee         fdZdedee         fdZdS )z2Authentication utilities for JWT token management.    N)datetime	timedeltatimezone)Optional)InvalidTokenErrorJWT_SECRET_KEYz$your-secret-key-change-in-productionHS256JWT_ACCESS_TOKEN_EXPIRE_MINUTES1440plain_passwordreturnc                     t          j        |                     d          t          j                                                  d          S )zHash a plain text password using bcrypt.

    Args:
        plain_password: Plain text password to hash

    Returns:
        bcrypt hash string
    utf-8)bcrypthashpwencodegensaltdecode)r   s    @/var/www/html/ai-enterprise-brain/backend/chanakya/auth/utils.pyhash_passwordr      s;     =..w779I9IJJQQRYZZZ    hashed_passwordc                 x    t          j        |                     d          |                    d                    S )zVerify a plain text password against a bcrypt hash.

    Args:
        plain_password: Plain text password to verify
        hashed_password: bcrypt hash from the database

    Returns:
        True if password matches, False otherwise
    r   )r   checkpwr   )r   r   s     r   verify_passwordr   !   s3     >.//88/:P:PQX:Y:YZZZr   dataexpires_deltac                 N   |                                  }|r"t          j        t          j                  |z   }n4t          j        t          j                  t          t                    z   }|                    d|i           t          j	        |t          t                    }|S )zCreate a JWT access token.

    Args:
        data: Payload data to encode in token (typically {"sub": username})
        expires_delta: Optional custom expiration time

    Returns:
        Encoded JWT token string
    )minutesexp)	algorithm)copyr   nowr   utcr   ACCESS_TOKEN_EXPIRE_MINUTESupdatejwtr   
SECRET_KEY	ALGORITHM)r   r   	to_encodeexpireencoded_jwts        r   create_access_tokenr-   2   s     		I ]hl++m;hl++i@[.\.\.\\eV_%%%*Y
iHHHKr   tokenc                 n    	 t          j        | t          t          g          }|S # t          $ r Y dS w xY w)zDecode and verify a JWT access token.

    Args:
        token: JWT token string

    Returns:
        Decoded token payload if valid, None if invalid or expired
    )
algorithmsN)r'   r   r(   r)   r   r.   payloads     r   decode_access_tokenr3   I   sF    *UJI;GGG   tts   #& 
44c                 R    t          |           }|r|                    d          S dS )zExtract username from JWT token.

    Args:
        token: JWT token string

    Returns:
        Username if token is valid, None otherwise
    subN)r3   getr1   s     r   get_username_from_tokenr7   Y   s0     "%((G "{{5!!!4r   )N)__doc__osr   r   r   typingr   r   r'   jwt.exceptionsr   getenvr(   r)   intr%   strr   boolr   dictr-   r3   r7    r   r   <module>rB      s   8 8 				 2 2 2 2 2 2 2 2 2 2        



 , , , , , , RY')OPP
	!c)"),Mv"V"VWW 	[# 	[# 	[ 	[ 	[ 	[
[C 
[# 
[$ 
[ 
[ 
[ 
[" d 8I3F RU    .s x~     3 8C=      r   