
    gY,                         d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlm	Z	 d dl
mZ dZh dZd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd ZdS )    N)requestjsonify)Image)secure_filename)get_db_connectionz!/var/www/wisegym.app/api/data/pfp>   gifjpgpngjpegc                 t    d| v o4|                      dd          d                                         t          v S )N.   )rsplitlowerALLOWED_EXTENSIONS)filenames    2/var/www/wisegym.app/api/functions/user_service.pyallowed_filer      s6    (?WxsA66q9??AAEWWW    c                    	 t                      }|                    d          }|                    d| f           |                                }|                                 |                                 |r%|                    dd            t          |          S t          ddi          dfS # t          $ r*}t          dt          |          i          dfcY d }~S d }~ww xY w)	NT
dictionaryz!SELECT * FROM users WHERE id = %spassword_hasherrorUser not found    	r   cursorexecutefetchoneclosepopr   	Exceptionstr)user_idconnr   useres        r   get_user_by_idr*      s    / ""--:WJGGG  

 	!HH_d+++4== !1233S88 / / /Q())3......./$   BB3  B3 3
C'=C"C'"C'c                    	 t                      }|                    d          }|                    d| f           |                                }|                                 |                                 |r%|                    dd            t          |          S t          ddi          dfS # t          $ r*}t          dt          |          i          dfcY d }~S d }~ww xY w)	NTr   'SELECT * FROM users WHERE username = %sr   r   r   r   r   r   )usernamer'   r   r(   r)   s        r   get_user_by_usernamer/      s    / ""--@8+NNN  

 	!HH_d+++4== !1233S88 / / /Q())3......./r+   c                    	 t                      }|                    d          }|                    dd|  df           |                                }|D ]}|                    dd            |                                 |                                 t          |          S # t          $ r*}t          dt          |          i          dfcY d }~S d }~ww xY w)NTr   z.SELECT * FROM users WHERE display_name LIKE %s%r   r   r   )	r   r   r    fetchallr#   r"   r   r$   r%   )namer'   r   usersur)   s         r   get_users_by_display_namer6   -   s    / ""--G+d+++XXX!! 	) 	)AEE/4((((

u~~ / / /Q())3......./s   B$B' '
C1CCCc                  z   	 t           j        } | d         }|                     d          }|                     d          p|}|                     dd          }t                      }|                    d          }|                    d|f           |                                r;|                                 |                                 t          d	d
i          dfS |r|                    d|d |df           ny|st          d	di          dfS t          j
        |                                t          j                                                              }|                    d|||df           |                                 |                    d|f           |                                }|                    dd            |                                 |                                 t          |          dfS # t           $ r*}	t          d	t#          |	          i          dfcY d }	~	S d }	~	ww xY w)Nr.   passworddisplayNameisGoogleSignInFTr   (SELECT id FROM users WHERE username = %sr   zUsername already exists  zcINSERT INTO users (username, password_hash, display_name, is_google_signin) VALUES (%s, %s, %s, %s)zPassword requiredr-   r      r   )r   jsongetr   r   r    r!   r"   r   bcrypthashpwencodegensaltdecodecommitr#   r$   r%   )
datar.   r8   display_name	is_googler'   r   	hashed_pwnew_userr)   s
             r   register_userrK   ;   s>   -/|
#88J''xx..:(HH-u55	 ""-- 	AH;OOO?? 	FLLNNNJJLLLG%>?@@#EE 	NNu4t4   
  D)<=>>CChoo&7&79I9IJJQQSSINNu9lE:  
 	 	@8+NNN??$$_d+++

x  #%% / / /Q())3......./s+   CH "1H C1H 
H:H5/H:5H:c                     	 t           j        } |                     d          }|                     dd          }|                     dd          }|st          ddi          dfS |s|st          dd	i          dfS t	                      }|                    d
          }|                    d|f           |                                }|                                 |                                 |st          ddi          dfS |r|d         t          ddi          dfS nZ|d         ?t          j
        |                                |d                                                   st          ddi          dfS |                    dd            t          |          dfS # t          $ r*}t          dt          |          i          dfcY d }~S d }~ww xY w)Nr.   r8    r:   Fr   zUsername is requiredr<   zPassword is requiredTr   r-   r   r   r   zAccount is not a Google useri  zIncorrect passwordi  r=   r   )r   r>   r?   r   r   r   r    r!   r"   r@   checkpwrB   r#   r$   r%   )rF   r.   r8   rH   r'   r   r(   r)   s           r   
login_userrO   l   s   !/|88J''88J++HH-u55	 	CG%;<==sBB 	C 	CG%;<==sBB ""--@8+NNN  

 	=G%5677<< 	EO$0)GHII3NN 1 O$,FN8??CTCTVZ[jVkVrVrVtVt4u4u,)=>??DD$'''t}}c!! / / /Q())3......./s>   A!F& $F& ;BF& F& $AF& ?&F& &
G0GGGc                     	 t           j        } |                     d          }|st          ddi          dfS t	                      }|                                }|                    d|f           |                                 |                                 |                                 t          ddi          dfS # t          $ r*}t          dt          |          i          d	fcY d }~S d }~ww xY w)
Nr&   r   zMissing user_idr<   zDELETE FROM users WHERE id = %sstatuszUser deletedr=   r   )r   r>   r?   r   r   r   r    rE   r"   r$   r%   )rF   r&   r'   r   r)   s        r   delete_userrR      s    /|((9%% 	>G%6788#== ""87*EEE

.122C77 / / /Q())3......./s#   5C  BC   
C4
C/)C4/C4c                     	 t           j                            d          } t           j                            d          }t           j                            d          }t           j                            d          }t           j                            d          }t           j                            d          }d}g }g }| r*|                    d           |                    |            |d	v r*|                    d
           |                    |           |d	v r*|                    d           |                    |           |d	v r*|                    d           |                    |           |r*|                    d           |                    |           |dk    r|                    d           n|dk    r|                    d           |r|dd                    |          z   z  }t                      }	|	                    d          }
|
                    |t          |                     |
	                                }|D ]}|
                    dd            |
                                 |	                                 t          |          S # t          $ r*}t          dt          |          i          dfcY d }~S d }~ww xY w)Nrolenotificationsdata_sharingemailsaccount_visibility	fcm_tokenzSELECT * FROM usersz	role = %s)01znotifications = %szdata_sharing = %szemails = %szaccount_visibility = %sr[   zfcm_token IS NOT NULLrZ   zfcm_token IS NULLz WHERE z AND Tr   r   r   r   )r   argsr?   appendjoinr   r   r    tupler2   r#   r"   r   r$   r%   )rT   rU   rV   rW   
visibilityfcm_token_setquery
conditionsvaluesr'   r   r4   r(   r)   s                 r   filter_usersre      s   0/|''((99|''77!!(++\%%&:;;
((55%
 	 k***MM$J&&2333MM-(((:%%1222MM,'''Zm,,,MM&!!! 	&7888MM*%%%C56666c!!1222 	:Yj!9!999E ""--ueFmm,,,!! 	, 	,DHH_d++++

u~~ / / /Q())3......./s   J"J% %
K/KKKc                     	 dt           j        vsdt           j        vrt          ddi          dfS t           j        d         } t           j        d         }t	                      }|                                }|                    d|f           |                                }|s;|                                 |                                 t          ddi          dfS |d	         }|                                 |                                 | j	        d
k    st          | j	                  st          ddi          dfS | j                            d          st          ddi          dfS | j	                            dd          d                                         }t          d| d          }| d| }t           j                            t&          |          }	t(          D ]_}
t           j                            t&          | d|
           }t           j                            |          rt!          j        |           `|                     |	           	 t1          j        |	          5 }|j        \  }}|dk     s|dk     r3t!          j        |	           t          ddi          dfcd d d            S |dk    s|dk    r3t!          j        |	           t          ddi          dfcd d d            S 	 d d d            n# 1 swxY w Y   n7# t6          $ r* t!          j        |	           t          ddi          dfcY S w xY wd| }	 t	                      }|                                }|                    d||f           |                                 |                                 |                                 nL# t6          $ r?}t!          j        |	           t          dt;          |          d          dfcY d }~S d }~ww xY wt          d||d          dfS # t6          $ r>}t=          j                     t          dt;          |          d          dfcY d }~S d }~ww xY w) Nfiler.   r   zMissing file or usernamer<   r;   r   r   r   rM   zInvalid filezimage/z'Invalid file type. Only images allowed.r   r   user__pfp2   z#Image too small. Min size: 50x50px.i   z'Image too large. Max size: 1024x1024px.zInvalid image format.z!https://api.wisegym.app/data/pfp/z3UPDATE users SET profile_picture = %s WHERE id = %sz!Failed to update user in database)r   detailsr   success)rQ   rg   urlr=   zInternal error) r   filesformr   r   r   r    r!   r"   r   r   mimetype
startswithr   r   r   ospathr^   UPLOAD_FOLDERr   existsremovesaver   opensizer$   rE   r%   	traceback	print_exc)rg   r.   r'   r   r(   r&   ext	safe_baser   	save_pathexisting_extold_pathimgwidthheight	image_urldb_errorr)   s                     r   upload_profile_picturer      sK   GL&&*GL*H*HG%?@AA3FF}V$<
+ !""AH;OOO   	=LLNNNJJLLLG%5677<<q'

=Bl4=&A&AG^455s::}''11 	VG%NOPPRUUUm""3**1-3355#$9G$9$9$9::	''#''GLL99	 / 	$ 	$Lw||Mi3P3P,3P3PQQHw~~h'' $	(###		)	DI&& ^# #v2::"Ii((("G-R#STTVYY	^ ^ ^ ^ ^ ^ ^ ^
 4<<6D==Ii((("G-V#WXXZ]]^ ^ ^ ^ ^ ^ ^ ^
 $1^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^  	D 	D 	DIi   G%<=>>CCCC	D CBB			j$&&D[[]]FNNPS\^eRfgggKKMMMLLNNNJJLLLL 	j 	j 	jIi   %HUXYaUbUbccddfiiiiiiii	j 
 
   	 	  L L L!1c!ffEEFFKKKKKKKLs   .P( B-P( A!P( ,P( .C.P( L 1=L.L ;2L-L ;L LL LL P( 1MP( MP( A6O P( 
P4PPP( PP( (
Q023Q+%Q0+Q0c                    	 t                      }|                    d          }|                    d| f           |                                }|                                 |                                 |r|d         st          ddi          dfS t          | |d         d          d	fS # t          $ r*}t          dt          |          i          d
fcY d }~S d }~ww xY w)NTr   z5SELECT profile_picture FROM users WHERE username = %sprofile_picturer   zNo profile picture foundr   )r.   r   r=   r   )r   r   r    r!   r"   r   r$   r%   )r.   r'   r   resultr)   s        r   get_profile_picturer     s   / ""--NQYP[\\\""

 	GV$56 	GG%?@AA3FF %&78
 
    	
  / / /Q())3......./s$   BB0 B0 0
C$:CC$C$c                     	 t           j        } |                     d          }|                     d          }|                     d          }|r|st          ddi          dfS |dk    rt	          |t
                    r%t          |                                          dk     rt          dd	i          dfS t          j	        |
                                t          j                                                              }t                      }|                                }|                    d
| d||f           |                                 |                                 |                                 t          ddi          dfS # t$          $ r*}t          dt          |          i          dfcY d }~S d }~ww xY w)Nr&   fieldvaluer   zMissing user_id or fieldr<   r      z&Password must be at least 8 characterszUPDATE users SET z = %s WHERE id = %srQ   zUser field updatedr=   r   )r   r>   r?   r   
isinstancer%   lenstripr@   rA   rB   rC   rD   r   r   r    rE   r"   r$   )rF   r&   r   r   r'   r   r)   s          r   update_user_fieldr   3  s   /|((9%%!!!! 	Ge 	GG%?@AA3FFO##eS)) YS-?-?!-C-C)QRSSUXXXM%,,..&.2B2BCCJJLLE ""E5EEEwGWXXX

"6788#== / / /Q())3......./s,   A!F $AF 7CF 
GF=7G=G)rr   rz   r@   flaskr   r   PILr   werkzeug.utilsr   	db_configr   rt   r   r   r*   r/   r6   rK   rO   rR   re   r   r   r    r   r   <module>r      s>   				      " " " " " " " "       * * * * * * ' ' ' ' ' '3222 X X X/ / // / // / /./ ./ ./b"/ "/ "/J/ / /"1/ 1/ 1/fHL HL HLT/ / /(/ / / / /r   