o
    +}fit                     @   s>  d dl Z d dlmZmZmZmZ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Zd dlmZ d dlmZ ed	d
gdZejddddeddddddfdefddZejddddeddddeddddfdedefdd Zejd!dd"dd#d$ Zejd%dd&dd'd( Zejd)dd*dd+d, ZdS )-    N)	APIRouterDependsHTTPExceptionPathBodyQuery)CompanyService)get_db_connection)SessionService)
FgtsClient)EncryptionService)SimpleCookiez/testerZTesting)prefixtags    zBusca uma empresa por CNPJ)status_codesummary.CNPJu"   CNPJ da empresa (somente números)36497467000136z^[0-9]{14}$)titledescriptionexampleregexcnpjc                 C   s   t | }dd| iS )Nmessagez&Tester router is working! Company ID: )r   get_company_id_by_cnpj)r   
company_id r   /app/routers/tester.pyget_session_by_cnpj_api   s   

r    z'/session/{company_cnpj}/{customer_cnpj}zCNPJ da Empresa)r   r   zCNPJ do Clientecompany_cnpjcustomer_cnpjc                 C   s*   t  }t|}|j| |d\}}||dS )N)r!   r"   )cookie
expires_on)r	   r
   Zget_customer_session)r!   r"   db_connZsession_servicer#   r$   r   r   r   get_session_service   s   
r&   z/returnz%Buscamos a empresa e cliente por CNPJc                  C   s   d} d}t  }| }d}|||| f | }|s!tddd|\}}}}	}
t |}t ||}d||||	|
|diS )	Nr   59861777000193
        SELECT 
            co.id, co.cookie, 
            cu.cookie, cu.expires_on, cu.id
        FROM companies co
        LEFT JOIN customers cu ON (cu.company_id = co.id AND cu.cnpj = %s)
        WHERE co.cnpj = %s
      ,   Empresa Contábil (Company) não encontrada.r   detailr   )r   company_cookiecustomer_cookiecustomer_expires_oncustomer_idclient)	r	   cursorexecutefetchoner   r   decrypt_datar   Zswap_context)r!   r"   r%   curqueryresultr   r-   r.   r/   r0   r1   r   r   r   fetch_db.   s*   r9   z
/fgts_apitz2Tentativa de renovar o cookie cliente via FGTS APIc                  C   s(  d} d}d}dddddd	d
dddddddd}t  }| }d}|||| f | }|s4tddd|\}}	}
}}t |	}	i }|	r]|	dD ]}d|v r\|dd\}}|||< qJ|setdddd|d}tj	||||ddd }d
d!d" |jD }|j|	||jr|jd d# d%S d$d%S )&Nr   r'   z6https://fgtsdigital.sistema.gov.br/proxy-api/v2/perfilzfgtsdigital.sistema.gov.brz"Linux"zpt-BR,pt;q=0.9z!application/json, text/plain, */*z("Chromium";v="143", "Not A(Brand";v="24"zeMozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36z?0zsame-originZcorsemptyz2https://fgtsdigital.sistema.gov.br/portal/servicoszgzip, deflate, brzu=1, iz
keep-alive)HostzSec-Ch-Ua-PlatformzAccept-LanguageAcceptz	Sec-Ch-Uaz
User-AgentzSec-Ch-Ua-MobilezSec-Fetch-SitezSec-Fetch-ModezSec-Fetch-DestZRefererzAccept-EncodingZPriority
Connectionr(   r)   r*   r+   ; =   i  u    Nenhum cookie válido encontrado2)Z
tipoPerfilZniPerfilF   )headersparamscookiesverifytimeoutc                 S   s   g | ]}|j  d |j qS )r?   )namevalue).0r#   r   r   r   
<listcomp>   s    zfetch_api.<locals>.<listcomp>i  r   )statusZoriginal_cookiesresponse_cookies_stringZresponse_text)r	   r2   r3   r4   r   r   r5   splitrequestsgetjoinrE   r   text)r!   r"   base_urlrC   r%   r6   r7   r8   r   r-   r.   r/   r0   Zcookies_dictr#   keyrI   rD   responserM   r   r   r   	fetch_apiV   sn   	rV   z/compare_cookie_parsingu6   Compara as duas implementações de parsing de cookiesc               
   C   s   d} d}t  }| }d}||| f | }|sddiS t |d }i }|rB|dD ]}d|v rA|dd	\}	}
|
||	< q/d
tdtfdd}||}|||||kt	|t	|t
| t
| dS )Nr   r'   zS
        SELECT co.cookie
        FROM companies co
        WHERE co.cnpj = %s
    errorzCompany not foundr   r>   r?   r@   
cookie_strreturnc                 S   s"   t  }||  dd | D S )Nc                 S   s   i | ]\}}||j qS r   )rI   )rJ   kvr   r   r   
<dictcomp>   s    z[compare_cookie_parsing.<locals>._parse_cookie_str_to_dict_simple_cookie.<locals>.<dictcomp>)r   loaditems)rX   r#   r   r   r   '_parse_cookie_str_to_dict_simple_cookie   s   
zGcompare_cookie_parsing.<locals>._parse_cookie_str_to_dict_simple_cookie)Zoriginal_cookie_stringZmanual_parsingZsimple_cookie_parsingZ	are_equalZmanual_countZsimple_cookie_countZkeys_manualZkeys_simple_cookie)r	   r2   r3   r4   r   r5   rN   strdictlenlistkeys)r!   r"   r%   r6   r7   r8   r-   Zcookies_dict_manualr#   rT   rI   r_   Zcookies_dict_simple_cookier   r   r   compare_cookie_parsing   s8   

re   )jsonfastapir   r   r   r   r   r   services.companyr   	bootstrapr	   Zservices.sessionr
   Zservices.fgts_clientr   rO   services.encryptionr   Zhttp.cookiesr   routerrP   r`   r    r&   r9   rV   re   r   r   r   r   <module>   sL     
'
P