o
    Jh*                     @   s:  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d Zdd	 Zejd
dgddd Zejddgdedd Zejddgdedd Zejddgdedd Zejddgdedd Zejddgdedd Zejddgded d! Zejdd"gded#d$ Zd%S )&    )	Blueprintjsonifyrequestsession)Userdb)datetimewrapsauthc                       t   fdd}|S )Nc                     s&   dt vrtddidfS  | i |S )Nuser_iderrorAuthentication required  )r   r   )argskwargsf  /var/www/html/src/routes/auth.pydecorated_function	   s   z*login_required.<locals>.decorated_functionr	   r   r   r   r   r   login_required   s   r   c                    r   )Nc                     sP   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   r   r   r      s   
z*admin_required.<locals>.decorated_functionr	   r   r   r   r   admin_required   s   r   z/loginPOST)methodsc                  C   s   t j} | d}| d}|r|stddidfS tjj|d }|rM||rM|j	t
d< |jt
d< |jt
d< t |_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   r   r   r   login   s&   






r1   z/logoutc                   C   s   t   tddidfS )Nr%   zLogout successfulr&   )r   clearr   r   r   r   r   logout7   s   r3   z/meGETc                  C   s4   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   r/   )r   r   r   r   get_current_user=   s   r5   z/change-passwordc                  C   s   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   r.   )r0   r6   r7   r   r   r   r   change_passwordF   s   




r;   z/usersc                  C   s    t j } tdd | D dfS )Nc                 S   s   g | ]}|  qS r   )r/   ).0r   r   r   r   
<listcomp>a   s    z!get_all_users.<locals>.<listcomp>r&   )r   r   allr   )usersr   r   r   get_all_users]   s   
r@   c                  C   s   t j} | d}| d}| d}| dd}|r|r|s&tddidfS tjj|d	 r7tdd
idfS tjj|d rHtddidfS t|||d}|| t	j
| t	j
  t| dfS )Nr!   emailr"   r   Fr   z&Username, email, and password requiredr#   r$   Username already existsrA   Email already exists)r!   rA   r      )r   r'   r   r   r   r   r(   r)   r:   r   r   addr.   r/   )r0   r!   rA   r"   r   r   r   r   r   create_userc   s    




rG   z/users/<int:user_id>PUTc                 C   s   t j| }tj}d|v r,t jj|d d }|r'|j| kr'tddidfS |d |_	d|v rOt jj|d d }|rJ|j| krJtddidfS |d |_
d	|v rX|d	 |_d
|v rg|d
 rg||d
  tj  t| dfS )Nr!   r$   r   rB   r#   rA   rC   rD   r   r"   r&   )r   r   
get_or_404r   r'   r(   r)   r+   r   r!   rA   r   r:   r   r   r.   r/   )r   r   r0   existing_userr   r   r   update_user~   s$   



rK   DELETEc                 C   sN   | 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   rI   r   deleter.   )r   r   r   r   r   delete_user   s   
rN   N)flaskr   r   r   r   src.models.userr   r   r   	functoolsr
   __name__auth_bpr   r   router1   r3   r5   r;   r@   rG   rK   rN   r   r   r   r   <module>   s<    

