Ë
    jqjÔ
  ã                   óò  — d dl m Z mZ d dlmZmZmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZmZmZ d dlmZmZmZmZmZ d dlmZmZ d d	lmZmZ d d
lmZmZ  eddg¬«      Z e jC                  de¬«       ee
«      fdedefd„«       Z"e jC                  de¬«       ee«      fdefd„«       Z#e jC                  de¬«       ee
«      fdedefd„«       Z$e jC                  de¬«       ee
«      fdedefd„«       Z%y)é    )ÚdatetimeÚtimezone)Ú	APIRouterÚDependsÚHTTPExceptionÚstatus)ÚSession)Úget_db)Úrequire_user_token)ÚPasswordResetTokenÚUserÚUserRole)ÚForgotPasswordRequestÚLoginRequestÚMessageÚResetPasswordRequestÚToken)Úhash_passwordÚverify_password)ÚauthenticateÚissue_token_for)Úcreate_password_reset_flowÚsend_otp_emailz/authz	user-auth)ÚprefixÚtagsz/login)Úresponse_modelÚbodyÚdbc                 ó0  — t        || j                  | j                  «      }|r|j                  t        j
                  k7  rt        t        j                  d¬«      ‚|j                  st        t        j                  d¬«      ‚t        t        |«      ¬«      S )NzInvalid user credentials©Ústatus_codeÚdetailzInactive account)Úaccess_token)r   ÚemailÚpasswordÚroler   Úuserr   r   ÚHTTP_401_UNAUTHORIZEDÚ	is_activeÚHTTP_403_FORBIDDENr   r   )r   r   r'   s      ú:/var/www/html/kelly-backend/app/routers/user_panel/auth.pyÚ
user_loginr,      si   € ä˜˜DŸJ™J¨¯©Ó6€DÙ�4—9‘9¤§¡Ò-Ü¬×(DÑ(DÐMgÔhÐhØ�>Š>Ü¬×(AÑ(AÐJ\Ô]Ð]Üœo¨dÓ3Ô4Ð4ó    z/logoutÚ_c                 ó   — t        d¬«      S )Nz
Logged out©Úmessage)r   )r.   s    r+   Úuser_logoutr2      s   € ä˜<Ô(Ð(r-   z/forgot-passwordc              ƒ   óX  K  — |j                  t        «      j                  t        j                  | j                  k(  t        j                  t
        j                  k(  «      j                  «       }|r*t        ||«      }t        |j                  |«      ƒ d {  –—†  t        d¬«      S 7 Œ­w)Nz:If an account exists for this email, an OTP has been sent.r0   )Úqueryr   Úfilterr$   r&   r   r'   Úfirstr   r   r   )r   r   r'   Úotps       r+   Úuser_forgot_passwordr8       sw   è ø€ à�8‰8”D‹>× Ñ ¤§¡¨t¯z©zÑ!9¼4¿9¹9ÌÏÉÑ;UÓV×\Ñ\Ó^€DÙÜ(¨¨TÓ2ˆÜ˜TŸZ™Z¨Ó-×-Ð-ÜÐWÔXÐXð 	.ús   ‚BB*ÂB(ÂB*z/reset-passwordc                 óÌ  — |j                  t        «      j                  t        j                  | j                  k(  t        j                  t
        j                  k(  «      j                  «       }|st        t        j                  d¬«      ‚|j                  t        «      j                  t        j                  |j                  k(  t        j                  j                  d«      «      j!                  t        j"                  j%                  «       «      j                  «       }|r t'        | j(                  |j*                  «      st        t        j                  d¬«      ‚|j,                  t/        j0                  t2        j4                  «      k  rt        t        j                  d¬«      ‚t7        | j8                  «      |_        d|_        |j=                  «        t?        d¬«      S )	NzInvalid requestr    FzInvalid or expired OTPzOTP expiredTzPassword updatedr0   ) r4   r   r5   r$   r&   r   r'   r6   r   r   ÚHTTP_400_BAD_REQUESTr   Úuser_idÚidÚusedÚis_Úorder_byÚ
created_atÚdescr   r7   Úotp_hashÚ
expires_atr   Únowr   Úutcr   Únew_passwordÚhashed_passwordÚcommitr   )r   r   r'   Ú	token_rows       r+   Úuser_reset_passwordrJ   )   sC  € à�8‰8”D‹>× Ñ ¤§¡¨t¯z©zÑ!9¼4¿9¹9ÌÏÉÑ;UÓV×\Ñ\Ó^€DÙÜ¬×(CÑ(CÐL]Ô^Ð^ð 	�‰Ô#Ó$ß	‰Ô"×*Ñ*¨d¯g©gÑ5Ô7I×7NÑ7N×7RÑ7RÐSXÓ7YÓ	Zß	‰Ô$×/Ñ/×4Ñ4Ó6Ó	7ß	‰‹ð	 ñ œO¨D¯H©H°i×6HÑ6HÔIÜ¬×(CÑ(CÐLdÔeÐeà×ÑœhŸl™l¬8¯<©<Ó8Ò8Ü¬×(CÑ(CÈMÔZÐZä(¨×):Ñ):Ó;€DÔØ€I„NØ‡I�I„KÜÐ-Ô.Ð.r-   N)&r   r   Úfastapir   r   r   r   Úsqlalchemy.ormr	   Úapp.databaser
   Úapp.dependenciesr   Ú
app.modelsr   r   r   Úapp.schemasr   r   r   r   r   Úapp.securityr   r   Úapp.services.auth_servicer   r   Úapp.services.email_otpr   r   ÚrouterÚpostr,   r2   r8   rJ   © r-   r+   Ú<module>rW      s  ðß 'ç =Ó =Ý "å Ý /ß 9Ñ 9ß aÕ aß 7ß Cß Má	˜'¨¨Ô	6€ð ‡�ˆX e€Ó,Ù18¸³ñ 5�\ð 5 wò 5ó -ð5ð ‡�ˆY w€Ó/Ù!Ð"4Ó5ñ )�4ò )ó 0ð)ð ‡�Ð°€Ó8ÙJQÐRXË/ñ YÐ%:ð YÀò Yó 9ðYð ‡�Ð¨w€Ó7ÙBIÈ&Ã/ñ /Ð2ð /¸ò /ó 8ñ/r-   