
    i
                         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m	Z	 d dl
mZ d dlZd dlmZ d dlZd dlZ G d	 d
      Zy)    )	UserModel)HTTPException)pwd_context)	UserClass)datetime	timedelta)UnionN)jwtc                   F    e Zd Zd Zd Zd Zd
dedeedf   fdZ	d Z
d	 Zy)AuthenticationClassc                     || _         y N)db)selfr   s     fC:\Users\jesus\OneDrive\Escritorio\proyecto_pie360\backend\app\backend\classes\authentication_class.py__init__zAuthenticationClass.__init__   s	        c                 0   t        | j                        j                  d|      }|r|dk(  s|j                  d      rt	        ddddi      t        j                  |      }t        |       | j                  ||d	   d
         st	        ddddi      |S )Nemailz3No se encontraron datos para el campo especificado.zError:i  zCould not validate credentialszWWW-AuthenticateBearer)status_codedetailheaders	user_datahashed_password)	r   r   get
startswithr   jsonloadsprintverify_password)r   r   passworduserresponse_datas        r   authenticate_userz%AuthenticationClass.authenticate_user   s    !%%gu5tTTX\XgXghpXqC8Xcuw  cA  B  B

4(m##HmK.HIZ.[\C8Xcuw  cA  B  Br   c                 .    t        j                  ||      S r   )r   verify)r   plain_passwordr   s      r   r!   z#AuthenticationClass.verify_password   s    !!./BBr   Ndatatime_expirec                 6   |j                         }|"t        j                         t        d      z   }nt        j                         |z   }|j	                  d|i       t        j                  |t        j                  d   t        j                  d         }|S )Ni@B )minutesexp
SECRET_KEY	ALGORITHM)	algorithm)	copyr   utcnowr   updater
   encodeosenviron)r   r)   r*   	data_copyexpirestokens         r   create_tokenz AuthenticationClass.create_token"   sw    IIK	oo')G*DDGoo'+5G%)*

9bjj&>"**U`Jabr   c                    | j                   j                  t              j                  t        j                  |j                  k(        j                         }|sy|j                  d      }|j                         D ]A  \  }}t        ||       |dk(  r| j                  |      }t        ||      s5t        |||       C | j                   j                          y)NzNo data foundT)exclude_unsetr      )r   queryr   filter
visual_rutone_or_nonedictitemsr    generate_bcrypt_hashhasattrsetattrcommit)r   user_inputsexisting_userexisting_user_datakeyvalues         r   update_passwordz#AuthenticationClass.update_password.   s    i077	8L8LP[PfPf8fgssu"(--D-A,224 	3JC#u''11%8}c*sE2	3 	r   c                 |    |j                  d      }t        j                         }t        j                  ||      }|S )Nzutf-8)r4   bcryptgensalthashpw)r   input_stringencoded_stringsalthashed_strings        r   rD   z(AuthenticationClass.generate_bcrypt_hash@   s4    %,,W5~~nd;r   r   )__name__
__module____qualname__r   r%   r!   rB   r	   r   r:   rM   rD    r   r   r   r      s8    C
 
E(D.4I 
$r   r   )app.backend.db.modelsr   fastapir   app.backend.auth.auth_userr   app.backend.classes.user_classr   r   r   typingr	   r5   joser
   r   rO   r   rY   r   r   <module>r`      s-    + ! 2 4 (  	   ; ;r   