
    XhX                         d dl mZm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mZ d dlmZ d dlZd d	lmZ d dlZd dlZd dlZ G d
 d      Zy)    )	UserModelEmployeeModel)HTTPException)pwd_context)SettingClass)	UserClass)datetime	timedelta)UnionN)jwtc                   X    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d
 Zd Zd Zy)AuthenticationClassc                     || _         y N)db)selfr   s     T/var/www/intrajisbackend.com/public_html/app/backend/classes/authentication_class.py__init__zAuthenticationClass.__init__   s	        c                     t        | j                        j                  d|      }t        j                  |      }|st        ddddi      | j                  ||d   d         st        ddddi      |S )	Nrut  zCould not validate credentialszWWW-AuthenticateBearer)status_codedetailheaders	user_datahashed_password)r   r   getjsonloadsr   verify_password)r   r   passworduserresponse_datas        r   authenticate_userz%AuthenticationClass.authenticate_user   s    !%%eS1

4(C8Xcuw  cA  B  B##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                 0   	 | j                   j                  t              j                  t        j                  |j
                  k(        j                         }|syt        |j                         y# t        $ r}t        |      }d| cY d }~S d }~ww xY w)Nr      zError: )r   queryr   filterpersonal_emailemailfirstprintnames	Exceptionstr)r   r*   r>   eerror_messages        r   forgotzAuthenticationClass.forgot,   sz    		-GGMM-0778T8TX\XbXb8bciikEekk" 	-FM]O,,	-s$   AA2 A2 2	B;B
BB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=   )r   r>   r   r?   
visual_rutone_or_nonedictitemsrC   generate_bcrypt_hashhasattrsetattrcommit)r   user_inputsexisting_userexisting_user_datakeyvalues         r   update_passwordz#AuthenticationClass.update_password8   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)r5   bcryptgensalthashpw)r   input_stringencoded_stringsalthashed_strings        r   rP   z(AuthenticationClass.generate_bcrypt_hashJ   s4    %,,W5~~nd;r   c                 v   d}ddi}ddd}t        j                  ||t        j                  |            }|j                  dk(  rS|j                         }|j                  d	      }t        d
|       t        | j                        j                  |       |S t        d|j                  |j                         y )Nz"https://api.simplefactura.cl/tokenContent-Typeapplication/jsonzjesuscova@jisparking.comz	Jgames88!)rA   r#   )r   r*      accessTokenzAccess Token:zError al obtener el token:)requestspostr    dumpsr   r   rC   r   r   update_tokentext)r   urlr   payloadresponser*   access_tokens          r   create_simplefactura_tokenz.AuthenticationClass.create_simplefactura_tokenS   s    2 .

 0#

 ==gDJJw<OP3&==?D88M2L/<0!..|<.0D0DhmmTr   c                    t        | j                        j                         }|d   d   }dd| d}d}t        j                  ||      }t	        d|j
                          |j
                  d	k(  ry
|j
                  dk(  ry	 |j                         S # t        j                  j                  $ r# t	        d       t	        |j                         Y yw xY w)Nsetting_datasimplefactura_tokenrd   zBearer )rc   Authorizationz)https://api.simplefactura.cl/token/expire)r   zStatus Code: r   r   i     z)No se pudo decodificar la respuesta JSON.   )
r   r   r   rg   rC   r   r    
exceptionsJSONDecodeErrorrk   )r   rr   r:   r   rl   rn   s         r   check_simplefactura_tokenz-AuthenticationClass.check_simplefactura_tokenk   s    #DGG,002^,-BC /&ug.

 :<<W5h223453&3&	==?"""22 	=>(-- 	s   B =CCr   )__name__
__module____qualname__r   r&   r"   rN   r   r	   r;   rI   rY   rP   rp   ry    r   r   r   r      sG    	C
 
E(D.4I 

-$0r   r   )app.backend.db.modelsr   r   fastapir   app.backend.auth.auth_userr   !app.backend.classes.setting_classr   app.backend.classes.user_classr   r	   r
   typingr   r6   joser   rg   r    r[   r   r}   r   r   <module>r      s5    : ! 2 : 4 (  	    w wr   