o
    i                     @   s>   d dl Z d dlZd dlmZmZ d dlmZ G dd dZdS )    N)datetimetimezone)SimpleCookiec                   @   sF   e Zd Zdd ZdedefddZdefddZd	ed
efddZdS )
FgtsClientc                 C   s.   ddddddddd	d
ddddd| _ d| _d S )Nz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
Connectionz6https://fgtsdigital.sistema.gov.br/proxy-api/v2/perfil)headersbase_url)self r   /app/services/fgts_client.py__init__   s    
zFgtsClient.__init__
cookie_strreturnc                 C   s"   t  }|| dd | D S )uE   Helper para converter string de cookie (k=v; k2=v2) para dicionário.c                 S   s   i | ]\}}||j qS r   )value).0kvr   r   r   
<dictcomp>   s    z8FgtsClient._parse_cookie_str_to_dict.<locals>.<dictcomp>)r   loaditems)r   r   cookier   r   r   _parse_cookie_str_to_dict   s   
z$FgtsClient._parse_cookie_str_to_dictc                 C   s   d dd |D S )z;Converte o CookieJar do requests de volta para string pura.z; c                 S   s   g | ]}|j  d |j qS )=)namer   )r   r   r   r   r   
<listcomp>#   s    z2FgtsClient._dict_to_cookie_str.<locals>.<listcomp>)join)r   Z
cookie_jarr   r   r   _dict_to_cookie_str!   s   zFgtsClient._dict_to_cookie_strcompany_cookie_decryptedcustomer_cnpjc              
   C   s  |  |}d|d}zWtj| j| j||ddd}|  |jd}|s4z| }|d}W n   Y |s:tdt	j
|d	did
}|d}	|	sNtdtj|	tjd}
| |j}||
dW S  tjyw } z	td|  |d}~w ty } z	td|  |d}~ww )u   
        Executa o GET /perfil emulando a troca de empresa para cliente.
        Retorna o novo cookie completo e a data de expiração.
        2)Z
tipoPerfilZniPerfilF   )r
   paramscookiesverifytimeoutZfgtsd_tokenZaccessTokenu<   Token JWT (fgtsd_token) não encontrado na resposta do FGTS.verify_signature)optionsexpu#   Campo 'exp' não encontrado no JWT.)tz)r   
expires_onu   Erro de conexão com FGTS: Nz#Erro ao processar troca de perfil: )r   requestsgetr   r
   Zraise_for_statusr%   json	Exceptionjwtdecoder   fromtimestampr   utcr   ZRequestExceptionprint)r   r    r!   Zcookies_dictr$   responseZnew_jwtZ	json_respdecodedexp_timestampr,   Zfull_new_cookieer   r   r   swap_context%   sR   
	
zFgtsClient.swap_contextN)	__name__
__module____qualname__r   strdictr   r   r:   r   r   r   r   r      s
    r   )r-   r1   r   r   Zhttp.cookiesr   r   r   r   r   r   <module>   s
    