
    Svhx                     b   d Z ddlmZmZmZmZmZ ddlmZm	Z	m
Z
 ddlmZ ddlZddlmZ ddlmZ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Zdd
lT  e            Z e              ej        d          Z e	            ZdZdZ ee          Ze                    d          d             Ze                    d          d             Z  ee          fde
fdZ! ee          fde"fdZ#e$                    d ee#          g          d             Z%e$                    d ee#          g          d             Z&e$                    d ee#          g          d             Z'dZ( ej)        e(ej*        d            e+                    d! ee#          g          d"efd#            Z,e$                    d! ee#          g          d$             Z-e$                    d% ee#          g          d&             Z.e$                    d' ee#          g          d(             Z/ej0        1                    ej0        2                    e3          d)          Z4e$                    d*          d+e"fd,            Z5e$                    d- ee#          g          d0d/            Z6dS )1z
main.py
Main API file used for handling Prestonet API reqs
Author: Vojtech Pokorny, vojtech.pokorny@prestonet.cz
Date (last edit): 6.2.2025
Note: Using framework FastAPI
    )FastAPIDependsHTTPExceptionstatusRequest)APIKeyHeader
HTTPBearerHTTPAuthorizationCredentials)FileResponseN)load_dotenv)r   r   r   )datetime)get_db_pool)*API_KEYz'https://oauth2.googleapis.com/tokeninfoz	x-api-key)namestartupc                  P   K   t                       d {V t          j        _        d S N)r   appstatedb_pool     /var/www/api/main.pyr   r   +   s,      )mm++++++CIr   shutdownc                  \   K   t           j        j                                         d {V  d S r   )r   r   r   closer   r   r   r   r   0   s5      
)

!
!
#
##########r   credentialsc                   K   | j         }t          j        t          d|i          }|j        dk    rt          t          j        d          |                                }|                    d          }|st          t          j        d          t          j
        dd	          }|                    d
|           st          t          j        d          |S )Naccess_token)params   zInvalid Google access tokenstatus_codedetailemailzEmail not found in tokenALLOWED_GOOGLE_DOMAINz	firma.com@zUnauthorized domain)r   requestsgetGOOGLE_TOKEN_INFO_URLr$   r   r   HTTP_401_UNAUTHORIZEDjsonosgetenvendswithHTTP_403_FORBIDDEN)r   tokenresponse
token_infor&   allowed_domains         r   authenticate_google_tokenr6   5   s      #E |1>5:QRRRHs""(DMjkkkkJNN7##E i(DMghhhh Y6DDN>>.n..// a(AJ_````Lr   api_keyc                 V   K   | t           k    rt          t          j        d          d S )NzInvalid API keyr#   )r   r   r   r1   )r7   s    r   authenticater9   K   s9      w(
	 	 	  r   /)dependenciesc                     K   dddS )Nz$Welcome to the Prestonet API server!   )messageauthr   r   r   r   	read_rootr@   S   s       4
	 	 r   z/testc                     K   	 t                      S # t          $ r0} t          t          j        dt          |                      d } ~ ww xY w)NAn error occurred: r#   )get_test_json	Exceptionr   r   HTTP_500_INTERNAL_SERVER_ERRORstr)es    r   get_testrH   [   sb      	   4
(A
(
(	 	 	 s    
A+AAz/qrcodec                   K   	 t          | ||          S # t          $ r-}t          t          j        t          |                    d }~wt          $ r0}t          t          j        dt          |                     d }~ww xY wNr#   rB   )generate_qrcode
ValueErrorr   r   HTTP_400_BAD_REQUESTrF   rD   rE   )ssidpasswordoutput_fileveerrs        r   
get_qrcoderS   f   s      	x	5	55   *"gg	 	 	  	    ?.CHH..	 	 	 s     
B(AB+A??Bzlogs/prestonet_webhooks.logz%(asctime)s - %(message)s)filenamelevelformatz/log/prestonet-webhooksrequestc                   K   	 |                                   d {V }t          j        d|            |                    d          }|                    d          }|                    d          }|                    d          }|                    d          }|                    d          }|                    d          }|                    d	          }	|                    d
          }
|
t	          |
          nd }
t          t          j        j        ||||||||	|

  
         d {V  dddS # t          $ r3}t          j
        dt	          |                      dddcY d }~S d }~ww xY w)NzReceived body: userapplicationobject	object_idinputbuttonwebhook_urlrun_idr   )	rY   rZ   r[   r\   r]   r^   r_   r`   r   z	Log savedsuccess)r>   r   zError saving log: zFailed to save logerror)r-   logginginfor*   rF   add_log_to_dbr   r   r   rD   rb   )rW   bodyrY   rZ   r[   r\   r]   r^   r_   r`   r   rG   s               r   add_logrg   y   s     "> ||~~						$	,'''((( 
&		$''+88H&hh{##)
((7

%88H&''+88H&88H& ,3v;;;$&9
	


	 	 	        !I	6	66 > > >	--SVV--...)W	=	=======>s   D3D8 8
E5(E0*E50E5c                   K   	 t          d|           S # t          $ r-}t          t          j        t          |                    d }~wt          $ r0}t          t          j        dt          |                     d }~ww xY w)Nz(/var/www/api/logs/prestonet_webhooks.logr#   rB   )get_button_logsrL   r   r   rM   rF   rD   rE   )button_namerQ   rR   s      r   get_logsrk      s      	C[	Q	QQ   *
b''	 	 	  	   4
*C
*
*	 	 	 s     
B(AB+A>>Bz/prestonet-webhooks/adminc                    K   	 t                      S # t          $ r-} t          t          j        t          |                     d } ~ wt          $ r0}t          t          j        dt          |                     d }~ww xY wrJ   )get_admin_listrL   r   r   rM   rF   rD   rE   )rQ   rR   s     r   get_admin_prestonet_webhooksrn      s      			   *
b''	 	 	  	   4
*C
*
*	 	 	 s     
B(AB+A<<Bz/prestonet-webhooks/groupsc                 
  K   	 t          |           S # t          $ r-}t          t          j        t          |                    d }~wt          $ r0}t          t          j        dt          |                     d }~ww xY wrJ   )get_user_group_listrL   r   r   rM   rF   rD   rE   )r&   rQ   rR   s      r   get_groups_prestonet_webhooksrq      s      	U	#	##   *
b''	 	 	  	   4
*C
*
*	 	 	 s     
B(AB+A==Bimagesz/download/{filename}rT   c                 
   K   d S r   r   )rT   s    r   download_filert      s      
Fr   z/gpt-tokensgpt-4o-minic                   K   	 dt          | |          iS # t          $ r-}t          t          j        t          |                    d }~wt          $ r0}t          t          j        dt          |                     d }~ww xY w)Nnumber_of_tokensr#   zAn error occured )count_tokensrL   r   r   rM   rF   rD   rE   )promptmodelrQ   rR   s       r   get_gpt_countr{      s      "\&%%@%@AA   "72ww   	    "A53s8855   	s     
B(AB+B  B)ru   )7__doc__fastapir   r   r   r   r   fastapi.securityr   r	   r
   fastapi.responsesr   r.   dotenvr   r-   rc   r   dbr   r)   scriptsr   r/   r   http_bearerr+   API_KEY_NAMEapi_key_headeron_eventr   r   r6   rF   r9   r*   r@   rH   rS   LOG_FILEbasicConfigINFOpostrg   rk   rn   rq   pathjoindirname__file__
IMAGES_DIRrt   r{   r   r   r   <module>r      sd    E D D D D D D D D D D D D D S S S S S S S S S S * * * * * * 
			       - - - - - - - - - -                    gii 
")I

 jllA  <000 i, , , j$ $ $ QXPWXcPdPd  1M    , '.gn&=&=       GGL11233  43  5 5677  87 '',"7"7!899  :9 )  XW\B] ^ ^ ^ ^
#77<3H3H2IJJ#>7 #> #> #> KJ#>J 	"'',2G2G1HII  JI 	$GGL4I4I3JKK  LK 	%WW\5J5J4KLL  ML  W\\"'//(33X>>
	  #    ! " ggl&;&;%<==   >=  r   