
    Jh*                        d dl mZmZmZmZ d dlmZmZ d dlmZ d dl	m
Z
  ede          Zd Zd Ze                    dd	g
          d             Ze                    dd	g
          ed                         Ze                    ddg
          ed                         Ze                    dd	g
          ed                         Ze                    ddg
          ed                         Ze                    dd	g
          ed                         Ze                    ddg
          ed                         Ze                    ddg
          ed                         ZdS )    )	Blueprintjsonifyrequestsession)Userdb)datetimewrapsauthc                 <     t                      fd            }|S )Nc                  L    dt           vrt          ddi          dfS  | i |S )Nuser_iderrorAuthentication required  )r   r   )argskwargsfs     -/home/ubuntu/ms4sc-backend/src/routes/auth.pydecorated_functionz*login_required.<locals>.decorated_function	   s?    G# 	FG%>?@@#EEq$!&!!!    r
   r   r   s   ` r   login_requiredr      s4    
1XX" " " " X" r   c                 <     t                      fd            }|S )Nc                      dt           vrt          ddi          dfS t          j                            t           d                   }|r|j        st          ddi          dfS  | i |S )Nr   r   r   r   zAdmin access requiredi  )r   r   r   querygetis_admin)r   r   userr   s      r   r   z*admin_required.<locals>.decorated_function   s    G# 	FG%>?@@#EEz~~gi011 	D4= 	DG%<=>>CCq$!&!!!r   r
   r   s   ` r   admin_requiredr!      s4    
1XX" " " " X" r   z/loginPOST)methodsc                  f   t           j        } |                     d          }|                     d          }|r|st          ddi          dfS t          j                            |                                          }|r|                    |          r|j	        t          d<   |j        t          d<   |j        t          d<   t          j                    |_        t           j
                                         t          d	|                                d
          dfS t          ddi          dfS )Nusernamepasswordr   zUsername and password required  r%   r   r   zLogin successful)messager       zInvalid username or passwordr   )r   jsonr   r   r   r   	filter_byfirstcheck_passwordidr   r%   r   r	   utcnow
last_loginr   committo_dict)datar%   r&   r    s       r   loginr5      s0   <Dxx
##Hxx
##H I8 I!ABCCSHH:2288::D G##H-- G!W	"m
"m
 #/++

)LLNN
 
    	
 !?@AA3FFr   z/logoutc                  N    t          j                     t          ddi          dfS )Nr)   zLogout successfulr*   )r   clearr    r   r   logoutr9   7   s(     MOOOI2344c99r   z/meGETc                      t           j                            t          d                   } | r#t	          |                                           dfS t	          ddi          dfS )Nr   r*   r   zUser not foundi  )r   r   r   r   r   r3   )r    s    r   get_current_userr<   =   sX     :>>'),--D 9t||~~&&++!1233S88r   z/change-passwordc                     t           j        } |                     d          }|                     d          }|r|st          ddi          dfS t          j                            t          d                   }|                    |          st          ddi          dfS t          |          dk     rt          dd	i          dfS |	                    |           t          j                                         t          d
di          dfS )Ncurrent_passwordnew_passwordr   z*Current password and new password requiredr'   r   zCurrent password is incorrect   z/New password must be at least 6 characters longr)   zPassword changed successfullyr*   )r   r+   r   r   r   r   r   r.   lenset_passwordr   r2   )r4   r>   r?   r    s       r   change_passwordrC   F   s    <Dxx 23388N++L U< U!MNOOQTTT:>>'),--D/00 H!@ABBCGG
<1 Z!RSTTVYYYl###JI>?@@#EEr   z/usersc                  t    t           j                                        } t          d | D                       dfS )Nc                 6    g | ]}|                                 S r8   )r3   ).0r    s     r   
<listcomp>z!get_all_users.<locals>.<listcomp>a   s     555tDLLNN555r   r*   )r   r   allr   )userss    r   get_all_usersrJ   ]   s7     JNNE55u55566;;r   c                     t           j        } |                     d          }|                     d          }|                     d          }|                     dd          }|r|r|st          ddi          dfS t          j                            |	                                          rt          dd
i          dfS t          j                            |                                          rt          ddi          dfS t	          |||          }|                    |           t          j
                            |           t          j
                                         t          |                                          dfS )Nr%   emailr&   r   Fr   z&Username, email, and password requiredr'   r(   Username already existsrL   Email already exists)r%   rL   r      )r   r+   r   r   r   r   r,   r-   rB   r   r   addr2   r3   )r4   r%   rL   r&   r   r    s         r   create_userrR   c   sq    <Dxx
##HHHWExx
##Hxx
E**H Q5 Q Q!IJKKSPP zX..4466 B!:;<<cAAz%((..00 ?!78993>>BBBDhJNN4J4<<>>""C''r   z/users/<int:user_id>PUTc                    t           j                            |           }t          j        }d|v ret           j                            |d                                                   }|r|j        | k    rt          ddi          dfS |d         |_	        d|v ret           j                            |d                                                   }|r|j        | k    rt          ddi          dfS |d         |_
        d	|v r|d	         |_        d
|v r#|d
         r|                    |d
                    t          j                                         t          |                                          dfS )Nr%   r(   r   rM   r'   rL   rN   rO   r   r&   r*   )r   r   
get_or_404r   r+   r,   r-   r/   r   r%   rL   r   rB   r   r   r2   r3   )r   r    r4   existing_users       r   update_userrW   ~   s    :  ))D<DT )
,,d:6F,GGMMOO 	F]-8 	FG%>?@@#EEZ($ #
,,4=,AAGGII 	C]-8 	CG%;<==sBB']
T )Z(T ,d:. ,$z*+++J4<<>>""C''r   DELETEc                 (   | t           d         k    rt          ddi          dfS t          j                            |           }t
          j                             |           t
          j                                          t          ddi          dfS )Nr   r   zCannot delete your own accountr'   r)   zUser deleted successfullyr*   )r   r   r   r   rU   r   deleter2   )r   r    s     r   delete_userr[      s     ')$$ I!ABCCSHH:  ))DJdJI:;<<cAAr   N)flaskr   r   r   r   src.models.userr   r   r	   	functoolsr   __name__auth_bpr   r!   router5   r9   r<   rC   rJ   rR   rW   r[   r8   r   r   <module>rb      sb   6 6 6 6 6 6 6 6 6 6 6 6 $ $ $ $ $ $ $ $            
)FH
%
%  
 
 
 	x&**G G +*G4 	y6(++: :  ,+: 	uug&&9 9  '&9 	!F844F F  54F* 	x%))< <  *)< 	x&**( (  +*(2 	%w77( (  87(6 	%z::	B 	B  ;:	B 	B 	Br   