o
    R9h*                     @   s  d dl Z d dlmZmZmZ d dlZd dlmZm	Z	 d dlZd dl
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 e  e d	Ze d
Zejddgd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dS )    N)requestjsonifysession)check_password_hashgenerate_password_hashwraps)api_bp)get_db_connection)load_dotenv)CORS
JWT_SECRETJWT_ALGORITHMz/loginPOST)methodsc               
   C   sL  t  } | d}| d}|r|stddidfS t }| }z{zR|d|f | }|rct|d |rct	j
|d |d	 tj tjd	d
 dttd}t||ddfW W |  |  S tddidfW W |  |  S  ty } ztddt| idfW  Y d }~W |  |  S d }~ww |  |  w )Nusernamepassworderroru0   아이디와 비밀번호를 입력해주세요.  z6SELECT id, email, password FROM users WHERE email = %s   r      )hours)user_idr   exp)	algorithm)tokenr      u;   아이디 또는 비밀번호가 올바르지 않습니다.  u,   로그인 중 오류가 발생했습니다:   )r   get_jsongetr   r
   cursorexecutefetchoner   jwtencodedatetimeutcnow	timedeltar   r   close	Exceptionstr)datar   r   conncuruserr   e r1   7/home/skpark/git/infrasmart_work/infrasmart/api/auth.py	api_login   s@   



&

r3   c                    s   t   fdd}|S )Nc                     s   t jd}|stddidfS ztj|ttgd}|d td< |d td< W n# tj	y9   tdd	idf Y S  tj
yJ   tdd
idf Y S w  | i |S )NAuthorizationr   u   토큰이 필요합니다.r   )
algorithmsr   r   emailu    토큰이 만료되었습니다.u$   유효하지 않은 토큰입니다.)r   headersr    r   r$   decoder   r   r   ExpiredSignatureErrorInvalidTokenError)argskwargsr   r,   fr1   r2   	decorated;   s   z!token_required.<locals>.decoratedr   )r>   r?   r1   r=   r2   token_required:   s   r@   z	/registerc            	   
   C   sF  t  } | d}| d}| d}| d}|r |r |r |s(tddidfS t|}t }| }zfz=|d|f | rRtdd	idfW W |	  |	  S |d
||||f |
  tddidfW W |	  |	  S  ty } ztddt| idfW  Y d }~W |	  |	  S d }~ww |	  |	  w )Nnamecompanyr6   r   r   u$   모든 필드를 입력해주세요.r   z%SELECT id FROM users WHERE email = %su$   이미 등록된 이메일입니다.zt
            INSERT INTO users (username, company, email, password)
            VALUES (%s, %s, %s, %s)
            messageu&   회원가입이 완료되었습니다.   u/   회원가입 중 오류가 발생했습니다: r   )r   r   r    r   r   r
   r!   r"   r#   r)   commitr*   r+   )	r,   rA   rB   r6   r   hashed_passwordr-   r.   r0   r1   r1   r2   api_registerO   s@   






&

rG   z/delete_accountDELETEc               
   C   s   zfz=t d} | stddidfW W |  |  S t }| }|d| f |  tddidfW W |  |  S  tyf } ztdd	t	| id
fW  Y d }~W |  |  S d }~ww |  |  w )Nr   r   $   사용자 인증이 필요합니다.r   zDELETE FROM users WHERE id = %srC   u'   회원 탈퇴가 완료되었습니다.r   u0   회원 탈퇴 중 오류가 발생했습니다: r   )
r   r    r   r)   r
   r!   r"   rE   r*   r+   )r   r.   r-   r0   r1   r1   r2   delete_accountx   s*   


&

rJ   z/update_accountPUTc            
   
   C   sB  t  } | d}| d}| d}| d}td}|s'tddidfS |r-|r-|s5tdd	id
fS t }| }z[z2|rPt|}|d|||||f n
|d||||f |	  tddidfW W |
  |
  S  ty }	 ztddt|	 idfW  Y d }	~	W |
  |
  S d }	~	ww |
  |
  w )NrA   rB   r6   r   r   r   rI   r   u7   이름, 회사명, 이메일은 필수 항목입니다.r   z
                UPDATE users
                SET username = %s, company = %s, email = %s, password = %s
                WHERE id = %s
                z
                UPDATE users
                SET username = %s, company = %s, email = %s
                WHERE id = %s
                rC   u6   회원정보가 성공적으로 수정되었습니다.r   u6   회원정보 수정 중 오류가 발생했습니다: r   )r   r   r    r   r   r
   r!   r   r"   rE   r)   r*   r+   )
r,   rA   rB   r6   r   r   r-   r.   rF   r0   r1   r1   r2   update_account   sF   




	
	
&

rL   )osflaskr   r   r   jwt.jwks_clientr$   werkzeug.securityr   r   r&   	functoolsr   apir	   utils.commonr
   dotenvr   
flask_corsr   getenvr   r   router3   r@   rG   rJ   rL   r1   r1   r1   r2   <module>   s2    


"
(