
    HCi                         d dl mZmZmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZmZmZmZmZ  ed      Z e       Z ee       ee      fdededefdZdefdZ y)    )DependsHTTPExceptionstatus)OAuth2PasswordBearer)Sessionselect)JWTError)decode_token)get_settings)get_session)UserRole)UserSessionRepository)ERR_INVALID_TOKENERR_NOT_VALID_CREDERR_USER_NOT_FOUNDERR_USER_DELETEDERR_FORBIDDENz/api/auth/login)tokenUrltokensessionreturnc                    	 t        |       }|j                  d      dk7  rt        t        j                  t
              |j                  d      }|j                  d      }|r|st        t        j                  t
              	 t        j                  ||      }|st        t        j                  t
              t        t              j                  t        j                  |k(  t        j                  dk(        }|j                  |      j!                         }|st        t        j                  t"              |S # t        $ r$}t        t        j                  t              d }~ww xY w)Ntypeaccessstatus_codedetailsubsidF)r
   getr   r   HTTP_401_UNAUTHORIZEDr   r	   r   r   get_active_by_session_idr   r   whereemail
is_deletedexecfirstr   )	r   r   payloadr   r    euser_sessionstmtusers	            >/var/www/html/story-book/Story-Book-python-api/app/api/deps.pyget_current_userr/      s   	au%;;v(*F,H,HQbcckk% kk% #F,H,HQbcc 
 )AA'3OL(D(DM^__$<djjC/E1IJD<<##%D(D(DM_``K  a(D(DM_``as   BE   	E-	E((E-allowed_rolesc                  >     t        t              fdt        f fd}|S )z]
    Correct FastAPI-compatible role checker.
    Must return a callable, NOT Depends().
    current_userc                 j   K   | j                   vrt        t        j                  t              | S w)Nr   )roler   r   HTTP_403_FORBIDDENr   )r2   r0   s    r.   role_checkerz#require_roles.<locals>.role_checker1   s6     M1"55$  s   03)r   r/   r   )r0   r6   s   ` r.   require_rolesr7   ,   s"    
 188H0I       N)!fastapir   r   r   fastapi.securityr   sqlmodelr   r   joser	   app.utils.tokensr
   app.core.configr   app.db.sessionr   
app.modelsr   r   "app.repositories.user_session_repor   app.core.constantsr   r   r   r   r   oauth2_schemesettingsstrr/   r7    r8   r.   <module>rG      sx    2 2 1 $  ) ( & ! D  %.?@>")-"8WU`Ma C 7 fj .$ r8   