
    h                        d dl mZmZ d dlmZ d dlmZmZ d dlmZm	Z	 d dl
mZ d dlmZ d dlmZmZ  ed	      Z ed
	      Z G d de      Z G d d      Z ee      fdedefdZ ee      fdedefdZdefdZdefdZy)    )DependsHTTPException)OAuth2PasswordBearer)JWTErrorjwt)datetime	timedelta)settings)	BaseModel)LiteralOptionalz/FASTAPI/user/login)tokenUrlz/FASTAPI/student/loginc                   `    e Zd ZU dZee   ed<   dZee   ed<   ed   ed<   ed   ed<   e	ed<   y)	JWTPayloadSchemaNuser_id
student_id)studentadminuser	user_type)r   r   
superadmin	user_roleexp)
__name__
__module____qualname__r   r   int__annotations__r   r   r        8/var/www/html/RetailAPI/app/dependency/authantication.pyr   r      s;    !GXc]! $J$122788	Mr    r   c                   @    e Zd Zededefd       Zededefd       Zy)
JWTManagerdatareturnc                     t        j                         t        t        j                        z   }|| _        | j                  d      }t        j                  |t        j                  t        j                        S )N)minutesT)exclude_none)	algorithm)r   utcnowr	   r
   ACCESS_TOKEN_EXPIRE_MINUTESr   dictr   encode
SECRET_KEY	ALGORITHM)r$   expirepayloads      r!   create_access_tokenzJWTManager.create_access_token   sT    "Yx7[7[%\\))).zz'8#6#6(BTBTUUr    tokenc                    	 t        j                  | t        j                  t        j                  g      }h d}|j                  |      st        dd      t        j                         t        j                  |d         kD  rt        dd      t        di |S # t        $ r t        dd	      t        $ r}t        d
dt        |             d }~ww xY w)N)
algorithms>   r   r   r   i  zInvalid token structurestatus_codedetailr     zToken has expiredzInvalid or tampered tokeni  zInternal error: r   )r   decoder
   r.   r/   issubsetr   r   r*   utcfromtimestampr   r   	Exceptionstr)r3   r1   required_keyses       r!   verify_tokenzJWTManager.verify_token   s    	Ujj(;(;I[I[H\]G >M ))'2#<UVV  8#<#<WU^#LL#<OPP#.g.. 	UC8STT 	UC:J3q6(8STT	Us   BB C<CCN)r   r   r   staticmethodr   r>   r2   rA   r   r    r!   r#   r#      sN    V"2 Vs V V UC U$4 U Ur    r#   r3   r%   c                 H    t        d|         t        j                  |       S )NzReceived user token: printr#   rA   r3   s    r!   get_current_userrG   3   s#    	!%
)*""5))r    c                 H    t        d|         t        j                  |       S )NzReceived student token: rD   rF   s    r!   get_current_studentrI   8   s#    	$UG
,-""5))r    allowed_rolesc                  >     t        t              fdt        f fd}|S )Ncurrent_userc                 >    | j                   vrt        dd      | S Nr9   z#Access forbidden: insufficient roler6   r   r   )rL   rJ   s    r!   role_checkerz!allow_roles.<locals>.role_checker>   s%    !!6C8]^^r    )r   rG   r   rJ   rP   s   ` r!   allow_rolesrR   =   s!    6=>N6O #3 
 r    c                  >     t        t              fdt        f fd}|S )Ncurrent_studentc                 >    | j                   vrt        dd      | S rN   rO   )rT   rJ   s    r!   rP   z)allow_student_roles.<locals>.role_checkerH   s%    $$M9C8]^^r    )r   rI   r   rQ   s   ` r!   allow_student_rolesrV   G   s!    9@AT9U &6 
 r    N)fastapir   r   fastapi.securityr   joser   r   r   r	   
app.configr
   pydanticr   typingr   r   user_oauth2_schemestudent_oauth2_schemer   r#   r>   rG   rI   rR   rV   r   r    r!   <module>r_      s    * 1  (   $ *3HI ,6NO y U U< #**<"= *C *BR *
 &--B%C *s *HX *
  r    