403Webshell
Server IP : 54.37.205.81  /  Your IP : 216.73.216.76
Web Server : nginx/1.22.1
System : Linux vps-249481fa 6.1.0-50-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.176-1 (2026-07-02) x86_64
User : debian ( 1000)
PHP Version : 8.2.32
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : OFF
Directory :  /opt/ccp-ai-gateway/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /opt/ccp-ai-gateway/__pycache__/app.cpython-311.pyc
�

1$Xj(�����ddlZddlZddlZddlZddlZddlZddlmZmZddlZddlZddl	m
Z
mZmZm
Z
mZddlmZddlZddlZddlmZddlmZddlmZ	ddlZdZn#e$rdZd	ZYnwxYwe
e��Zeed
dgd�iidgd
�gd����ej�dd��Z ej�dd��Z!ej�dd��Z"ej�dd��Z#ej�dd��Z$ej�dd��Z%ej&�'e%d��Z(ej&�'e%d��Z)ej&�'e%d��Z*ej&�'e%d��Z+ej&�'e%d��Z,ej&�'e%d��Z-ej&�'e%d��Z.ej�dd���/d ��Z0ej�d!d���/d ��Z1ej�d"d���2��Z3ej�d#d���2��Z4ej�d$d���2��Z5ej�d%d���2��Z6d&Z7d'Z8ej&�'e%d(��Z9e3re3e_:ej�d)ej&�'e%d*d+����Z;ej�d,ej&�'e%d*d-����Z<ej�d.ej&�'e%d*d/����Z=ej�d0d1���2���>��d2vZ?ej�d3d4���2���>��Z@ej�d5d���2��ZAej�d6d���2��ZBej�d7d���2��ZCej�d8d9���2��ZDej�d:d;���2���>��ZEeFej�d<d=����ZGej�d>d?���2��pd?ZHej�d@ej&�'e%dA����ZIdBZJeFej�dCdD����ZKeFej�dEdF����ZLejMe%d�G��ejMe;d�G��ejMe<d�G��ejMe=d�G��ejMeId�G��dH�ZNdI�ZOdJ�ZPdK�ZQ�d"dL�ZRdM�ZSdNeTdOeUfdP�ZVdQeUfdR�ZWdS�ZXdT�ZYdU�ZZdVeUfdW�Z[dXeTfdY�Z\dZ�Z]d[eUdOeFfd\�Z^d[eUd]eFfd^�Z_d[eUd_eFdOeFfd`�Z`da�Zadb�Zbdc�Zc�d#dd�ZddeeUdOeefdf�Zfd[eUdOeTfdg�Zgd[eUdOeTfdh�Zh�d"d[eUdeeUdieUfdj�Zi�d$d[eUdeeUdleedieUdmeUf
dn�Zjdo�Zkdp�Zldq�Zmdr�Znds�Zodt�Zpdu�Zq�d%dv�Zr�d%dw�Zsdx�Ztdy�ZudeeUdOeFfdz�Zvd[eUdeeUfd{�Zwd[eUdieUfd|�Zxd}�Zyd~�Zz�d&d��Z{d�eUd�eUd�eUdOeUfd��Z|dNeTd[eUdieUdOeUfd��Z}d�eUdOeTfd��Z~dNeTd[eUdieUd�eTdOeUf
d��Zd��Z�d�eUdOeUfd��Z��d"d�eUd�eUdOeUfd��Z�d��Z�d�eUdOeUfd��Z�d�d��d��Z�d�eUfd��Z�dNeTd[eUdieUd�eUd�eUf
d��Z�d�eUdieUd�eTfd��Z�d�eUd�eUfd��Z�dNeTd[eUdieUd�eUd�eUf
d��Z�d�eTfd��Z�e�d���d����Z�e�d���d����Z�e�d���d����Z�e��d���d����Z�e��d���d����Z�e��d���d����Z�e��d���d����Z�e��d���d����Z�e�d���d����Z�e�d���d����Z�e�d���d����Z�e�d���d����Z�e��d���d����Z�e��d���d����Z�e�d���d����Z�e��d���d����Z�d„Z�dÄZ�dĄZ�dńZ�d�eTdOeUfdƄZ�d�eTfdDŽZ�e�dȦ�dɄ��Z�e�dʦ�d˄��Z�e��d̦�d̈́��Z�e��dΦ�dτ��Z�e��dЦ�dф��Z�e��dҦ�dӄ��Z�e��dԦ�dՄ��Z�e��d֦�dׄ��Z�e��dئ�dل��Z�e�dڦ�dۄ��Z�d܄Z�e�dݦ�dބ��Z�e��dݦ�d߄��Z�e�d��d���Z�e�d��d���Z�e�d��d���Z�e��d��d���Z�e��d��d���Z�e��d��d���Z�e��d��d���Z�e��d��d���Z�e��d��d���Z��d'd�Z�e�d��d���Z�e��d���d����Z�e��d���d����Z�e�d���d����Z�e�d���d����Z�e�d���d����Z�e��d����d���Z�ddlZ�ddl�mZ�ddl�m�Z�d�dl�m�Z�d�dl	mZ��d�Z�e���d�dg�����d���Z�d�dl	mZ�ddl�Z�ddlZ�d�dl�m�Z��d	�Z�e���d
�dg�����d���Z�e���d
�d�dg�����d���Z�e���d�dg�����d���Z�e���d�dg�����d���Z�e���d�dg�����d���Z�e���d�dg�����d���Z�e���d�dg�����d���Zڐd�Z�e���d�dg�����d���Z�e���d�dg�����d���Z�e�dkre���d �d!��dSdS((�N)�datetime�timezone)�Flask�request�jsonify�
make_response�	send_file)�CORS)�canvas)�A4)�cmTFz/*�origins)zhttps://admin.copyrightchain.itzhttps://app.copyrightchain.itzhttps://copyrightchain.it)�Content-Type�
Authorization�X-CCP-Token)�GET�POST�PUT�DELETE�OPTIONS)�	resources�supports_credentials�
allow_headers�methods�CCP_AI_ADMIN_TOKEN��OPENAI_API_KEY�GEMINI_API_KEY�CCP_TOWER_PASSWORD�CCP_SESSION_SECRET�CCP_AI_DATA_DIRz/opt/ccp-ai-gateway/dataz
users.jsonzai_usage.jsonlzcert_usage.jsonlz
balances.jsonzagency_plans.jsonzagency_usage.jsonlzpricing.json�CCP_PUBLIC_BASE_URL�/�CCP_VERIFY_BASE_URL�CCP_STRIPE_SECRET_KEY�CCP_STRIPE_WEBHOOK_SECRET�CCP_STRIPE_SUCCESS_URL�CCP_STRIPE_CANCEL_URL�WELCOM1�zpromo_usage.json�CCP_CERT_BASE_DIR�certificates�base�CCP_CERT_BLOCKCHAIN_DIR�
blockchain�CCP_CERT_TIMESTAMP_DIR�	timestamp�OPENAPI_TIMESTAMP_ENABLED�0��1�true�yes�on�OPENAPI_TIMESTAMP_ENV�sandbox�OPENAPI_TIMESTAMP_TOKEN� OPENAPI_TIMESTAMP_LOTTO_USERNAME� OPENAPI_TIMESTAMP_LOTTO_PASSWORD�OPENAPI_TIMESTAMP_PROVIDER�Openapi / InfoCert�OPENAPI_TIMESTAMP_TYPE�infocert�OPENAPI_TIMESTAMP_TIMEOUT�30�CCP_OTS_BINz/home/debian/.local/bin/ots�CCP_OTS_WORK_DIR�otsa:ABO BANK Legal Office, Department of Intellectual Property and Copyright - Bank Association Offshore 1001 Third Avenue W, Suite 190, Bradenton, FL 34205 21. ABO BANK Harley Street, London, England, United Kingdom, W1G 9QD . Associazione Banche Offshore Corso Venezia 1 Milano Incorporata Codice Fiscale 92034960457�CCP_COST_OPENAI_EUR_PER_REQz0.01�CCP_COST_GEMINI_EUR_PER_REQz0.04��exist_okc�b�tjtj�����S�N)r�nowr�utc�	isoformat���app.py�_now_isorSgs ���<���%�%�/�/�1�1�1rQc��	t|dd���5}tj|��cddd��S#1swxYwYdS#t$r|cYSwxYw)N�r�utf-8��encoding)�open�json�load�	Exception)�path�default�fs   rR�
_json_loadr`js����
�$��g�
.�
.�
.�	 �!��9�Q�<�<�	 �	 �	 �	 �	 �	 �	 �	 �	 �	 �	 �	 ����	 �	 �	 �	 �	 �	 �������������s,�A�5�A�9�A�9�A�A�Ac��|dz}t|dd���5}tj||dd���ddd��n#1swxYwYtj||��dS)N�.tmp�wrVrWF�)�ensure_ascii�indent)rYrZ�dump�os�replace)r]�obj�tmpr_s    rR�
_json_saverlqs���
��-�C�	
�c�3��	)�	)�	)�8�Q��	�#�q�u�Q�7�7�7�7�8�8�8�8�8�8�8�8�8�8�8����8�8�8�8��J�s�D�����s�=�A�Ac��t|dd���5}|�tj|d���dz��ddd��dS#1swxYwYdS)N�arVrWF�re�
)rY�writerZ�dumps)r]rjr_s   rR�
_append_jsonlrsws���	
�d�C�'�	*�	*�	*�<�a�	����
�3�U�3�3�3�d�:�;�;�;�<�<�<�<�<�<�<�<�<�<�<�<����<�<�<�<�<�<s�-A
�
A�Ac���ddl}|�dtzdtz��}|�dd��|�d��|�td���D]}|�|���|�|��|�d	d
��|�	dtzdtz|pdt������dS)
Nrrd皙����@�	Helvetica���s)�width�Helvetica-Oblique�	g333333�?�Generated at (UTC): )�textwrap�	beginTextr
�setFont�
setLeading�wrap�ABO_CERT_FOOTER�textLine�drawText�
drawStringrS)�c�generated_at_textr~�text�lines     rR�_draw_pdf_footerr�|s����O�O�O��;�;�q��t�S��V�$�$�D��L�L��a� � � ��O�O�A�����
�
�o�S�
�9�9�����
�
�d������J�J�t�����I�I�!�1�%�%�%��L�L��2��s�2�v�0�W�4W�8�:�:�4W�4W�X�X�X�X�XrQc���dtdtfd�}d�t|d��fD����sdS|j�dd��|j�d	d��t|j�d
d�����dd�����g}t
�fd�|D����S)
N�name�returnc���tj�|d��pd}|r|���S	t	ddd���5}|D]}}|���}|�|dz��rO|�dd��d����d��ccddd��S�~	ddd��n#1swxYwYn#t$rYnwxYwdS)	Nr�/opt/ccp-ai-gateway/.envrUrVrW�=r*z\"')rh�environ�get�striprY�
startswith�splitr\)r��valr_r�s    rR�_env_keyz%require_admin_token.<locals>._env_key�s����j�n�n�T�2�&�&�,�"���	��9�9�;�;��	��0�#��H�H�H�
L�A��L�L�D��:�:�<�<�D����t�c�z�2�2�L�#�z�z�#�q�1�1�!�4�:�:�<�<�B�B�7�K�K�K�K�	
L�
L�
L�
L�
L�
L�
L�
L�L�L�
L�
L�
L�
L�
L�
L�
L�
L�
L�
L�
L����
L�
L�
L�
L���
�	�	�	��D�	�����rsB�C&�A3C�?C&�C�C&�C�C&�!C�"C&�&
C3�2C3c��g|]}|�|��SrPrP��.0�xs  rR�
<listcomp>z'require_admin_token.<locals>.<listcomp>�s��O�O�O�Q�Q�O�q�O�O�OrQ�CCP_POSTAL_ADMIN_KEYTrr�X-CCP-Admin-Keyr�Bearer c3�2�K�|]}�D]}|o||kV��
�dSrLrP)r��	candidate�token�alloweds   �rR�	<genexpr>z&require_admin_token.<locals>.<genexpr>�s<�����a�a�I�Y`�a�a�PU�y�/�Y�%�/�a�a�a�a�a�a�arQ)�str�ADMIN_TOKEN�headersr�rir��any)�reqr��
candidatesr�s   @rR�require_admin_tokenr��s�����s��s�����P�O�;���1G�(H�(H�I�O�O�O�G����t�	����
�r�*�*�����)�2�.�.��C�K�O�O�O�R�0�0�1�1�9�9�)�R�H�H�N�N�P�P��J��a�a�a�a��a�a�a�a�a�arQ�payloadr�c��tj|dd���}tjd��}ddl}|j��}|�t�d����|�|�d����|�|�d����|�d|�	���d|��S)N��,�:T)�
separators�	sort_keys�rrV�.)
rZrr�secrets�
token_urlsafe�hashlib�sha256�update�SESSION_SECRET�encode�	hexdigest)r��raw�saltr��hs     rR�_signr��s���
�*�W��t�
D�
D�
D�C�� ��$�$�D��N�N�N������A��H�H�^�
"�
"�7�
+�
+�,�,�,��H�H�T�[�[��
!�
!�"�"�"��H�H�S�Z�Z��
 �
 �!�!�!��*�*�Q�[�[�]�]�*�*�S�*�*�*rQr�c�\�	|�dd��\}}}ddl}|j��}|�t�d����|�|�d����|�|�d����|���|krdStj|��}|�	d��r,tj
��t|d��krdS|S#t$rYdSwxYw)Nr�rdrrV�exp)
r�r�r�r�r�r�r�rZ�loadsr��time�floatr\)r�r��digestr�r�r�r�s       rR�_verifyr��s���!�K�K��Q�/�/���f�c������G�N����	����&�&�w�/�/�0�0�0�	������W�%�%�&�&�&�	������G�$�$�%�%�%��;�;�=�=�F�"�"��4��*�S�/�/���;�;�u���	�$�)�+�+��g�e�n�0E�0E�"E�"E��4���������t�t����s�CD�AD�D�
D+�*D+c�
�tj�dd��}|pd�d���dd��}|rt
sdSt
|��}|r|�d��dkrdS|S)N�	ccp_towerr�"z\054r��role�tower_admin)r�cookiesr�r�rir�r�)�tokr�s  rR�
tower_sessionr��s���
�/�
�
�k�2�
.�
.�C��9�"�
�
�C�
 �
 �
(�
(��#�
6�
6�C���n���t��c�l�l�G���g�k�k�&�)�)�]�:�:��t��NrQc�d�trtrt��stddi��dfSdS)N�error�unauthorized�)�TOWER_PASSWORDr�r�rrPrQrR�_tower_guardr��s9���7�~�7�-�/�/�7����0�1�1�3�6�6��4rQc��tj�t��st	tdgi��dSdS�N�users)rhr]�exists�
USERS_FILErlrPrQrR�ensure_users_filer��s<��
�7�>�>�*�%�%�.��:���}�-�-�-�-�-�.�.rQr�c��|pd���}|sdSt��ttdgi��}|�dg��D]3}|�d��pd���|kr|cS�4dS)Nrr�r�)r�r�r`r�r�)r��data�us   rR�find_user_by_tokenr��s����9�"�
�
�
�
�C����t������j�7�B�-�0�0�D�
�X�X�g�r�
"�
"����
�E�E�'�N�N� �b�'�'�)�)�S�0�0��H�H�H�1��4rQ�userc��t��ttdgi��}|�dg��}t	|�d����}d}t|��D]8\}}t	|�d����|kr
i|�|�||<d}n�9|s|�|��||d<tt|��dS)Nr��idFT)r�r`r�r�r��	enumerate�appendrl)r�r�r��uid�found�ir�s       rR�upsert_userr��s��������j�7�B�-�0�0�D��H�H�W�b�!�!�E�

�d�h�h�t�n�n�
�
�C��E��%� � �����1��q�u�u�T�{�{���s�"�"�$�!�}�t�}�E�!�H��E��E�#���
���T�����D��M��z�4� � � � � rQc��tj�t��st	tdii��dSdS�N�balances)rhr]r��
BALANCES_FILErlrPrQrR�ensure_balances_filer��s=��
�7�>�>�-�(�(�4��=�:�r�"2�3�3�3�3�3�4�4rQr�c��t��ttdii��}|�di���t	|��d��}	t|��S#t$rYdSwxYw)Nr��)r�r`r�r�r�r�r\)r�r��bs   rR�get_balancer��s}�������m�j�"�%5�6�6�D�����R� � �$�$�S��X�X�s�3�3�A���Q�x�x��������s�s����s�A-�-
A;�:A;�amountc���t��ttdii��}t|��|�di��t|��<t
t|��dSr�)r�r`r�r��
setdefaultr�rl)r�r�r�s   rR�set_balancer��s\�������m�j�"�%5�6�6�D�05�f�
�
�D�O�O�J��#�#�C��H�H�-��}�d�#�#�#�#�#rQ�deltac��t|��}t|��t|��z}t||��|SrL)r�r�r�)r�r��cur�newvs    rR�add_balancer�s:��
�c�
�
�C���:�:��e���$�D���T�����KrQc��tj�t��st	tdii��dSdS�N�plans)rhr]r��AGENCY_PLANS_FILErlrPrQrR�ensure_agency_plans_filers>��
�7�>�>�+�,�,�5��$�w��m�4�4�4�4�4�5�5rQc���t��ttdii��}t|t��sdii}t|�d��t��si|d<|Sr�)rr`r��
isinstance�dictr��r�s rR�_load_agency_plansrsi�������'�'�2��7�7�D��d�D�!�!����}���d�h�h�w�'�'��.�.����W�
��KrQc��t|t��sdii}t|�d��t��si|d<tt|��dSr�)rrr�rlr�rs rR�_save_agency_plansrs[���d�D�!�!����}���d�h�h�w�'�'��.�.����W�
�� �$�'�'�'�'�'rQc�z�	tt|����S#t$rt|��cYSwxYwrL)�intr�r\)�valuer^s  rR�_agency_intrsH����5��<�<� � � �������7�|�|�������s��:�:�opc��|pd������}dddd��|d��S)Nrr*rd�)�	cert_base�cert_blockchain�cert_timestampr)r��lowerr�)rs rR�agency_cert_costr%sJ��
�(��	�	�	�	�	!�	!�	#�	#�B������
�c�"�a�j�j�	rQc���t|pd�����}|siSt��}|�di���|i��}t	|t
��r|niS)Nrr�)r�r�rr�rr)r�r��plans   rR�get_agency_planr-sq��

�c�i�R�.�.�
�
�
 �
 �C����	����D��8�8�G�R� � �$�$�S�"�-�-�D��d�D�)�)�1�4�4�r�1rQc
�z�t|��}tdt|�d��d����}tdt|�d��d����}td||z
��}t	|�dd����t|�dd��pd��|||t|�dd	��pd	��t|�d
d	��pd	��t|�dd	��pd	��d�S)
Nr�monthly_credits�used_credits�activeF�	plan_name�Agenzia Creativa�renewal_dater�
updated_at�notes)rrrr�remaining_creditsrrr)r�maxrr��boolr�)r�r�monthly�used�	remainings     rR�agency_plan_publicr&5s���3���D��!�[����*;�!<�!<�a�@�@�A�A�G��q�+�d�h�h�~�6�6��:�:�;�;�D��A�w��~�&�&�I��t�x�x��%�0�0�1�1�����+�/A�B�B�X�FX�Y�Y�"��&��D�H�H�^�R�8�8�>�B�?�?��$�(�(�<��4�4�:��;�;��T�X�X�g�r�*�*�0�b�1�1�	�	�	rQ�
request_idc��t|��}|dkrdSt|pd�����}t��}|�di��}|�|i��}t
|t��r#t|�dd����sdStdt|�d��d����}tdt|�d��d����}td||z
��}	|	|kr
dd	||	||d
�fS||z}
t��}|�t|�dd����t|�dd
��pd
��||
|d���|||<t|��|d||||||
|	td||
z
��d�
}	tt|��n#t $rYnwxYwd|fS)Nr)FNrr�rFrr� insufficient_agency_cert_credits)�reason�cost�remaining_beforer�used_beforeTrr�rrrrr�agency_cert_debit)
�ts�kind�user_idrr'�credit_costr-�
used_afterr,�remaining_after)rr�r�rr�r�rrr"r!rrSr�rrs�AGENCY_USAGE_LOGr\)
r�rr'r+r�r�rr#r-r,r4rM�rows
             rR�agency_debit_or_noner8Es<���B���D��q�y�y��{�

�c�i�R�.�.�
�
�
 �
 �C����D��O�O�G�R�(�(�E��9�9�S�"���D��d�D�!�!���d�h�h�x��.G�.G�)H�)H���{��!�[����*;�!<�!<�a�@�@�A�A�G��a��T�X�X�n�%=�%=�q�A�A�B�B�K��1�g��3�4�4���$����8�� 0�&�&�
�
�
�	
��t�#�J�
�*�*�C��K�K��t�x�x��$�/�/�0�0�����+�/A�B�B�X�FX�Y�Y�"�"��������E�#�J��t�����#��� ��"� �,��q�'�J�"6�7�7���C�
��&��,�,�,�,���
�
�
���
������9�s�G/�/
G<�;G<�refundr3r*c
���tdt|d����}|dkrt|��St��}|�di��}|�t
|��i��}t|t��siStdt|�d��d����}td||z
��}	|	|d<t��|d<||t
|��<t|��	ttt��dt
|��|||||	|d�	��n#t$rYnwxYwt|��S)Nrr�rr�agency_cert_refund)	r0r1r2rr'r3r-r4r*)r!rr&rr�r�r�rrrSrrsr6r\)
r�rr3r'r*r�r�rr-r4s
          rR�
agency_refundr<{sn���a��[�!�4�4�5�5�K��a���!�#�&�&�&����D��O�O�G�R�(�(�E��9�9�S��X�X�r�"�"�D��d�D�!�!���	��a��T�X�X�n�%=�%=�q�A�A�B�B�K��Q��k�1�2�2�J�%�D���!���D����E�#�c�(�(�O��t����

��&��*�*�(��3�x�x��$�&�&�$��
)
�
)
�
	�
	�
	�
	���
�
�
���
�����c�"�"�"s�8E�
E�Ec��tj�t��st	tdii��dSdS)N�codes)rhr]r��PROMO_USAGE_FILErlrPrQrR�ensure_promo_usage_filer@�s>��
�7�>�>�*�+�+�4��#�g�r�]�3�3�3�3�3�4�4rQc�l�t|pd��������S�Nr)r�r�r)�emails rR�_promo_norm_emailrD�s,���u�{����!�!�#�#�)�)�+�+�+rQc�l�t|pd��������SrB)r�r��upper)�codes rR�_promo_norm_coderH�s*���t�z�r�?�?� � �"�"�(�(�*�*�*rQc��t��ttdii��}t|��}t	|pd�����}t
|��}|�d��pi�|i��pi}|�di��pi}|�di��pi}|r||vrdS|r||vrdSdS)Nr>r�uids�emailsTF)r@r`r?rHr�r�rDr�)rGr�rCr��item�	used_uids�used_emailss       rR�promo_bonus_already_usedrO�s��������&��"�
�6�6�D��D�!�!�D�

�c�i�R�.�.�
�
�
 �
 �C��e�$�$�E��H�H�W���#��(�(��r�2�2�8�b�D������$�$�*��I��(�(�8�R�(�(�.�B�K�
��s�i����t����+�%�%��t��5rQc�j�t��ttdii��}|�di��t	|��}t|pd�����}t|��}|d�|iiid���}||t|pd��t|��d�}|r||�di��|<|r||�di��|<|r&||�di��t|��<tt|��dS)Nr>r)rJrK�payments)r2rC�
payment_id�	bonus_aborJrKrQ)
r@r`r?r�rHr�r�rDr�rl)rGr�rCrRrSr�rL�records        rR�mark_promo_bonus_usedrU�s<�������&��"�
�6�6�D��O�O�G�R� � � ��D�!�!�D�

�c�i�R�.�.�
�
�
 �
 �C��e�$�$�E���=�#�#�D�2��QS�*T�*T�U�U�D����*�*��+�+��9�%�%�	��F��2�+1������#�#�C�(��6�/5�����"�%�%�e�,��B�;A����
�B�'�'��J���8����&�&�&�&�&rQc���	|���S#t$r>	t|��cYS#t$rt|t��r|nicYcYSwxYwwxYwrL)�to_dict_recursiver\rr)rjs rR�_stripe_obj_to_dictrX�s���8��$�$�&�&�&���8�8�8�	8���9�9������	8�	8�	8�$�S�$�/�/�7�3�3�R�7�7�7�7�7�	8����8���s)��
A�2�A�#A�A�A�Ac�r�t|t��st|��n|}|�d��}t|t��r&|�d��}|rt	|��St|t
��r�|�d��r�	tj�	|��}t|��}|�d��}|rt	|��Sn6#t$r)}tdt|��d���Yd}~nd}~wwxYw|�d��pi}t|t��r�|�d��}t|t��r�t|�d	��pd
��}t|�d��pd
��}t|�
��vst|�
��vrtS|�d��}t|t��r�t|�d	��pd
��}t|�d��pd
��}t|�
��vst|�
��vrtSd
S)N�promotion_coderG�promo_z4[STRIPE PROMO DEBUG] promotion_code retrieve failed:T��flush�source�couponr�rr�)rrrXr�rHr�r��stripe�
PromotionCode�retriever\�print�WELCOME_PROMO_CODErF)	�discount�promorG�pc�er^r_r��cids	         rR�$_stripe_get_promo_code_from_discountrj�s���4>�x��4N�4N�\�"�8�,�,�,�T\�H��L�L�)�*�*�E��%����*��y�y�� � ���	*�#�D�)�)�)��%����^�%�"2�"2�8�"<�"<�^�	^��%�.�.�u�5�5�B�$�R�(�(�B��6�6�&�>�>�D��
.�'��-�-�-�
.���	^�	^�	^��H�#�a�&�&�X\�]�]�]�]�]�]�]�]�]�����	^�����\�\�(�
#�
#�
)�r�F��&�$���*����H�%�%���f�d�#�#�	*��v�z�z�&�)�)�/�R�0�0�D��f�j�j��&�&�,�"�-�-�C�!�T�Z�Z�\�\�1�1�5G�3�9�9�;�;�5V�5V�)�)�
�\�\�(�
#�
#�F��&�$���&��6�:�:�f�%�%�+��,�,���&�*�*�T�"�"�(�b�)�)��������-�-�1C�s�y�y�{�{�1R�1R�%�%�
�2s�"AC7�7
D*�D%�%D*c�r�t��}|pi}	tjj�|gd����}n�#t
$r�}t
dt|��d���	tjj�|��}n:#t
$r-}t
dt|��d���|pi}Yd}~nd}~wwxYwYd}~nd}~wwxYwt|��}g}|�	d��pi}t|t��rV|�	d��pi}t|t��r*|�|�	d	��pg��|�|�	d	��pg��|D]�}	t|	t��s�|	D]z}
t|
t��st|
��n|
}
|
�	d
|
��}t|t��r�Tt|��}|r|�|���{��t!|��|fS)N)z*total_details.breakdown.discounts.discountz9total_details.breakdown.discounts.discount.promotion_codez8total_details.breakdown.discounts.discount.source.coupon)�expandz6[STRIPE PROMO DEBUG] expanded session retrieve failed:Tr\z-[STRIPE PROMO DEBUG] session retrieve failed:�
total_details�	breakdown�	discountsre)�setr`�checkout�Sessionrbr\rcr�rXr�rrr��listrj�add�sorted)
�
session_id�fallback_objr>�session_objrh�e2�discount_listsrmrn�dlstrLrerGs
             rR�stripe_session_promo_codesr|�sl���E�E�E��$�"�K�-��o�-�6�6�����7�
�
�����-�-�-�
�F��A���VZ�[�[�[�[�	-� �/�1�:�:�:�F�F�K�K���	-�	-�	-��A�3�r�7�7�RV�W�W�W�W�&�,�"�K�K�K�K�K�K�����	-�������������	-����&�k�2�2�K��N��O�O�O�4�4�:��M��-��&�&�D�!�%�%�k�2�2�8�b�	��i��&�&�	D��!�!�)�-�-��"<�"<�"B��C�C�C����+�/�/�+�6�6�<�"�=�=�=��
 �
 ���$��%�%�	���	 �	 �D�4>�t�T�4J�4J�T�&�t�,�,�,�PT�D��x�x�
�D�1�1�H��(�C�(�(�
��7��A�A�D��
 ��	�	�$�����	 ��%�=�=�+�%�%s?�(=�
C�C�'$B�C�
C�#B>�9C�>C�C�Cc�^�|pi}|pi}d�}t||��p
||����S)Nc�4�t|t��sdS|�d��pi}t|t��r*|�d��r|�d��S|�d��r|�d��SdS)Nr�customer_detailsrC�customer_email)rrr�)rj�detailss  rR�pickz"stripe_session_email.<locals>.pick/s����#�t�$�$�	��2��'�'�,�-�-�3����g�t�$�$�	(����W�)=�)=�	(��;�;�w�'�'�'��7�7�#�$�$�	-��7�7�+�,�,�,��rrQ)rD)rxrwr�s   rR�stripe_session_emailr�+sN���#��K��%�2�L�����T�T�+�.�.�D�$�$�|�2D�2D�E�E�ErQc��tj�t��st	tdddid���dSdS)N��?�generic��default_op_cost_abo�
operations)rhr]r��PRICING_FILErlrPrQrR�ensure_pricing_filer�=sI��
�7�>�>�,�'�'�_��<��Y�X[�L\�!]�!]�^�^�^�^�^�_�_rQc��t��ttdddid���}|�dd��|�dd|di��|S)Nr�r�r�r�r�)r�r`r�r�rs rR�get_pricingr�Ase�������l�C�PY�[^�O_�$`�$`�a�a�D��O�O�)�3�/�/�/��O�O�L�9�d�3H�.I�"J�K�K�K��KrQc�~�t��}|pd������}|�di��pi}||vrI	t	||��S#t
$r&t	|�dd����cYSwxYwt	|�dd����S)Nr�r�r�r�)r�r�rr�r�r\)r�p�opss   rR�op_cost_abor�Hs����
�
�A�
�/�	�	 �	 �	"�	"�	(�	(�	*�	*�B�
�%�%��b�
!�
!�
'�R�C�	�S�y�y�	<���R��>�>�!���	<�	<�	<�����4�c�:�:�;�;�;�;�;�	<��������,�c�2�2�3�3�3s�A)�)-B�Bc��t|��}t|��}||krd||fSt||��}d||fS)NFT)r�r�r�)r�rr+�bal�newbs     rR�debit_or_rejectr�SsN���r�?�?�D�
�c�
�
�C�
�T�z�z��c�4����s�T�E�"�"�D���t��rQc���|pd���}|sdS	ttdd���5}|D]�}	tj|��}t|�d����t|��kr6t|�d����|kr|ccddd��S��#t$rY��wxYw	ddd��n#1swxYwYn#t$rYdSwxYwdS)u[
    Ritorna dict log se già visto (con eventuale certificate_path), altrimenti None.
    rNrUrVrWr2r')r�rY�CERT_USAGE_LOGrZr�r�r�r\)r�r'r_r�r7s     rR�cert_find_seenr�\s{���"��)�)�+�+�J����t�
�
�.�#��
8�
8�
8�	�A��
�
����*�T�*�*�C��3�7�7�9�-�-�.�.�#�c�(�(�:�:�s�3�7�7�<�CX�CX�?Y�?Y�]g�?g�?g�"�
�
�	�	�	�	�	�	�	�	���!�����H�����
�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	��������t�t������4sd�C �C�A.B7�'C�)C �6C�7
C�C�C�C�C �C�C �C�C � 
C.�-C.c�P�ttdt��i|���dS�Nr0)rsr�rS��kws rR�cert_log_requestr�ps&���.�4����":�r�":�;�;�;�;�;rQc�P�ttdt��i|���dSr�)rs�	USAGE_LOGrSr�s rR�log_ai_usager�ss&���)�d�H�J�J�5�"�5�6�6�6�6�6rQ�c
�D�tj��t|��dzz
}idddd�}tj�t
��sRi|�t|��t
j|tj	���
��t��d��Stt
dd���5}|D�]x}	tj|��}t
j|d	�����}||kr�Kt#|�d
d����}|d�|dddid
���}|dxxdz
cc<|dxxdz
cc<|�d��r |dxxdz
cc<|dxxdz
cc<t)|�dd��pd��}	|dxx|	z
cc<|dxx|	z
cc<|�dd��}
|d�|
d��dz|d|
<��i#t*$rY��vwxYw	ddd��n#1swxYwYi|�t|��t
j|tj	���
��t��d��S)N�Qrr�)�by_user�total_requests�total_ok�total_cost_eur)�days�from�torUrVrWr0r2�unknownr�)�requests�ok�cost_eur�	providersr�r*r�r�r�r�r��providerr�)r�r	rhr]r�r�r�
fromtimestamprrNrOrSrYrZr��
fromisoformatr1r�r�r�r�r\)r��since�resr_r�r7r0r�r�r+r�s           rR�summarize_usager�vs����I�K�K�#�d�)�)�e�+�+�E��A�1�PS�
T�
T�C�
�7�>�>�)�$�$�}�|�#�|�s�4�y�y�(�2H��PX�P\�2]�2]�2g�2g�2i�2i�qy�q{�q{�|�|�|�|�	
�i��w�	/�	/�	/��1��	�	�D�
��j��&�&���+�C��I�6�6�@�@�B�B����:�:���#�'�'�)�Y�7�7�8�8���	�N�-�-�c���X[�jl�3m�3m�n�n���*�
�
�
��"�
�
�
��$�%�%�%��*�%�%�%��7�7�4�=�=�)��d�G�G�G�q�L�G�G�G��
�O�O�O�q�(�O�O�O��S�W�W�Z��5�5�<��=�=���*�
�
�
��%�
�
�
��$�%�%�%��-�%�%�%��G�G�J�	�2�2��$%�k�N�$6�$6�q�!�$<�$<�q�$@��+��q�!�!���
�
�
���
����%	�������������������,y�c�x�3�t�9�9�h�.D�U�H�L�.Y�.Y�.c�.c�.e�.e�mu�mw�mw�x�x�x�xsD�;I�AH'�I�	DH'�%I�'
H5�1I�4H5�5I�I	�I	r��out_dir�filenamec���tsdS	tj|��}tj�||��}|�|��|S#t$rYdSwxYwrB)�
HAS_QRCODE�qrcode�makerhr]�join�saver\)r�r�r��imgr]s     rR�_qr_to_temp_pngr��sn�����r���k�$�����w�|�|�G�X�.�.�����������������r�r����s�A
A�
A$�#A$c	�����tjtd���t|�dd�������}t|�dd�������}t|�dd�������}t|�dd�������}t|�dd�������}t|�d	d�������}t|�d
d�������}	t
|�dd��pA|�d
d��p+|�dd��p|�dd����}
t|�d
d��p|�dd��pd�����}t|�dd��pd�����}t|�dd��pd�����}
t
|�dd����}t|�dd��pd�����}t|�dd��pd�����}t|�dd��pd�����}t|�dd��pd�����}t|�dd��pd�����}t
|�dd����}t
|dkp	|p|p|p|p|��}d|�d|�d�}tj�t|��}d}|rt|td|�d|�d���}tj|t����t\}}��
dd ����d!tz|d"tzz
d#����
d$d%����d!tz|d&tzz
d'��|d(tzz
���
dd)����d!tz�d*���d+tzz���
d$d%����fd,�}d[��fd/�	}|d0|p|�d1|����|d2|��|d3|��|d4|p|��|d5|��|d6|	��|
rH|d7d8��|d9|d-d!�:��|d;|
pd<��|d=|sd>nd?��|d@|d-d.�:��|rU|dAdB��|dC|��|dD|d-dE�:��|dF|d-dG�:��|dH|d-dE�:��|dI|rdJndK��|r|dL|��|r�tj�|��r�	��||dMtzz
|dNtzz
dOtzdOtzddP�Q����
d$dR����|d!tzz
|dStzz
dT��n#t&$rYnwxYw��
dUdV����d!tzdWtzdXt)jt,j�����������
d$dR����d!tzdYtzdZ����������	|r3tj�|��rtj|��n#t&$rYnwxYw|S)\zw
    Crea PDF base con campi:
    cert_id, work_id, deposit_date, author, original_filename, verify_url, file_hash
    TrI�cert_idr�work_id�deposit_date�author�original_filename�
verify_url�	file_hash�video_proofF�video_sha256�
video_hash�video_declaration_text�video_file_name�video_retained_by_platform�content_type�ai_tool_used�	ai_prompt�human_contribution�ai_process_notes�ai_declaration_accepted�ai_assisted�
cert_base_�_�.pdf�qr_�.png��pagesize�Helvetica-Bold�rd�@�COPYRIGHTCHAINrv�g������	@z9Certificato di Copyright - Deposito con Data Certa (BASE)g@r�zDati Certificato皙�����?c���|r���dd����dtz�|�d�����dd����dtz�t|�����dtzz�dSdS)Nr��
rdr�rv�������@�333333�?)r�r�r
r�)�labelr
r��ys  ��rRr�z'generate_base_certificate.<locals>.line�s�����	�
�I�I�&��+�+�+�
�L�L��2��q�U�+�+�+�.�.�.�
�I�I�k�2�&�&�&�
�L�L��R���C��J�J�/�/�/�
��R��K�A�A�A�	�	rQ�P�c�b����t�pd�������sdS��fd�tdt������D��}t|��|kr1|d|�}|ddt	d�dz
���dz|d<t|��D]�\}}|dkr8��dd����d	tz�|�d
�����dd����dtz�|���d
tzz���dS)Nrc�*��g|]}�||�z���SrPrP�r�r��max_lenr
s  ��rRr�z@generate_base_certificate.<locals>.multiline.<locals>.<listcomp>��&���L�L�L��%��!�G�)��$�L�L�LrQr����� [...]r�r�rdr�rvr�g�?)	r�r��range�lenr!r�r�r�r
�	r�r
r��	max_lines�chunksr��chunkr�r�s	 ``    ��rR�	multilinez,generate_base_certificate.<locals>.multiline�sG������E�K�R� � �&�&�(�(���	��F�L�L�L�L�L�e�A�s�5�z�z�7�.K�.K�L�L�L���v�;�;��"�"��J�Y�J�'�F����$6�S��G�A�I�%6�%6�$6�7�(�B�F�2�J�!�&�)�)�	�	�H�A�u��A�v�v��	�	�*�B�/�/�/����Q�r�T�1��k�k�k�2�2�2�
�I�I�k�2�&�&�&�
�L�L��R���E�*�*�*�
��R��K�A�A�
	�	rQ�Cert ID�-zWork IDzDeposit DatezAuthor / OwnerzOriginal filenamezFile hash (SHA256)zVideo Proofz4Presente - dichiarazione video associata al depositozVideo hash SHA256�r�r�z
Video filez file video scaricato dall'utentezVideo conservato�No�Si�
DichiarazionezAI Proofz$Contenuto creato o modificato con AIzStrumento AI�Prompt principaler�Contributo umano��
Note processozDichiarazione AI�	Accettata�Non indicataz
Verify URLg@g@g@�auto)rz�height�preserveAspectRatio�maskrxg333333@zScansiona per verificarer{r|�@r}gffffff�?zeQuesto certificato attesta il deposito del contenuto e l'associazione univoca ai dati sopra indicati.)r�r�)rh�makedirs�
CERT_BASE_DIRr�r�r�r"r]r�r�r�Canvasrr�r�r
r��	drawImage�drawRightStringr\rrMrrNrO�showPager��remove)r�r�r'r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r��fullpath�qr_pathrcr�r�r�r�r�s                             @@rR�generate_base_certificater�s�����
�K�
��-�-�-�-��'�+�+�i��,�,�-�-�3�3�5�5�G��'�+�+�i��,�,�-�-�3�3�5�5�G��w�{�{�>�2�6�6�7�7�=�=�?�?�L�
����X�r�*�*�
+�
+�
1�
1�
3�
3�F��G�K�K�(;�R�@�@�A�A�G�G�I�I���W�[�[��r�2�2�3�3�9�9�;�;�J��G�K�K��R�0�0�1�1�7�7�9�9�I��w�{�{�=�%�8�8�j�G�K�K��XZ�<[�<[�j�_f�_j�_j�kw�y{�_|�_|�j�AH�AL�AL�Me�gi�Aj�Aj�k�k�K��w�{�{�>�2�6�6�]�'�+�+�l�TV�:W�:W�]�[]�^�^�d�d�f�f�L� ����-E�r�!J�!J�!P�b�Q�Q�W�W�Y�Y���'�+�+�&7��<�<�B��C�C�I�I�K�K�O�!%�g�k�k�2N�PU�&V�&V�!W�!W���w�{�{�>�2�6�6�<�"�=�=�C�C�E�E�L��w�{�{�>�2�6�6�<�"�=�=�C�C�E�E�L��G�K�K��R�0�0�6�B�7�7�=�=�?�?�I��W�[�[�)=�r�B�B�H�b�I�I�O�O�Q�Q���7�;�;�'9�2�>�>�D�"�E�E�K�K�M�M��"�7�;�;�/H�%�#P�#P�Q�Q���|�}�4�W��W�	�W�Ug�W�k{�W�@W�X�X�K�2�C�2�2�*�2�2�2�H��w�|�|�M�8�4�4�H��G��[�!�*�m�=Y�3�=Y�=Y��=Y�=Y�=Y�Z�Z���
�h��,�,�,�A�
�D�A�q��I�I���#�#�#��L�L��2��q�3�r�6�z�#3�4�4�4��I�I�k�2�����L�L��2��q�3�r�6�z�#^�_�_�_�	
�C��F�
�A��I�I���#�#�#��L�L��2��q�,�-�-�-���R��K�A��I�I�k�2�����������������"	�D��G�4�#�4�4�
�4�4�5�5�5��D��G�����D���&�&�&��D�	�6�=�S�)�)�)��D�	�/�0�0�0��D�	�y�)�)�)��T���]�R�S�S�S��	�%�|�R�1�M�M�M�M���\�?�P�.P�Q�Q�Q���
�-G�!Q���T�R�R�R��	�/�#9�2�QR�S�S�S�S��]���Z�?�@�@�@���^�\�*�*�*��	�%�y�"��J�J�J�J��	�$�&8�"�PQ�R�R�R�R��	�/�#3�R�1�M�M�M�M���
�0G�![���^�\�\�\��'���\�:�&�&�&���2�7�>�>�'�*�*��	�
�K�K���S��V��Q��R��Z�s�2�v�c�RT�f�jn�u{�K�|�|�|�
�I�I�k�1�%�%�%�
���a�!�B�$�h��C��F�
�4N�O�O�O�O���	�	�	��D�	�����I�I�!�1�%�%�%��L�L��2��s�2�v�^�h�l�8�<�6P�6P�6Z�6Z�6\�6\�^�^�_�_�_��I�I�k�1�����L�L��2��s�2�v� G�H�H�H��J�J�L�L�L��F�F�H�H�H�
��	�r�w�~�~�g�.�.�	��I�g�������
�
�
���
�����Os%�/B\5�5
]�]�5a�
a�ar�c�D�t|pd��������}tjd|��std���tstd���trtrtstd���tdkrdnd}tt|d	tpd
d�}tj|dzd
t��dddd�|t���}	|���}n%#t"$rtd|j�����wxYw|�d��pi}t)|�d��du��}|rdndt*pdttpd
|t-��t|�dd��pd��t|�dd��pd��t|�dd��pd��|�d��|�d��t|�dd��pd��|�d��|jd �}|sAtd!|�d��p|�d��p|j�����|S)"z�
    Crea una marca temporale Openapi/InfoCert sull'hash SHA-256 del file.
    Il file originale non viene inviato a Openapi.
    rz[0-9a-f]{64}�invalid_or_missing_file_hash�openapi_timestamp_disabled�%openapi_timestamp_missing_credentialsr:z#https://test.ws.marchetemporali.comzhttps://ws.marchetemporali.comFrA)�username�password�file�mime�typez/marcar��application/json�curl/8.0)rr�Accept�
User-Agent�r�rZ�timeout�)openapi_timestamp_non_json_response_http_r��successT�issued�failedr?�transaction�timestamp_body�timestamp_header�	availabler$�messager���statusr��environmentr�hash�timestamp_issued_atr'�timestamp_body_urlr)r*r$r+r��http_statuszopenapi_timestamp_failed: )r�r�r�re�	fullmatch�
ValueErrorr2�RuntimeErrorr;r<r=r9r@r��postrBrZr\�status_coder�r"r>rS)r��base_url�bodyrUr�r�r��metas        rR�_openapi_timestamp_for_hashr<#s���
�I�O��$�$�*�*�,�,�2�2�4�4�I�
�<���3�3�9��7�8�8�8�$�9��7�8�8�8�"�D�*J�D�Rr�D��B�C�C�C�8M�QZ�8Z�8Z�4�4�aA�H�5�4���&�4�*���D�	�
��8��@�'>�@�@�.�(�$�	
�
��)�
	�
	�
	�A�X��f�f�h�h�����X�X�X��V�q�}�V�V�W�W�W�X�����7�7�6�?�?� �b�D�	
�c�g�g�i� � �D�(�	)�	)�B�!�.�(�(�h�.�F�2F�,�&�4�*��'�z�z��4�8�8�M�2�6�6�<�"�=�=�!�$�(�(�+;�R�"@�"@�"F�B�G�G�����);�R� @� @� F�B�G�G��X�X�k�*�*����� � ��s�w�w�y�"�-�-�3��4�4�����!�!��}���D�"�u��s�����8K�8K�8q�t�x�x�X_�O`�O`�8q�de�dq�s�s�t�t�t��Ks�*C?�?"D!�timestamp_metac�P���tjtd���t|�dd��pd�����}t|�dd��pd�����}t|�dd��pd�����}t|�dd��pd�����}t|�dd��pd�����}t|�d	d��pd�����p
t
��}	t|�d
d��pd��}
i}|
r(	tj|
��}n#t$ri}YnwxYwtj
�td|�d|�d
���}tj
|t����t\}
}��dd����dt"z|dt"zz
d����dd��|dt"zz
�dH��fd�	}dI��fd�	}|d|��|d|��|d|��|d|��|d |��|d!|	���d"t"zz���dd#����dt"z�d$���d%t"zz���dd��|d&|d'd�(��|d)d*��|d+d,���d"t"zz���dd#����dt"z�d-���d%t"zz���dd��|d.|�d/d����|d0|�d1d����|d2|�d3d����|d4|�d5d����|d6|�d7d����|d8|�d9d����|d:|�d;d����|d<|�d=d����|d>|�d?d��d'd�(��|d@|�dAd��d'd�(����dBdC����dt"zdDt"zdE|������dt"zdFt"zdGt
��������������|S)Jz1
    Genera PDF certificato Marca Temporale.
    TrIr�rr�r�r�r�r�r)�cert_timestamp_r�r�r�r��rdr�zCERTIFICATO MARCA TEMPORALErvr�g@�ic	����t|pd�����}|sdS��dtz�|�d|d|������dtzz�dS)Nrrd�: gףp=
��?)r�r�r�r
)r�r
r�r�r�s   ��rRr�z,generate_timestamp_certificate.<locals>.line�sn����E�K�R� � �&�&�(�(���	��F�	���Q�r�T�1��;�;�%����/�;�;�<�<�<�	�T�"�W����rQ�Rrc������t�pd�������sdS��fd�tdt������D��}t|��|kr1|d|�}|ddt	d�dz
���dz|d<t|��D]A\}}��dtz�|dkr|�d|��nd	|�����d
tzz��BdS)Nrc�*��g|]}�||�z���SrPrPr�s  ��rRr�zEgenerate_timestamp_certificate.<locals>.multiline.<locals>.<listcomp>�r�rQrr�r�r�rdrC�  g�p=
ף�?�r�r�r�r�r!r�r�r
r�s	 ``    ��rRr�z1generate_timestamp_certificate.<locals>.multiline�s������E�K�R� � �&�&�(�(���	��F�L�L�L�L�L�e�A�s�5�z�z�7�.K�.K�L�L�L���v�;�;��"�"��J�Y�J�'�F����$6�S��G�A�I�%6�%6�$6�7�(�B�F�2�J�!�&�)�)�	�	�H�A�u�
�L�L��2��q��a���U�"5�"5�e�"5�"5�"5�\�%�\�\�R�R�R�
��b��L�A�A�	�	rQzUser IDz
Request IDr�zAutore / Titolarez	Nome filez
Data depositog�?r�zOggetto della marcaturag�?zHash SHA-256 marcato�Zr�z File originale inviato a Openapir��Modalitaz(Marcatura dell'impronta SHA-256 del filezDati marca temporale�Providerr��Ambienter.�Tipor�Stator-�Transactionr'z
Issued at UTCr0zInfoCert UCTTimez
ICTSA-UCTTimezInfoCert Serial NumberzICTSA-SNzInfoCert TSAz
ICTSA-TSANamez
Timestamp URLr1r{r|ru�Verify URL: 皙�����?zGenerated at UTC: )rA)rDr)rhr
�CERT_TS_DIRr�r�r�rSrZr�r\r]r�rrrr�r�r
rr�)r�r�r'r=r�r�r�r�r�r��
header_raw�header�outrcr�r�r�r�r�s                 @@rR�generate_timestamp_certificaterVhs������K��d�+�+�+�+��'�+�+�i��,�,�2��3�3�9�9�;�;�G��G�K�K��R�0�0�6�B�7�7�=�=�?�?�I��W�[�[��r�2�2�8�b�9�9�?�?�A�A�J��G�K�K�(;�R�@�@�F�B�G�G�M�M�O�O��
����X�r�*�*�0�b�
1�
1�
7�
7�
9�
9�F��w�{�{�>�2�6�6�<�"�=�=�C�C�E�E�S����L��^�'�'�(:�B�?�?�E�2�F�F�J�
�F���	��Z�
�+�+�F�F���	�	�	��F�F�F�	����
�'�,�,�{�$L�c�$L�$L�J�$L�$L�$L�
M�
M�C��
�c�B�'�'�'�A�
�D�A�q��I�I���#�#�#��L�L��2��q�3�r�6�z�#@�A�A�A��I�I�k�2����	�C��F�
�A���������������	�D��C�����D��z�"�"�"��D��G�����D�	�f�%�%�%��D��'�(�(�(��D��,�'�'�'���b��L�A��I�I���#�#�#��L�L��2��q�3�4�4�4���b��L�A��I�I�k�2����
�I�$�i��q�I�I�I�I��D�	+�T�2�2�2��D��?�@�@�@���b��L�A��I�I���#�#�#��L�L��2��q�0�1�1�1���b��L�A��I�I�k�2�����D��^�'�'�
�B�7�7�8�8�8��D��^�'�'�
�r�:�:�;�;�;��D���#�#�F�B�/�/�0�0�0��D��.�$�$�X�r�2�2�3�3�3��D���*�*�=�"�=�=�>�>�>��D��.�,�,�-B�B�G�G�H�H�H��D�	�V�Z�Z���<�<�=�=�=��D�	!�6�:�:�j�"�#=�#=�>�>�>�
�I�n�f�j�j��"�=�=�r�UV�W�W�W�W�
�I�o�~�1�1�2F��K�K�UW�cd�e�e�e�e��I�I�!�1�%�%�%��L�L��2��s�2�v�:�j�:�:�;�;�;��L�L��2��s�2�v�@�H�J�J�@�@�A�A�A��J�J�L�L�L��F�F�H�H�H��Js� F5�5G�Gc��tj�dd��}|rt|��nd}|rt	|d��|dfS|�d��}|rt	|��ddfSddtddi��dffS)Nrrr�r2r�r�r�)rr�r�r�r�r)r�r�r�r�s    rR�_resolve_uid_from_requestrX�s���
�/�
�
�m�R�
0�
0�C�&)�3��c�"�"�"�t�D��+��4��:����d�*�*�
�+�+�i�
 �
 �C�
�$��3�x�x��t�#�#�����.� 9�:�:�C�@�@�@rQrc�,�tsdSt�d|��S)Nrz/cert/file?path=)�PUBLIC_BASE_URL)rs rR�_build_public_cert_urlr[�s#�����r��9�9�x�9�9�9rQr�c��tsdSt|pd�����}t|pd�����}|r|rt�d|�d|��S|rt�d|��S|rt�d|��StS)Nrz/?id=z&hash=z/?hash=)�VERIFY_BASE_URLr�r�)r�r�s  rR�_build_verify_urlr^�s������r��'�-�R� � �&�&�(�(�G��I�O��$�$�*�*�,�,�I��C�9�C�!�B�B��B�B�y�B�B�B��2�!�1�1��1�1�1��6�!�5�5�)�5�5�5��rQc��"�(�)�t|�dd����������}t|�dd�������}|dvrt	dgd�d���dfS|st	d	d
i��dfSt|��\}}}|r|S|dkrd}n|d
krd}nd}t
||��}|�r>t|�dd��pd��}|}	|	s�|dkr/t}
tj	�
|
d|�d|�d���}	nc|d
kr/t}
tj	�
|
d|�d|�d���}	n.t}
tj	�
|
d|�d|�d���}	|	r{tj	�
|	��r\t	d|||d|t|��|	t|�dd��|�dd����d�	��St|�dd��pd��������}|dvrd}d}d}
d}d}t!|��}|dkr�|dkr�d}t#|||��\}}|r8d }t%|�d!��p|��}
t|��}d"}nI|d#krCt	d$|||t'|��t|��t)|��||d%d&�
��d'fS|d kr>t+||��\}}}|s(t	d(|||||t)|��||d)�	��d'fSd*t-t/|�d+|������d,zd-��}t|�dd�������}t||��}t1|pi��}||d.<||d<t|�d/d��pd�����}t|�d0d��pd�����}t|�d1d��pd�����}t|�d2d��pd�����}t|�d3d��pd�����}t3|�d4d����}t3|d5kp	|p|p|p|p|��}d6dddddddd7�}ddddddddddddddd8�} 	|dkrt5|||��}!�n�|d
kr(t7|��} | |d9<t9|||| ��}!�n�t;|||||��}tjtd�:��tj	�
td|�d|�d���}!t?j |!tB�;���(tB\}"}#�(�"d<d=���(�#d>tHz|#d?tHzz
d@���(�"dAdB��|#dCtHzz
�)�(�#d>tHz�)dD|�����)dEtHzz�)�(�#d>tHz�)dF|�����)dEtHzz�)�(�#d>tHz�)dG|�����)dEtHzz�)�(�#d>tHz�)dH|�����)dEtHzz�)d��(�)fdJ�	}$t3|�dKd��pA|�dLd��p+|�dMd��p|�dNd����}%|%r։(�#d>tHz�)dO���)dEtHzz�)t|�dLd��p|�dMd��pd�����}&|&r/�(�#d>tHz�)dP|&�����)dEtHzz�)�(�#d>tHz�)dQ���)dEtHzz�)|r��(�"d<dB���(�#d>tHz�)dR���)dEtHzz�)�(�"dAdS��|r/�(�#d>tHz�)dT|�����)dUtHzz�)|$dV|dId>�W��|$dX|dIdY�W��|$dZ|dId>�W���(�#d>tHz�)d[|rd\nd]�����)dEtHzz�)�(�"dAdB���(�#d>tHz�)d^|�d_d6�������)dEtHzz�)|�d`��rC�(�#d>tHz�)da|�d`d�������)dEtHzz�)|�db���5�(�#d>tHz�)dc|�db�������(�"ddde���(�#d>tHzdftHzdg|�dhd�������(�#d>tHzditHzdj|�����(�#d>tHzdktHzdltK�������(�&���(�'��n�#tP$rw}'|d kr|
dkrtS|||
|dm��ntU||��tW|dnddodd"||||||
dm�p�
�
t	dmt|'��dq���dofcYd}'~'Sd}'~'wwxYwtYd�idr|�d|�ds|�d|�dt|�du|�dv|
�dw|�d|!�d|�d|�dKt3|�dKd��p+|�dLd��p|�dNd�����dLt|�dLd��p|�dMd��pd������dNt|�dNd��pd������dxt|�dxd��pd������dyt3|�dyd�����d/|�d5|�d0|�d1|�d2|�d3|�d4|�d.|�dzt|�dzd��������d{t|�d{d��������d|t|�d|d�������p
tK���d}|dkr|�d_d6��nd�dh|�dhd���d~|�d~d���d|�dd���d`|�d`d���db|�db���d�|�d�d���d�|�d�d���d�| �d_d���d�| �d�d���d�| �d�d���d�| �d�d���d�| �d�d���d�| �d�d���d�| �d�d���d�| �d�d���d�| �d�d���d�| �d����d�| �d����d�| �d�d���d�| �d�����tW|dndd�dd"||||||
����t	id�d�dr|�d|�ds|�du|�d|�d�|�dv|
�d#t)|���d�d�d|�d�t|���d|!�d�|�d.|�d|�d|�t3|�dKd��p+|�dLd��p|�dNd����t|�dLd��p|�dMd��pd�����t3|�dyd����||||||||dkr|�d_d��nd|dkr|nd|d
kr| �d_d��nd|d
kr| ndd�����S)�N�	cert_typer-r'r)r-r/r1�invalid_cert_type)r�r��r��missing_request_idr/rr1rr�certificate_path�cert_blockchain_r�r�r?r�Tr�r�)	r�r2r`r�idempotent_replayr'�balance_abord�certificate_url�billing_walletr)�agency�aborrkrF�agency_cert_creditsr3r�rjr)zKCrediti Agenzia insufficienti. Se vuoi usare gli ABO, seleziona ABO Wallet.)
r�rr`ri�cost_aborgrj�agency_required_credits�agency_attemptr+��insufficient_balance)	r�rr`rirmrgrjrnrozCD-r�i@B�06dr�r�r�r�r�r�r�r��pending)r-�ots_path�ots_manifest_path�btc_txid�btc_block_height�ots_last_upgrade_at�anchored_at�confirmed_atr,r=rIr�r�r@rdrz'CERTIFICATO BLOCKCHAIN (OpenTimestamps)rvr�g������@z	User ID: r�zRequest ID: z	Cert ID: zFile Hash: �Hc������t�pd�������sdS��fd�tdt������D��}t|��|kr1|d|�}|ddt	d�dz
���dz|d<t|��D]A\}}��dtz�|dkr|�d|��nd	|�����d
tzz��BdS)Nrc�*��g|]}�||�z���SrPrPr�s  ��rRr�z:_cert_debit_core.<locals>.bc_multiline.<locals>.<listcomp>�s&���T�T�T��%��!�G�)��,�T�T�TrQrr�r�r�rdrCrGg�������?rH)	r�r
r�r�r�r�r�r��ybs	 ``    ��rR�bc_multilinez&_cert_debit_core.<locals>.bc_multiline�s������E�K�R�(�(�.�.�0�0�����F�T�T�T�T�T�e�A�s�5�z�z�7�6S�6S�T�T�T���v�;�;��*�*�#�J�Y�J�/�F�!'���,>�S��G�A�I�->�->�,>�!?�(�!J�F�2�J� )�&� 1� 1�"�"�H�A�u��L�L��2��r�!�q�&�&�e�+>�+>�u�+>�+>�+>�l�SX�l�l�[�[�[��$�r�'�M�B�B�"�"rQr�r�r�r�zAVideo Proof: Presente - dichiarazione video associata al depositozVideo SHA256: z&Video conservato da CopyrightChain: Noz.AI Proof: Contenuto creato o modificato con AIr�zStrumento AI: r�r�r�rr�rzDichiarazione AI: rrzOTS Status: r-rvzBitcoin TxID: rwzBlock Height: r{r|gffffff@zOTS Proof: rtrurPrQr}�certificate_generation_failed�gateway��)
r2r�r�r-�msr�r�abo_costr`r'�billing_method�agency_credit_costr��r�r�r2rr�r�r��agency_debitr�r�r�r�r��blockchain_statusrurxryrz�timestamp_status�timestamp_providerr��timestamp_environmentr.�timestamp_typer�timestamp_hashr/r0�timestamp_transactionr'r1r)�timestamp_availabler*�timestamp_usedr$�timestamp_messager+�timestamp_http_statusr2��)r2r�r�r-r�r�rr�r`r'r�r�r��debited_aborfrgrh)r�r�r�r�r�r�r�r�r�r�r�rFr�r1)r{rrP)-r�r�r�rrrXr��CERT_BC_DIRrhr]r�rRrr�r�r^rr8r	r�r&r��absr/rr"rr<rV�_ots_stamp_for_payloadr
rrrr�r�r
rSrr�r\r<r�r�r�)*r�r`r'r�r��errr�seen�	seen_path�expected�base_dir�requested_walletr�r�r��agency_attempted�agency_cost�	agency_ok�
bal_beforerm�ok_debitr�r�r�r�r�r�r�r�r�r��ots_metar=rdrcr�r�
video_present�	video_sharhr�r~s*                                        @@rR�_cert_debit_corer��s3�����G�K�K��V�4�4�5�5�;�;�=�=�C�C�E�E�I��W�[�[��r�2�2�3�3�9�9�;�;�J��;�;�;��!4�Ad�Ad�Ad�e�e�f�f�hk�k�k��=���!5�6�7�7��<�<�.�w�7�7�N�C��s�
���
��L� � �
���	�k�	!�	!�
���
���#�z�*�*�D�������!3�R�8�8�>�B�?�?�	����
	W��L�(�(�&���7�<�<��2[�S�2[�2[�:�2[�2[�2[�\�\����k�)�)�&���7�<�<��2Z�C�2Z�2Z�*�2Z�2Z�2Z�[�[���(���7�<�<��2U�s�2U�2U�Z�2U�2U�2U�V�V���	�����x�0�0�	����&��%)�(�*�3�/�/�$,�#4�T�X�X�i��5L�5L�d�h�h�Wb�df�Ng�Ng�#h�#h�
�
�
�
�

�$�7�;�;�'7��@�@�J�F�K�K�Q�Q�S�S�Y�Y�[�[���8�8�8�!���N����L���"�2�&�&�K��Q���+�u�4�4���"6�s�B�
�"K�"K��	�<��	�2�N�!$�\�%5�%5�m�%D�%D�%S��!T�!T��$�S�)�)�J��H�H�
��
)�
)��;��&�"2�'��O�O�*�3�/�/�,�S�1�1�+6�".�h�������
��.�.�.�)8��b�)A�)A�&��*�h��	��/��&�"2�$�)�,�S�1�1�+6�".�
�
�
�
��
�

�E�C���2�2�j�2�2�3�3�4�4�w�>�D�D�D�G��G�K�K��R�0�0�1�1�7�7�9�9�I�"�7�I�6�6�J��7�=�b�!�!�G�&�G�L�� �G�I���w�{�{�>�2�6�6�<�"�=�=�C�C�E�E�L��w�{�{�>�2�6�6�<�"�=�=�C�C�E�E�L��G�K�K��R�0�0�6�B�7�7�=�=�?�?�I��W�[�[�)=�r�B�B�H�b�I�I�O�O�Q�Q���7�;�;�'9�2�>�>�D�"�E�E�K�K�M�M��"�7�;�;�/H�%�#P�#P�Q�Q���|�}�4�W��W�	�W�Ug�W�k{�W�@W�X�X�K����� �!���	�	�H������!�� ���������N�$[[�����8��#�z�R�R���
�+�
%�
%�8��C�C�N�(6�G�$�%�=�g�s�J�Xf�g�g���-�g�s�J��Q[�\�\�H��K��d�3�3�3�3�!�w�|�|�K�9b�C�9b�9b�R\�9b�9b�9b�c�c���
�.��<�<�<�A��D�A�q�
�I�I�&��+�+�+�
�L�L��2��q�1�R�4�x�)R�S�S�S�
�I�I�k�2�&�&�&��S��V��B�
�L�L��2��r�#4�s�#4�#4�5�5�5��#�b�&�L�B�
�L�L��2��r�#>�*�#>�#>�?�?�?��#�b�&�L�B�
�L�L��2��r�#8�w�#8�#8�9�9�9��#�b�&�L�B�
�L�L��2��r�#<��#<�#<�=�=�=��#�b�&�L�B�
"�
"�
"�
"�
"�
"�
"�!����]�E�!B�!B�"t�g�k�k�R`�bd�Fe�Fe�"t�ip�it�it�vB�DF�jG�jG�"t�KR�KV�KV�Wo�qs�Kt�Kt�u�u�M��
����Q�r�T�2�'j�k�k�k��c�"�f�������N�B� ?� ?� f�7�;�;�|�]_�C`�C`� f�df�g�g�m�m�o�o�	��!��L�L��2��r�+G�I�+G�+G�H�H�H��#�b�&�L�B����Q�r�T�2�'O�P�P�P��c�"�f����

+��	�	�*�B�/�/�/����Q�r�T�2�'W�X�X�X��c�"�f����	�	�+�r�*�*�*��!��L�L��2��r�+J�L�+J�+J�K�K�K��#�b�&�L�B���0�)�R�ST�U�U�U�U���/�1C�R�[\�]�]�]�]���_�.>��VW�X�X�X�X����Q�r�T�2�'x�Kb�<v�K�K�hv�'x�'x�y�y�y��c�"�f����	�	�+�r�*�*�*�
�L�L��2��r�#T�(�,�,�x�	�2R�2R�#T�#T�U�U�U��#�b�&�L�B��|�|�J�'�'�
����Q�r�T�2�'U����Z�PR�8S�8S�'U�'U�V�V�V��c�"�f����|�|�.�/�/�;����Q�r�T�2�'Z����EW�8X�8X�'Z�'Z�[�[�[�
�I�I�)�1�-�-�-�
�L�L��2��s�2�v�'R�X�\�\�*�R�5P�5P�'R�'R�S�S�S�
�L�L��2��s�2�v�'B�j�'B�'B�C�C�C�
�L�L��2��s�2�v�'J�h�j�j�'J�'J�K�K�K�
�J�J�L�L�L�
�F�F�H�H�H����[�[�[��2�2�2�7I�A�7M�7M��#�r�#5�z�Cb�c�c�c�c���X�&�&�&���)��c�a�RU��H�	�j�)�>P�1�		
�	
�	
�	
��!@�S�QR�V�V�T�T�U�U�WZ�Z�Z�Z�Z�Z�Z�Z�����[���� �1�1�1���1��:�1��2�1��)�	1�
��1�&�~�
1�.�-�1�"�\�1�*�)�1���1��)�1�����]�E�:�:�K�g�k�k�.�Z\�>]�>]�K�ah�al�al�nF�HJ�bK�bK�L�L�L�1�����^�R�8�8�_�G�K�K��VX�<Y�<Y�_�]_�`�`�f�f�h�h�h�1� #�7�;�;�/G��#L�#L�#R�PR�S�S�Y�Y�[�[�[�1��G�K�K�(9�2�>�>�D�"�E�E�K�K�M�M�M�1� $(����4P�RW�(X�(X�#Y�#Y�#Y�!1�""�\�#1�$ �K�%1�&"�\�'1�(�)�)1�*.�-�+1�,*�)�-1�.!8� 7�/1�0�:�11�2�g�k�k�*=�r�B�B�C�C�I�I�K�K�K�31�4�7�;�;�x��,�,�-�-�3�3�5�5�5�51�6����^�R�8�8�9�9�?�?�A�A�O�X�Z�Z��71�8@I�L�?X�?X�(�,�,�x��;�;�;�^`��91�:���j�"�-�-�-�;1�<#�,�,�':�B�?�?�?�=1�>%�L�L�)>��C�C�C�?1�@���j�"�-�-�-�A1�B"���&8�9�9�9�C1�D�L�L���3�3�3�E1�F�\�\�.�"�5�5�5�G1�H(�+�+�H�b�9�9�9�I1�J*�-�-�j�"�=�=�=�K1�L-�0�0���C�C�C�M1�N&�)�)�&�"�5�5�5�O1�P&�)�)�&�"�5�5�5�Q1�R+�.�.�/D�b�I�I�I�S1�T-�0�0���C�C�C�U1�V*�-�-�.B�B�G�G�G�W1�X(�+�+�,>��C�C�C�Y1�Z+�.�.�{�;�;�;�[1�\&�)�)�&�1�1�1�]1�^)�,�,�Y��;�;�;�_1�`-�0�0��?�?�?�a1�1�h��i�D���S�
��I�*�%�:L������ ��d� ��3� �	�Y� �	
�b�	 �
	�.� �	�*�
 �	�x� �	�0� �	�$�S�)�)� �	�U� �	�j� �	�{�3�'�'� �	�,� �	�:� �	�j� � 	�7�! �"	�Y�# �$�G�K�K�
�u�=�=�N����^�]_�A`�A`�N�dk�do�do�qI�KM�eN�eN�O�O��G�K�K���;�;�b�w�{�{�<�Y[�?\�?\�b�`b�c�c�i�i�k�k�&*�7�;�;�7S�UZ�+[�+[�&\�&\�$�"�$��0�,�#:�;D��;T�;T�X�\�\�(�B�7�7�7�Z\�$��4�4�x�x�$�@I�[�@X�@X�N�.�.�x��<�<�<�^`�'0�K�'?�'?�^�^�T�? � � � � � s �1W+m�
o�'A,o�o�or
c��tjddt|pd�������dd�S)Nz[^A-Za-z0-9._-]+r�r�)r3�subr�r�)r
s rR�_safe_fsr�4s8��
�6�%�s�C����,<�,<�,B�,B�,D�,D�E�E�d�s�d�K�KrQr��r"c�r�ttj��}tj�t
���d|�dd����|d<tjt
gt|���dd||���}|j
pddz|jpdz���}|j
|fS)Nr��PATHrT)�capture_outputr�r"�envrp)rrhr�r]�dirname�OTS_BINr��
subprocess�runrs�stdout�stderrr��
returncode)r"�argsr��procrUs     rR�_run_otsr�7s���
�r�z�
�
�C��W�_�_�W�-�-�D�D�����r�0B�0B�D�D�C��K��>�	��4��:�:���
������D�
�K��2��%���):��;�
B�
B�
D�
D�C��?�C��rQr�c�\�|pd}tjd|��}d�tjd|��D��}|sYtjd|tj��}|r7	t	|�d����g}n#t$rg}YnwxYwd}|s tjd|tj��rd	}nG|s tjd
|tj��rd}n"tjd|tj��rd}||r|d
nd||rt|��nd||dd�d�S)NrzA(?:Transaction id|Timestamped by transaction)\s+([0-9a-fA-F]{64})c�,�g|]}t|����SrP)r	r�s  rRr�z%_parse_ots_status.<locals>.<listcomp>Hs��[�[�[�!�s�1�v�v�[�[�[rQz&BitcoinBlockHeaderAttestation\((\d+)\)zblock(?:\s+height)?\s+(\d+)r*rsz6Success! Timestamp complete|attests data existed as of�	confirmedzwaiting for \d+ confirmations�anchoredz=PendingAttestation|Pending confirmation in Bitcoin blockchainr�i ��)r-rv�	btc_txidsrw�btc_block_heights�ots_raw)r3�findall�search�Ir	�groupr\r!)r��txids�heights�mr-s     rR�_parse_ots_statusr�Dsh���:�2�D��J�[�]a�b�b�E�[�[�r�z�*S�UY�Z�Z�[�[�[�G����I�4�d�B�D�A�A���	�
��q�w�w�q�z�z�?�?�+�����
�
�
�����
�����F���"�)�U�W[�]_�]a�b�b�����	��"�)�<�d�B�D�I�I�����	��S�UY�[]�[_�	`�	`�����!&�.�E�"�I�I�B��,3�=�C��L�L�L��$�����=�
��s�#B�B�Br�c�d�t|�dd�������}|std���dt|��t|��t|��|dt|�dd�������t|�dd�������t|�dd�������p
t	��t|�d	d��pd�����tt|�d	d��pd�����d
kph|�d��pS|�d��p>|�d
��p)|�d��p|�d����t|�dd��pd�����t|�dd��pd�����t|�d
d��pd�����t|�dd��pd�����t|�dd����d�t|pd�����t	��d�
S)Nr�r�missing_file_hashzcopyrightchain-ots-v1r�r�r�r�r�r�r�r�r�r�r�F)r�r�r�r�r�r�)
�schemar�r2r'r��hash_algorithmr�r�r�r��ai_proofr��generated_at)r�r�r�r5rSr")r�r�r'r�r�r�s      rR�_build_ots_manifestr�cs.���G�K�K��R�0�0�1�1�7�7�9�9�I��.��,�-�-�-�*��w�<�<��s�8�8��*�o�o��"� ����-@�"�!E�!E�F�F�L�L�N�N��g�k�k�(�B�/�/�0�0�6�6�8�8��G�K�K���;�;�<�<�B�B�D�D�R��
�
��G�K�K���;�;�A�r�B�B�H�H�J�J���G�K�K���$C�$C�$I�r� J� J� P� P� R� R�Vc� c�!Q�gn�gr�gr�tB�hC�hC�!Q�GN�GR�GR�S^�G_�G_�!Q�cj�cn�cn�oC�cD�cD�!Q�HO�HS�HS�Tf�Hg�Hg�!Q�kr�kv�kv�wP�kQ�kQ�R�R�����N�B� ?� ?� E�2�F�F�L�L�N�N��W�[�[��b�9�9�?�R�@�@�F�F�H�H�"%�g�k�k�2F��&K�&K�&Q�r�"R�"R�"X�"X�"Z�"Z� #�G�K�K�0B�B�$G�$G�$M�2� N� N� T� T� V� V�'+�G�K�K�8Q�SX�,Y�,Y�'Z�'Z�

�
��*�*��+�+�1�1�3�3� �
�
�)��rQr2�updatesc�<�tj�t��sdSd}g}t	tdd���5}|D]�}	tj|��}n#t$rY�$wxYwt|�	d����t|��krLt|�	d����t|��kr|�
|pi��d}|�|����	ddd��n#1swxYwY|r�tdz}t	|d	d���5}|D].}|�tj
|d�
��dz���/	ddd��n#1swxYwYtj|t��|S)NFrUrVrWr2r'Trbrcrorp)rhr]r�r�rYrZr�r\r�r�r�r�rqrrri)	r2r'r��changed�rowsr_r�r7rks	         rR�_rewrite_cert_usage_rowr�s9��
�7�>�>�.�)�)���u��G�
�D�	
�n�c�G�	4�	4�	4�	���	�	�D�
��j��&�&�����
�
�
���
�����3�7�7�9�%�%�&�&�#�g�,�,�6�6�3�s�w�w�|�?T�?T�;U�;U�Y\�]g�Yh�Yh�;h�;h��
�
�7�=�b�)�)�)����K�K������	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	��(��v�%��
�#�s�W�
-�
-�
-�	D���
D�
D������
�3�U�;�;�;�d�B�C�C�C�C�
D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D����	D�	D�	D�	D�	�
�3��'�'�'��NsI�D�A�D�
A*�'D�)A*�*BD�D�D�82E7�7E;�>E;�
manifest_pathrtc�r�g}dD]j\}}	t|||���\}}|r|�d|�d|�����9#t$r%}|�d|�d|����Yd}~�cd}~wwxYwd�|�����}t|��}	t
��|	d<|	S)N))�upgraderI)�verifyrI)�infor�r�z$ ots rpz

rx)r�r�r\r�r�r�rS)
r�rt�outputs�cmdr"�rcrUrh�combinedr;s
          rR�_ots_refresh_filesr��s����G�G�0�0���W�	0��s�H�g�>�>�>�G�B���
6����4��4�4�s�4�4�5�5�5����	0�	0�	0��N�N�.�C�.�.�1�.�.�/�/�/�/�/�/�/�/�����	0�����{�{�7�#�#�)�)�+�+�H��X�&�&�D�"*�*�*�D�	���Ks�2>�
A-�A(�(A-c
���t|||||��}t|���dt|����}tj�t
d|�d���}|dz}t
|dd���5}	tj||	dd	d
���ddd��n#1swxYwYtj�	|��rtj
|��td|d
���\}
}|
dkstj�	|��std|�����d||t��dddddd�	}t||��}
|�|
�dd��|
�dd��|
�dd��|
�d��d���|ddvrt��|d<|ddkrt��|d<|S)Nr��	manifest_z.jsonz.otsrcrVrWFTr�)rer�r��stamp�<r�rzots_stamp_failed: rsr)	r-rtru�ots_stamped_atrxrvrwryrzr-rxrvrw)r-rxrvrw�r�r�ryr�rz)r�r�rhr]r��OTS_WORK_DIRrYrZrgr�rr�r6rSr�r�r�)r�r�r'r�r��manifestr-r�rtr_r�rUr;�	refresheds              rRr�r��sK��"�7�C��W�j�Q�Q�H��s�m�m�4�4�h�z�2�2�4�4�D��G�L�L��/F�4�/F�/F�/F�G�G�M��v�%�H�	
�m�S�7�	3�	3�	3�Z�q��	�(�A�E�T�j�Y�Y�Y�Y�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z����Z�Z�Z�Z�
�w�~�~�h����
�	�(�����w�
�r�:�:�:�G�B��	�Q�w�w�b�g�n�n�X�.�.�w��5��5�5�6�6�6���*�"�*�*�!�� ���
�
�D�#�=�(�;�;�I��K�K��-�-��)�4�4�(�}�}�-B�B�G�G��M�M�*�b�1�1�%�M�M�*<�=�=�	������H�~�2�2�2�&�j�j��]���H�~��$�$�'�z�z��^���Ks�5B�B�"Br7c
�~�t|pi��}t|�dd�������dkr|St|�dd��pd�����}t|�dd��pd�����}|r!|rtj�|��s>t|�dd��pd�����pd|d<|St||��}|�d	|�dd����|d<|�d
d��|d
<|�d��p|�dd��|d<|�d���|�d��n|�d��|d<|dd
vr&|�d��st��|d<|ddkr&|�d��st��|d<tt|�dd��pd�����t|�dd��pd�����|�dd��|�d
d��|�dd��|�d��|�dd��|�dd��d���|S)Nr`r-r/rurrtr�rsr-rxrvrwr�ryr�rzr2r')r�rxrvrwryrz)
rr�r�r�rhr]r�r�rSr�)r7r�rtr�s    rR�_ots_refresh_rowr��s��
�s�y�b�/�/�C�
�3�7�7�;��'�'�(�(�.�.�0�0�L�@�@��
����� 3�R�8�8�>�B�?�?�E�E�G�G�M��3�7�7�:�r�*�*�0�b�1�1�7�7�9�9�H���������x�0H�0H��#&�s�w�w�/B�B�'G�'G�'M�2�#N�#N�#T�#T�#V�#V�#c�Zc��� ��
�"�=�(�;�;�I�(�}�}�X�s�w�w�?R�T]�7^�7^�_�_�C���!*���/D�b�!I�!I�C����m�m�J�/�/�J�3�7�7�:�r�3J�3J�C�
�O�CL�=�=�Qc�Cd�Cd�Cp�i�m�m�,>�?�?�?�vy�v}�v}�Q�wR�wR�C���
���#<�<�<�S�W�W�]�E[�E[�<�%�Z�Z��M��
���;�.�.�s�w�w�~�7N�7N�.�&�j�j��N����C�G�G�I�r�"�"�(�b�)�)�/�/�1�1��C�G�G�L�"�%�%�+��,�,�2�2�4�4�!$���)<�b�!A�!A�#&�7�7�+@�"�#E�#E����
�B�/�/� #���(:� ;� ;��7�7�=�"�5�5��G�G�N�B�7�7�
	
�	
�����JrQ�/healthc	��tdtt��tt��ttt
ot��d���S)NT)r��has_openai_key�has_gemini_key�
has_qrcode�tower_configured)rr"rrr�r�r�rPrQrR�healthr��sJ�����~�.�.��~�.�.� � ��!B�N�C�C�����rQ�
/openapi.jsonc	��tdddd�iddddii�d	ddd
ii�ddddii�d
dddii�ddddii�ddddii�ddddii�ddddii�ddddii�ddddii�ddddii�ddddii�d ddd!ii�d"ddd#ii�d$ddd%ii�d&ddd'ii�d(ddd)ii�d*���S)+Nz3.0.0zCCP AI Gatewayz1.0.0)�title�versionr�r��summary�Healthr�zOpenAPI spec�/docsz	HTML docs�/tower/loginr7zTower login�/tower/users/upsertzUpsert user�/tower/users/listz
List users�/tower/ai/statszAI stats�/tower/balancesz
Balances dump�/tower/balances/topup�Topup�/tower/balances/setzSet balance�/tower/pricingzGet pricing�/tower/pricing/setzSet pricing�/me/balancez
My balance�/certifyz,Create & debit certificate (base/blockchain)�/cert/debitzDebit certificate (compat)�
/cert/filez@Download certificate by server path (needs tower or admin token)�/textzAI text)�openapir��paths�rrPrQrR�openapi_jsonrs�����*�w�?�?�
���	�8�4�5�
��e�i��%@�A�
�
�e�i��5�6�
�
�V�i��%?�@�	
�

"�F�Y�
�,F�#G�
�
 �%�)�\�)B�!C�

�
��	�:�'>�?�
�
��	�?�'C�D�
�
$�f�y�'�.B�%C�
�
"�F�Y�
�,F�#G�
�
�u�y�-�&@�A�
�
!�6�I�}�+E�"F�
�
�E�I�|�#<�=�
�
��)�-[�!\�]�
�
�F�Y�0L�$M�N�
� 
�5�9�.p�"q�r�!
�"
�f�y�)�4�5�#
�����rQr�c�,�d}t|dddi��S)NaV<!doctype html><html><head><meta charset="utf-8"><title>CCP AI Gateway Docs</title></head>
<body style="font-family:Arial,sans-serif;padding:20px">
<h2>CCP AI Gateway</h2>
<ul>
<li><a href="/health">/health</a></li>
<li><a href="/openapi.json">/openapi.json</a></li>
</ul>
<p>Endpoints principali: /tower/*, /certify, /text</p>
</body></html>r�rztext/html; charset=utf-8)r)�htmls rR�docsrs#���D���s�^�5O�$P�Q�Q�QrQr�c�T�tjd���pi}|�d��tkrt	ddi��dfStdt
j��dzd	���}tt	d
di����}|�d|ddd
d���|S)NT��silentrr�r�r�r�r�)r�r�r�r�F�Laxr#)�httponly�secure�samesiter])	r�get_jsonr�r�rr�r�r�
set_cookie)r�r��resps   rR�tower_loginr,s�����4�(�(�(�.�B�D��x�x�
���~�-�-����0�1�1�3�6�6�
��t�y�{�{�U�/B�C�C�
D�
D�C���$���.�.�/�/�D��O�O�K��t�E�E�X[�O�\�\�\��KrQr�c�F�t��}|r|Stjd���pi}|�d��st	ddi��dfSt|d��|�dd��|�d	d��|�d
d��|�dd��|�dd
��t
|�dd��pd��t��d�}t|��t	ddi��S)NTrr�r��
missing_idrbr�rrCr��walletr�free�ai_limit_monthlyr)r�r�rCr�rrrrr�)	r�rrr�rr�r	rSr�)�gr�r�s   rR�tower_users_upsertr 7s�����A�������4�(�(�(�.�B�D��8�8�D�>�>�5����.�/�/��4�4��$�t�*�o�o����'�2�&�&����'�2�&�&������$�$��(�(�8�R�(�(������(�(�����);�Q� ?� ?� D�1�E�E��j�j�	�	�D�������D�$�<� � � rQz/tower/users/createc��t��}|r|Stjd���pi}t|�dd�������}t|�dd����������}t|�dd�������}t|�dd�������}t|�dd	��pd	��������}t|�d
d�������}t|�dd�������}|�dd
��}	|stddi��dfS|stddi��dfS|rt|��dkrtddi��dfSt|��}
|
r:t|
�dd����|krtddi��dfSt��ttdgi��}|�dg��D]P}t|�dd�������|krtddi��dfcS�Qt��}
||ptjd��||||pd	t!|�dd
��pd
��t#|��d|
|
d�}t%|��	t'|	pd
��}	n#t($rd}	YnwxYwt+||	��tdt-|��d|	d���S)NTrr�rrCr�rrrr��
temp_password�initial_balancerr�rrb�
missing_emailrx�weak_temp_password�email_exists�r��	id_exists�r)r�r�rCr�rrr�
password_hash�must_change_password�
created_atrr�)r�r��temp_password_setr#)r�rrr�r�r�rrr��find_user_by_emailr�r`r�rSr��	token_hexr	�_pw_hashr�r�r\r��_user_public)rr�r�rCr�rrr�r"r#�existing_by_email�currentr�rMr�s               rR�tower_users_creater4Ms������A�������4�(�(�(�.�B�D�

�d�h�h�t�R� � �
!�
!�
'�
'�
)�
)�C������"�%�%�&�&�,�,�.�.�4�4�6�6�E��t�x�x���#�#�$�$�*�*�,�,�D�
����(�B�'�'�
(�
(�
.�
.�
0�
0�F��t�x�x���'�'�1�6�2�2�8�8�:�:�@�@�B�B�D������"�%�%�&�&�,�,�.�.�E������"�5�5�6�6�<�<�>�>�M��h�h�0�!�4�4�O��5����.�/�/��4�4��8����1�2�2�C�7�7��=�C�
�.�.��2�2���!5�6�7�7��<�<�*�5�1�1���7�S�!2�!6�!6�t�R�!@�!@�A�A�S�H�H����0�1�1�3�6�6�������g�r�]�3�3�G�
�[�[��"�
%�
%�8�8���q�u�u�T�2�����%�%�'�'�3�.�.��G�[�1�2�2�C�7�7�7�7�/��*�*�C���/�'�+�B�/�/�����������);�Q� ?� ?� D�1�E�E�!�-�0�0� $�����D��������� 4�1�5�5������������������_�%�%�%����T�"�"�!�*�	����s�4N�N�Nz/tower/users/reset_passwordc�n�t��}|r|Stjd���pi}t|�dd�������}t|�dd�������}|st
ddi��dfSt��ttd	gi��}|�d	g��}d}|D]?}t|�d
d�������|kr|}n�@|st
ddi��dfS|rt|��d
krdtjd��zdz}t|��|d<d|d<t��|d<t|��t
d||dd���S)NTrr2rr"r��missing_user_idrbr�r��user_not_found�rx�Tempr��!r*r+r)r�r2r"r+)r�rrr�r�r�rr�r`r�r�r�r/r0rSr�)rr�r�r"�
users_datar��targetr�s        rR�tower_users_reset_passwordr=�s������A�������4�(�(�(�.�B�D�

�d�h�h�y�"�%�%�
&�
&�
,�
,�
.�
.�C������"�5�5�6�6�<�<�>�>�M��:���!2�3�4�4�c�9�9������J��"�
�6�6�J��N�N�7�B�'�'�E�
�F�
�����q�u�u�T�2�����%�%�'�'�3�.�.��F��E�/��9���!1�2�3�3�S�8�8��<�C�
�.�.��2�2���!2�1�!5�!5�5��;�
�&�}�5�5�F�?��%)�F�!�"�#�:�:�F�<����������&� $�	����rQz/tower/users/deletec	�l�t��}|r|Stjd���pi}t|�dd�������}|st
ddi��dfSt��ttdgi��}|�dg��}d}g}|D]S}t|�d	d�������|kr|}�>|�
|���T|st
dd
i��dfSt|�dd����������d
krt
ddi��dfS||d<tt|��t��ttdii��}|�di���|d��tt|��t
d||�dd��|�dd��d���S)NTrr2rr�r6rbr�r�r7r8r�admin�protected_admin_user�r�rCr�)r��deleted_user_id�
deleted_email�deleted_name)r�rrr�r�r�rr�r`r�r�rrlr�r�r��pop)	rr�r�r;r�r<�keptr�r�s	         rR�tower_users_deleterG�s+�����A�������4�(�(�(�.�B�D�

�d�h�h�y�"�%�%�
&�
&�
,�
,�
.�
.�C��:���!2�3�4�4�c�9�9������J��"�
�6�6�J��N�N�7�B�'�'�E�
�F�
�D�
�����q�u�u�T�2�����%�%�'�'�3�.�.��F�F��K�K��N�N�N�N��9���!1�2�3�3�S�8�8�
�6�:�:�f�b�!�!�"�"�(�(�*�*�0�0�2�2�g�=�=���!7�8�9�9�3�>�>��J�w���z�:�&�&�&�����
�]�Z��$4�
5�
5�C��N�N�:�r�"�"�&�&�s�D�1�1�1��}�c�"�"�"�������G�R�0�0��
�
�6�2�.�.�	����rQr�c��t��}|r|St��tttdgi����Sr�)r�r�rr`r��rs rR�tower_users_listrJ�s@�����A����������:�j�7�B�-�8�8�9�9�9rQr�c��t��}|r|Sttj�dd��pd��}tdt
|d����}tt|����S)Nr�rCr*im)	r�r	rr�r�r!�minrr�)rr�s  rR�tower_ai_statsrM�si�����A������w�|�����-�-�5��6�6�D��q�#�d�C�.�.�!�!�D��?�4�(�(�)�)�)rQz/tower/users/spend_summaryc	�X��t��}|r|Si��fd�}tdftdffD�]�\}}tj�|��s�&	t
|dd���5}|D�]f}|���}|s�	tj	|��}n#t$rY�<wxYwt|�dd�������}||��}|s��|�d	d
��pd
}		t|	��}	n#t$rd}	YnwxYw|dxx|	z
cc<|d
xxdz
cc<t|�dd��pd��}
|
r|dr|
|dkr|
|d<|dkr"|dxx|	z
cc<|dxxdz
cc<��F|dxx|	z
cc<|dxxdz
cc<��h	ddd��n#1swxYwY���#t$rY���wxYwtdt������i��S)Nc	���t|pd�����}|sdS|�vr|dddddddd��|<�|S)Nrr�r)r2�abo_spent_total�ai_abo_spent�cert_abo_spent�ai_calls�cert_ops�	total_ops�last_ts)r�r�)r�rUs �rR�
ensure_uidz-tower_users_spend_summary.<locals>.ensure_uid�sg����#�)��n�n�"�"�$�$���	��4��c�>�>��#&� #�"%�����	�	�C��H��3�x�rQ�ai�certrUrVrWr2rr�rr�rPrUr*r0rVrQrSrRrTr�)r�r�r�rhr]r�rYr�rZr�r\r�r�r�rrs�values)rrWr]�bucketr_r�r7r�rLrkr0rUs           @rR�tower_users_spend_summaryr\�s ������A�����
�C������"$�T�*�^�V�,D�E�'�'���f��w�~�~�d�#�#�	��$	��d�C�'�2�2�2�!
.�a�� .� .�D��:�:�<�<�D��!� �!�"�j��.�.����$�!�!�!� ��!�����c�g�g�i��4�4�5�5�;�;�=�=�C�%�:�c�?�?�D��!� ��'�'�*�a�0�0�5�A�C�"�#�C�j�j����$�"�"�"�!����"�����*�+�+�+�s�2�+�+�+���%�%�%��*�%�%�%��S�W�W�T�2�.�.�4�"�5�5�B��-�4�	�?�-�b�4�	�?�6J�6J�*,��Y����~�~��^�,�,�,��3�,�,�,��Z�(�(�(�A�-�(�(�(�(��-�.�.�.�#�5�.�.�.��Z�(�(�(�A�-�(�(�(�(�A .�!
.�!
.�!
.�!
.�!
.�!
.�!
.�!
.�!
.�!
.�!
.����!
.�!
.�!
.�!
.���D�	�	�	��H�	�����G�T�#�*�*�,�,�/�/�0�1�1�1s��G+�&G�B�G�
B&	�#G�%B&	�&AG�D�G�D$	�!G�#D$	�$B-G�G+�G"	�"G+�%G"	�&G+�+
G9�8G9r�c��t��}|r|St��tttdii����Sr�)r�r�rr`r�rIs rR�tower_balancesr^8sA�����A����������:�m�j�"�-=�>�>�?�?�?rQr�c���t��}|r|Stjd���pi}t|�dd�������}|�dd��}|r|�t
ddi��dfS	t|��}n##t$rt
dd	i��dfcYSwxYwt||��}t
d||d
���S)NTrr2rr�r��missing_paramsrb�invalid_amount�r�r2rg)
r�rrr�r�r�rr�r\r�)rr�r�r�r�s     rR�tower_balances_topuprc@s�����A�������4�(�(�(�.�B�D�

�d�h�h�y�"�%�%�
&�
&�
,�
,�
.�
.�C�
�X�X�h��
%�
%�F��9�&�.���!1�2�3�3�S�8�8�9��v�������9�9�9���!1�2�3�3�S�8�8�8�8�9�����s�F�#�#�D��$�3�t�D�D�E�E�E��
B�B=�<B=rc���t��}|r|Stjd���pi}t|�dd�������}|�dd��}|r|�t
ddi��dfS	t|��}n##t$rt
dd	i��dfcYSwxYwt||��t
d||d
���S)NTrr2r�balancer�r`rb�invalid_balancerb)
r�rrr�r�r�rr�r\r�)rr�r�rfs    rR�tower_balances_setrhQs�����A�������4�(�(�(�.�B�D�

�d�h�h�y�"�%�%�
&�
&�
,�
,�
.�
.�C��h�h�y�$�'�'�G��9�'�/���!1�2�3�3�S�8�8�:���.�.�����:�:�:���!2�3�4�4�c�9�9�9�9�:������W�����$�3�w�G�G�H�H�Hrdrc�\�t��}|r|Stt����SrL)r�rr�rIs rR�tower_pricing_getrjbs*�����A������;�=�=�!�!�!rQrc���t��}|r|Stjd���pi}|�dd��}|�dd��}t	��}|�7	t|��|d<n##t$rtddi��dfcYSwxYw|��t|t��stddi��dfSi}|�
��D]Y\}}	t|��|t|������
��<�J#t$rY�VwxYw|r||d<tt|��td|d	���S)
NTrr�r�r��invalid_default_costrb�invalid_operations)r��pricing)r�rrr�r�r�r\rrr�itemsr�r�rrlr�)rr��default_costr�r��cleaned�k�vs        rR�tower_pricing_setrtis������A�������4�(�(�(�.�B�D��8�8�1�4�8�8�L����,��-�-�J�
�-�-�C���	C�).�|�)<�)<�C�%�&�&���	C�	C�	C��G�%;�<�=�=�s�B�B�B�B�	C�������*�d�+�+�	A��G�%9�:�;�;�S�@�@����$�$�&�&�	�	�D�A�q�
�27��(�(���A�������,�,�.�.�/�/���
�
�
���
�����	(� '�C����|�S�!�!�!��$�3�/�/�0�0�0s%�'A:�:B�B�#AD'�'
D4�3D4c��t��t|pd��������}t	t
dgi��}|�dg��D]Q}t|�dd����������|kr|cS�RdS)Nrr�rC)r�r�r�rr`r�r�)rCr�r�s   rRr.r.�s�������������"�"�$�$�*�*�,�,�E��j�7�B�-�0�0�D�
�X�X�g�r�
"�
"�����q�u�u�W�b�!�!�"�"�(�(�*�*�0�0�2�2�e�;�;��H�H�H�<��4rQc��t|�dd����|�dd��|�dd��|�dd��|�dd��t|�dd	��pd	��|�d
d��|�dd��t|�dd
����t	|�di��t
��r|�di��nit	|�di��t
��r,|�di��pi�di��nid�S)Nr�rrCr�rrrrrrr,r+F�profile�postal)r�rCr�rrrrr,r+rw�postal_profile)r�r�r	r"rr)r�s rRr1r1�sJ���!�%�%��b�/�/�"�"����w��#�#����f�b�!�!��%�%��"�%�%����f�f�%�%�����&8�!� <� <� A��B�B��e�e�L�"�-�-��e�e�L�"�-�-� $�Q�U�U�+A�5�%I�%I� J� J�+5�a�e�e�I�r�6J�6J�D�+Q�+Q�Y�1�5�5��B�'�'�'�WY�LV�WX�W\�W\�]f�hj�Wk�Wk�mq�Lr�Lr�z�1�5�5��B�/�/�5�2�:�:�8�R�H�H�H�xz���rQc��tjt|pd���d�������S)NrrV)r�r�r�r�r�)r�s rRr0r0�s6���>�#�c�i�R�.�.�/�/��8�8�9�9�C�C�E�E�ErQc�T�dtjd�����zS)NzUSR-r�)r�r/rFrPrQrR�
_make_user_idr|�s$���G�%�a�(�(�.�.�0�0�0�0rQc��t|�dd��pd�����}|���}dD]1}|�|��r|dt|���cS�2|S)Nr�r)r��.jpg�.jpegr�z.txtz.docz.docx)r�r�r�r�endswithr�)r7r��low�exts    rR�_client_cert_titler��s�������+�R�0�0�6�B�7�7�=�=�?�?�E�
�+�+�-�-�C�I�%�%���<�<����	%���3�s�8�8�)��$�$�$�$�	%��LrQc� �t|�dd��pd�����}|dkrt|��}t|�dd��pd�����}t|�dd��pd�����}t|�dd��pd�����}t|�dd��pd�����}|dkr|sd	}id|�d
t|�d
d��pd������d|�dt	|���dt|�dd��pd������d
t|�d
d��pd������dt|�dd��pd������dt|�dd��pd������dt|�dd��pd������dt|�dd��pd������dt|�dd��pd������dt|�dd��pd������dt|�dd��pd������dt|�dd��pd������dt|�dd��pd������dt|�dd��pd������d|�d���id|�d���dt|�dd�����dt|�dd��pd������dt|�dd��pd������dt|�dd��pd������dt|�dd�����d|�d|�d |rt
|��nd�d|�d!t|�d!d��pd������d"|�d"���d#t|�d#d��pd������d$t|�d$d��pd������d%t|�d#d��pd�����rDt
t|�d#d��pd�������nd�d&t|�d$d��pd�����rDt
t|�d$d��pd�������nd�d't|�d'd��pd�������t|�d(d��pd�����d)|�d*|��d+��S),Nr`r-r/rdrr�r�r�rsr'r�r�r�r�r�r�r�r�r�r�r0r�r1r�r�r�Fr�r�r�r�rhrvrwrtru�
ots_proof_url�ots_manifest_urlryrzz6Certificato emesso via CopyrightChain AI Gateway. ID: z. Verifica: )rz�legal_attestation)r�r�r�r�r�r"r[)r7r`rdr�r�r�s      rR�_build_client_certificate_rowr��s����C�G�G�K��0�0�:�F�;�;�A�A�C�C�I��L� � ��s�#�#���3�7�7�#5�r�:�:�@�b�A�A�G�G�I�I���#�'�'�)�R�(�(�.�B�/�/�5�5�7�7�G��S�W�W�\�2�.�.�4�"�5�5�;�;�=�=�J��C�G�G�$7��<�<�B��C�C�I�I�K�K���L� � �):� �%��%��7�%��c�#�'�'�,��3�3�9�r�:�:�@�@�B�B�%�	�Y�%�	�#�C�(�(�	%�
	�S����)<�b�!A�!A�!G�R�H�H�N�N�P�P�%�	�#�c�g�g�h��+�+�1�r�2�2�8�8�:�:�
%�	��C�G�G�N�B�7�7�=�2�>�>�D�D�F�F�%�	�S�����b�1�1�7�R�8�8�>�>�@�@�%�	�C����(:�B� ?� ?� E�2�F�F�L�L�N�N�%�	�c�#�'�'�*>��"C�"C�"I�r�J�J�P�P�R�R�%�	 ��S�W�W�-D�b�%I�%I�%O�R�!P�!P�!V�!V�!X�!X�%�	�#�c�g�g�&6��;�;�A�r�B�B�H�H�J�J�%�	�#�c�g�g�&6��;�;�A�r�B�B�H�H�J�J�%�	�s�3�7�7�+@�"�#E�#E�#K��L�L�R�R�T�T�%�	 ��S�W�W�-D�b�%I�%I�%O�R�!P�!P�!V�!V�!X�!X�%� 	�c�#�'�'�*>��"C�"C�"I�r�J�J�P�P�R�R�!%�"	�s�w�w�'<�=�=�#%�%�$	�#�'�'�"2�3�3�%%�&	�t�C�G�G�M�5�9�9�:�:�'%�(	��C�G�G�N�B�7�7�=�2�>�>�D�D�F�F�)%�*	!�#�c�g�g�.F��&K�&K�&Q�r�"R�"R�"X�"X�"Z�"Z�+%�,	�3�s�w�w�'8�"�=�=�C��D�D�J�J�L�L�-%�.	%�d�3�7�7�3O�QV�+W�+W�&X�&X�/%�0	�j�1%�2	�,�3%�4	�GW�_�1�2B�C�C�C�]_�5%�6	�.�7%�8	�C����
�B�/�/�5�2�6�6�<�<�>�>�9%�:	�C�G�G�$6�7�7�;%�<	�C����
�B�/�/�5�2�6�6�<�<�>�>�=%�>	�S����)<�b�!A�!A�!G�R�H�H�N�N�P�P�?%�@	�_b�cf�cj�cj�ku�wy�cz�cz�dA�A�`B�`B�`H�`H�`J�`J�R�/��C�G�G�J��4K�4K�4Q�r�0R�0R�0X�0X�0Z�0Z�[�[�[�PR�A%�B	�kn�or�ov�ov�xK�MO�pP�pP�pV�TV�lW�lW�l]�l]�l_�l_�g�2�3�s�w�w�?R�TV�7W�7W�7]�[]�3^�3^�3d�3d�3f�3f�g�g�g�eg�C%�D	�s�3�7�7�=�"�5�5�;��<�<�B�B�D�D�E%�%�F�C�G�G�N�B�7�7�=�2�>�>�D�D�F�F�w�V]�w�w�ku�w�w�I%�%�%�%rQz/client/certificatesc�~�tj�dd��}t|��}|st	ddi��dfSt|�dd��pd�����}g}	tj�	t��r�ttdd�	��5}|D]�}	tj
|��}n#t$rY�$wxYwt|�d
d��pd�����|kr�d|�t!|������	ddd��n#1swxYwYn8#t$r+}t	dt|��d���d
fcYd}~Sd}~wwxYw|�d�d���t	d|d���S)Nrrr�r�r�r�rUrVrWr2�client_certificates_failedr�r�c�L�t|�dd��pd��S�Nr�r�r�r��r�s rR�<lambda>z%client_certificates.<locals>.<lambda>��!��S����~�r�!:�!:�!@�b�A�A�rQT��key�reverse)r�r,)rr�r�r�rr�r�rhr]r�r�rYrZr�r\r�r��sort)r�r�r�ror_r�r7rhs        rR�client_certificatesr��s5��
�/�
�
�m�R�
0�
0�C��c�"�"�D��7����0�1�1�3�6�6�

�d�h�h�t�R� � �&�B�
'�
'�
-�
-�
/�
/�C��E�X�
�7�>�>�.�)�)�		E��n�c�G�<�<�<�
E���E�E�D�!�"�j��.�.����$�!�!�!� ��!�����3�7�7�9�b�1�1�7�R�8�8�>�>�@�@�C�G�G� ��L�L�!>�s�!C�!C�D�D�D�D�E�
E�
E�
E�
E�
E�
E�
E�
E�
E�
E�
E����
E�
E�
E�
E����X�X�X��!=�#�a�&�&�Q�Q�R�R�TW�W�W�W�W�W�W�W�����X����
�J�J�A�A�4�J�P�P�P��$��6�6�7�7�7sg�?;E�:E�C�E�
C"�E�!C"�"A"E�E�E�E�E�E�
F�' F
�F�
Fz/tower/certificatesc�*�tj�dd��p@ttj�dd��pd�����}t
��s%tr|tkstddi��dfSttj�dd��pd������	��}ttj�dd��pd������	��}ttj�d	d��pd������	��}i}	t��ttd
gi��}|�d
g��D]@}t|�dd��pd�����}|r|||<�An#t$ri}YnwxYwg}	tj�t"���r\t%t"dd
���5}	|	D�](}
	t'j|
��}n#t$rY�%wxYwt+|��}t|�dd��pd�����}|�|i��}
||d<t|
�dd��pd�����|d<t|
�dd��pd�����|d<d�t|�dd��pd��t|�dd��pd��t|�dd��pd��t|�dd��pd��t|�dd��pd��t|�dd��pd��t|�dd��pd��t|�dd��pd��t|�dd��pd��g	���	��}|r||vr��q|rOt|�dd��pd������	��|kr���|rOt|�dd��pd������	��|kr��|�|����*	ddd��n#1swxYwYn8#t$r+}tdt|��d���dfcYd}~Sd}~wwxYw|�d �d!�"��td!t3|��|d#���S)$Nrrr�r�r�r��qr-rr�r�rUrVrWr2rC�
user_emailr��	user_name� r�r'r�r�r�rvr�r`�tower_certificates_failedr�r�c�L�t|�dd��pd��Sr�r�r�s rRr�z$tower_certificates.<locals>.<lambda>Er�rQTr�)r��countr,)rr�r�r�r�r�r�r�rrr�r`r�r\rhr]r�r�rYrZr�r�r�r�r�r�)r�r��
status_filter�type_filter�users_by_idr;r�r�ror_r�r7rYr��
searchablerhs                rR�tower_certificatesr�s���
�/�
�
�m�R�
0�
0�
d�C���8H�8H��RT�8U�8U�8[�Y[�4\�4\�4b�4b�4d�4d�C��?�?�7�K�7�C�;�4F�4F����0�1�1�3�6�6��G�L���S�"�%�%�+��,�,�2�2�4�4�:�:�<�<�A����(�(��2�6�6�<�"�=�=�C�C�E�E�K�K�M�M�M��g�l�&�&�v�r�2�2�8�b�9�9�?�?�A�A�G�G�I�I�K��K�������
�W�b�M�:�:�
������,�,�	%�	%�A��a�e�e�D�"�o�o�+��,�,�2�2�4�4�C��
%�#$��C� ��	%��������������
�E�)W�
�7�>�>�.�)�)�&	'��n�c�G�<�<�<�%
'���$'�$'�D�!�"�j��.�.����$�!�!�!� ��!����9��=�=�D��c�g�g�i��4�4�:��;�;�A�A�C�C�C�&�?�?�3��3�3�D�&)�D��O�),�T�X�X�g�r�-B�-B�-H�b�)I�)I�)O�)O�)Q�)Q�D��&�(+�D�H�H�V�R�,@�,@�,F�B�(G�(G�(M�(M�(O�(O�D��%�!$����D�H�H�Y��3�3�9�r�:�:��D�H�H�\�2�6�6�<�"�=�=��D�H�H�W�b�1�1�7�R�8�8��D�H�H�%8�"�=�=�C��D�D��D�H�H�[�"�5�5�;��<�<��D�H�H�Z��4�4�:��;�;��D�H�H�Y��3�3�9�r�:�:��D�H�H�\�2�6�6�<�"�=�=��D�H�H�[�"�5�5�;��<�<�
+�
"�
"��u�w�w���!�Q�j�0�0� �$�!��T�X�X�6I�2�-N�-N�-T�RT�)U�)U�)[�)[�)]�)]�)c�)c�)e�)e�iv�)v�)v� �"�!�s�4�8�8�K��+D�+D�+J��'K�'K�'Q�'Q�'S�'S�'Y�'Y�'[�'[�_j�'j�'j� ��L�L��&�&�&�&�I$'�%
'�%
'�%
'�%
'�%
'�%
'�%
'�%
'�%
'�%
'�%
'����%
'�%
'�%
'�%
'���L�W�W�W��!<��Q���P�P�Q�Q�SV�V�V�V�V�V�V�V�����W����
�J�J�A�A�4�J�P�P�P��$��U���U�K�K�L�L�Lsz�A<H�H�H�#<V%�V�&I;�:V�;
J�V�J�LV�
V%�V�V%� V�!V%�%
W�/ W�W�Wz/client/registerc�j�tjd���pi}t|�dd�������}t|�dd����������}t|�dd�������}t|�dd�������}|r|r|st
dd	i��d
fSd|vrt
ddi��d
fSt|��d
krt
ddi��d
fSt|��rt
ddi��dfSt��}tjd��}t��}|||||ddt|��||d�
}t|��t|t!|����t
d|t#|��t!|��t%|��t'��d���S)NTrr�rrCrrr��missing_fieldsrb�@�
invalid_emailrx�
weak_passwordr&r'r)rr)
r�r�rCr�rrrr*r,r)r�r�r�rgrjrn)rrr�r�r�rrr�r.r|r�r/rSr0r�r�r�r1r&r�)	r�r�rCrrr�r�rMr�s	         rR�client_registerr�Is+����4�(�(�(�.�B�D��t�x�x���#�#�$�$�*�*�,�,�D������"�%�%�&�&�,�,�.�.�4�4�6�6�E��4�8�8�J��+�+�,�,�2�2�4�4�H�
����(�B�'�'�
(�
(�
.�
.�
0�
0�F��9�u�9�H�9���!1�2�3�3�S�8�8�
�%������1�2�2�C�7�7�
�8�}�}�q������1�2�2�C�7�7��%� � �7����0�1�1�3�6�6�
�/�/�C���b�!�!�E�
�*�*�C��������!�(�+�+�����D��������[��%�%�&�&�&�����T�"�"�"�3�'�'�$�S�)�)��=�=�
����rQz
/client/loginc�p�tjd���pi}t|�dd����������}t|�dd�������}|r|st
ddi��dfSt|��}|st
dd	i��d
fSt|�dd����t|��krt
dd	i��d
fSt|�dd����}t
d|�d
d��t|��t|�dd����t|��t|��t��d���S)NTrrCrrr�r�rbr�r�r*r�r�r+F)r�r�r�r+rgrjrn)rrr�r�r�rrr.r0r1r"r�r&r�)r�rCrr�r�s     rR�client_loginr�us�����4�(�(�(�.�B�D������"�%�%�&�&�,�,�.�.�4�4�6�6�E��4�8�8�J��+�+�,�,�2�2�4�4�H��9��9���!1�2�3�3�S�8�8��e�$�$�D��7����0�1�1�3�6�6�
�4�8�8�O�R�(�(�)�)�X�h�-?�-?�?�?����0�1�1�3�6�6�

�d�h�h�t�R� � �
!�
!�C������'�2�&�&��T�"�"� $�T�X�X�.D�e�%L�%L� M� M�"�3�'�'�$�S�)�)��=�=�����rQz/client/logoutc��tj�dd��}t|��}|st	ddi��dfStjd��|d<t��|d<t|��t	d	d
i��S)Nrrr�r�r�r)r�rr�T)	rr�r�r�rr�r/rSr�)r�r�s  rR�
client_logoutr��s���
�/�
�
�m�R�
0�
0�C��c�"�"�D��7����0�1�1�3�6�6��%�b�)�)�D��M�!���D���������D�$�<� � � rQz/client/ai/advisorc��tj�dd��}t|��}|st	ddi��dfStjd���pi}t
|�dd��pd�����}|st	dd	i��d
fStst	ddi��dfSt
|�d
����}d}t||��\}}}|st	d|||d���dfSd}	tj
��}
tjdddt��itj�dd��dd|	d�gd�dd|d�gd�gd�d���}ttj
��|
z
d z��}|jd
krKt#||��t%|d!d"|j|d#||d$�%�	�	t	d$|jd&���|jfSt%|d!dd'|t(||�(��	|���}
n#t,$ri}
YnwxYw|
�d)��pd���}|s�|
�d*��pg}t/|t0��r�g}|D]�}t/|t2��rm|�d+��pgD]U}t/|t2��r>|�d,��sn(|�|�d,�����V��d�|�����}t	d|d-���S).Nrrr�r�r�Tr�prompt�missing_promptrb�openai_not_configured�r��
legal_advisorrq�r�rrmrgrpuHAgisci come un consulente legale preliminare specializzato in proprietà intellettuale, copyright, tutela delle opere digitali e prova documentale. Non presentarti come avvocato del cliente e non fingere assistenza forense definitiva. Fornisci una prima analisi pratica, strutturata, prudente e professionale in lingua italiana.�#https://api.openai.com/v1/responsesrr��OPENAI_TEXT_MODEL�gpt-4.1-mini�system�
input_text�rr��r��contentr���model�input�xr!���openaiFr��openai_error�	r2r�r�r-r�r�rr�r�r�r��r2r�r�r-r�r�rr��output_text�outputr�r��r�r��rr�r�r�rrr�r�rr�r�r�r7rhr�r	r8r�r�r��COST_OPENAI_EURrZr\rrsrr�r��r�r�r�r�r�rr�r�rm�system_instruction�t0rUr��jr�rU�parts�itr�s                   rR�client_ai_advisorr��s���
�/�
�
�m�R�
0�
0�C��c�"�"�D��7����0�1�1�3�6�6���4�(�(�(�.�B�D�
����(�B�'�'�-�2�
.�
.�
4�
4�
6�
6�F��9���!1�2�3�3�S�8�8��@���!8�9�:�:�C�?�?�

�d�h�h�t�n�n�
�
�C�	�B�%4�S�"�%=�%=�"�H�j�(����+�� �%�	
�
���

��	�	h��
����B��
�-� �"<�N�"<�"<�=��Z�^�^�$7��H�H�%�)5�?Q� R� R�S���
#�)5�v� F� F�G���	�
�
��!	�	�	�A�$

�d�i�k�k�B��$�
&�	'�	'�B��}�����C��"�"�"������=����� �
	
�
	
�
	
�
	
���A�F�C�C�D�D�a�m�S�S������
� �
��	�	�	�	��
�F�F�H�H����������������
�E�E�-� � �&�B�-�-�/�/�D��	,��e�e�H�o�o�#����c�4� � �	,��E��
8�
8���b�$�'�'�8� �f�f�Y�/�/�5�2�8�8��%�a��.�.�8�A�E�E�&�M�M�8�8�!�L�L����v���7�7�7����G�G�E�N�N�)�)�+�+�D��$��-�-�.�.�.��H(�(H7�6H7z/client/ai/defensec��tj�dd��}t|��}|st	ddi��dfStjd���pi}t
|�dd��pd�����}|st	dd	i��d
fStst	ddi��dfSt
|�d
����}d}t||��\}}}|st	d|||d���dfSd}	tj
��}
tjdddt��itj�dd��dd|	d�gd�dd|d�gd�gd�d���}ttj
��|
z
d z��}|jd
krKt#||��t%|d!d"|j|d#||d$�%�	�	t	d$|jd&���|jfSt%|d!dd'|t(||�(��	|���}
n#t,$ri}
YnwxYw|
�d)��pd���}|s�|
�d*��pg}t/|t0��r�g}|D]�}t/|t2��rm|�d+��pgD]U}t/|t2��r>|�d,��sn(|�|�d,�����V��d�|�����}t	d|d-���S).Nrrr�r�r�Trr�r�rbr�r�r��
legal_defenserqr�rpu!Agisci come un redattore legale professionale specializzato in proprietà intellettuale, copyright e tutela di opere digitali. Genera bozze formali, strutturate, credibili e professionali in lingua italiana. Non dichiarare di essere un avvocato incaricato e non inserire fatti non forniti.r�rr�r�r�r�r�r�r�r�r�r�r!r�r�Fr�r�r�r�r�r�r�r�r�r�r�r�r�s                   rR�client_ai_defenser�	s���
�/�
�
�m�R�
0�
0�C��c�"�"�D��7����0�1�1�3�6�6���4�(�(�(�.�B�D�
����(�B�'�'�-�2�
.�
.�
4�
4�
6�
6�F��9���!1�2�3�3�S�8�8��@���!8�9�:�:�C�?�?�

�d�h�h�t�n�n�
�
�C�	�B�%4�S�"�%=�%=�"�H�j�(����+�� �%�	
�
���

��	�	\��
����B��
�-� �"<�N�"<�"<�=��Z�^�^�$7��H�H�%�)5�?Q� R� R�S���
#�)5�v� F� F�G���	�
�
��!	�	�	�A�$

�d�i�k�k�B��$�
&�	'�	'�B��}�����C��"�"�"������=����� �
	
�
	
�
	
�
	
���A�F�C�C�D�D�a�m�S�S������
� �
��	�	�	�	��
�F�F�H�H����������������
�E�E�-� � �&�B�-�-�/�/�D��	,��e�e�H�o�o�#����c�4� � �	,��E��
8�
8���b�$�'�'�8� �f�f�Y�/�/�5�2�8�8��%�a��.�.�8�A�E�E�&�M�M�8�8�!�L�L����v���7�7�7����G�G�E�N�N�)�)�+�+�D��$��-�-�.�.�.r�z/client/ai/licensec��tj�dd��}t|��}|st	ddi��dfStjd���pi}t
|�dd��pd�����}|st	dd	i��d
fStst	ddi��dfSt
|�d
����}d}t||��\}}}|st	d|||d���dfSd}	tj
��}
tjdddt��itj�dd��dd|	d�gd�dd|d�gd�gd�d���}ttj
��|
z
d z��}|jd
krKt#||��t%|d!d"|j|d#||d$�%�	�	t	d$|jd&���|jfSt%|d!dd'|t(||�(��	|���}
n#t,$ri}
YnwxYw|
�d)��pd���}|s�|
�d*��pg}t/|t0��r�g}|D]�}t/|t2��rm|�d+��pgD]U}t/|t2��r>|�d,��sn(|�|�d,�����V��d�|�����}t	d|d-���S).Nrrr�r�r�Trr�r�rbr�r�r�r�rqr�rpu(Agisci come un redattore contrattuale professionale specializzato in licenze d'uso, proprietà intellettuale e tutela di opere digitali. Genera testi formali, chiari, credibili e professionali in lingua italiana. Non inventare dati fattuali non forniti e non dichiarare efficacia legale assoluta.r�rr�r�r�r�r�r�r�r�r�r�r!r�r�Fr�r�r�r�r�r�r�r�r�r�r�r�r�s                   rR�client_ai_licenser�o	s���
�/�
�
�m�R�
0�
0�C��c�"�"�D��7����0�1�1�3�6�6���4�(�(�(�.�B�D�
����(�B�'�'�-�2�
.�
.�
4�
4�
6�
6�F��9���!1�2�3�3�S�8�8��@���!8�9�:�:�C�?�?�

�d�h�h�t�n�n�
�
�C�	�B�%4�S�"�%=�%=�"�H�j�(����+�� �%�	
�
���

��	�	^��
����B��
�-� �"<�N�"<�"<�=��Z�^�^�$7��H�H�%�)5�?Q� R� R�S���
#�)5�v� F� F�G���	�
�
��!	�	�	�A�$

�d�i�k�k�B��$�
&�	'�	'�B��}�����C��"�"�"������=����� �
	
�
	
�
	
�
	
���A�F�C�C�D�D�a�m�S�S������
� �
��	�	�	�	��
�F�F�H�H����������������
�E�E�-� � �&�B�-�-�/�/�D��	,��e�e�H�o�o�#����c�4� � �	,��E��
8�
8���b�$�'�'�8� �f�f�Y�/�/�5�2�8�8��%�a��.�.�8�A�E�E�&�M�M�8�8�!�L�L����v���7�7�7����G�G�E�N�N�)�)�+�+�D��$��-�-�.�.�.r�z/client/change_passwordc��tj�dd��}t|��}|st	ddi��dfStjd���pi}t
|�dd�������}t
|�d	d�������}t|�d
d����}|st	ddi��d
fSt|��dkrt	ddi��d
fS|s\|st	ddi��d
fSt
|�dd����t|��krt	ddi��dfSt|��|d<d|d
<t��|d<t|��t	dt|��d���S)Nrrr�r�r�Tr�current_password�new_passwordr+Fr�rbrxr�r*�wrong_current_passwordr)r�r�)rr�r�r�rrr�r�r"r�r0rSr�r1)r�r�r�r�r��force_changes      rR�client_change_passwordr��	s���
�/�
�
�m�R�
0�
0�C��c�"�"�D��7����0�1�1�3�6�6���4�(�(�(�.�B�D��4�8�8�$6��;�;�<�<�B�B�D�D���t�x�x���3�3�4�4�:�:�<�<�L�����!7��?�?�@�@�L��9���!1�2�3�3�S�8�8�
�<���1������1�2�2�C�7�7��E��	=��G�%5�6�7�7��<�<��t�x�x���,�,�-�-��:J�1K�1K�K�K��G�%=�>�?�?��D�D�$�\�2�2�D���#(�D�	� �!���D�����������T�"�"�����rQz
/client/mec�`�tj�dd��}t|��}|st	ddi��dfSt|�dd����}t	dt
|��t|��t|��t��d���S)	Nrrr�r�r�r�T)r�r�rgrjrn)
rr�r�r�rr�r1r�r&r��r�r�r�s   rR�	client_mer��	s���
�/�
�
�m�R�
0�
0�C��c�"�"�D��7����0�1�1�3�6�6�

�d�h�h�t�R� � �
!�
!�C����T�"�"�"�3�'�'�$�S�)�)��=�=�����rQc�F��t�t��r�ni�d�fd�	}|dd�����}|dd�����pd}d�d�|d	d
��D����dd
�}|dd��|dd
��|dd
��|dd��|dd��|dd�����|dd��|dd��pd|dd��|dd��|dd��|||d�S)Nr�c���t��|d��pd�����d|�SrB�r�r�r�)r�r�r�s  �rR�txtz"_clean_postal_profile.<locals>.txt
s9����3�7�7�3��#�#�)�r�*�*�0�0�2�2�8�G�8�<�<rQ�	provinciard�nazione�ITrc3�BK�|]}|����|V��dSrL)�isdigit)r��chs  rRr�z(_clean_postal_profile.<locals>.<genexpr>
s/����=�=���
�
���=�"�=�=�=�=�=�=rQ�capr�ragione_sociale�nome�d�cognomerC�telefono�2�codice_fiscale� �partita_iva�dugr��via�	indirizzo�civico�comuner�)r�r�r�rCr�r�r�r�r�r�r�r�r�r�)r�)rrrFr�)r�r�r�r�r�s`    rR�_clean_postal_profiler�	
s}����C��&�&�
.�#�#�B�C�=�=�=�=�=�=���K��#�#�)�)�+�+�I��c�)�Q���%�%�'�'�/�4�G�
�'�'�=�=�s�s�5�!�}�}�=�=�=�
=�
=�b�q�b�
A�C��3�0�#�6�6���F�C� � ��3�y�#�&�&���W�c�"�"��C�
�B�'�'��#�.��3�3�9�9�;�;��s�=�"�-�-��s�5�"�~�~�&���S��c�*�*��#�h��#�#��#�h��$�$������rQz/client/profilec���tj�dd��}t|��}|st	ddi��dfSt|�di��t��r|�di��ni}t|�di��t��r|�di��ni}t	d||t|��d	���S)
Nrrr�r�r�rwrxT�r�rwrxr�)rr�r�r�rrrr1)r�r�rwrxs    rR�client_profile_getr�%
s���
�/�
�
�m�R�
0�
0�C��c�"�"�D��7����0�1�1�3�6�6�)3�D�H�H�Y��4K�4K�T�)R�)R�Z�d�h�h�y�"�%�%�%�XZ�G�*4�W�[�[��2�5N�5N�PT�*U�*U�
]�W�[�[��2�
&�
&�
&�[]�F������T�"�"�	����rQc��tj�dd��}t|��}|st	ddi��dfStjd���pi}|�d��p|�d	��p|}t
|��}t|�d
i��t��r|�d
i��ni}||d<d�	|�dd��|�d
d��g���
��}|r||d<||d
<t��|d<t|��t	d||t|��d���S)Nrrr�r�r�Trrxryrwr�r�r�r�rr�)rr�r�r�rrr�rrr�r�rSr�r1)r�r�r��
postal_rawrxrw�display_names       rR�client_profile_saver7
sw��
�/�
�
�m�R�
0�
0�C��c�"�"�D��7����0�1�1�3�6�6���4�(�(�(�.�B�D����(�#�#�I�t�x�x�0@�'A�'A�I�T�J�
"�:�
.�
.�F�)3�D�H�H�Y��4K�4K�T�)R�)R�Z�d�h�h�y�"�%�%�%�XZ�G��G�H���8�8�V�Z�Z���3�3�V�Z�Z�	�2�5N�5N�O�P�P�V�V�X�X�L��$�#��V���D��O�!���D�������������T�"�"�	����rQrc�D�tj�dd��}t|��}|st	ddi��dfSt|�d����}t	d|t
|��t|��t��d���S)	Nrrr�r�r�r�T)r�r2rgrjrn)	rr�r�r�rr�r�r&r�r�s   rR�
me_balancerY
s���
�/�
�
�m�R�
0�
0�C��c�"�"�D��7����0�1�1�3�6�6�

�d�h�h�t�n�n�
�
�C��$�3�{�3�?O�?O�[m�nq�[r�[r�@K�@M�@M�N�N�O�O�OrQz/verify/publicc��tj�dd��pd���}tj�dd��pd���}tj�dd��pd���}tj�dd��pd���}|p|p|p|}|st	ddd���d	fSd}	t
j�t���r�ttd
d���5}|D�]m}	tj|��}n#t$rY�%wxYwt|�d
d��pd�����}	t|�dd��pd�����}
t|�dd��pd�����}t|�dd��pd�����}|r4|r2||	kr*|���|
���ks��;|r||	|
||fvr|}n&|r
||	kr|}n|r
||
kr|}n|r
||kr|}n��oddd��n#1swxYwYn9#t$r,}
t	ddt|
��d���dfcYd}
~
Sd}
~
wwxYw|st	ddd���dfSt|�dd��pd�����}t|�dd��pd�����}|dkrt|��}t|�dd��pd�����}|dkr|sd}t|�dd��pd�����}|����d��su|����d��sN|����d��s'|����d ��r|�d!d"��d#}t	id$d%�d&d%�d'|�d
t|�d
d��pd������dt|�dd��pd������d(t|�d(d��pd������d)t|�d)d��pd������d*t|�d*d��pd������d+t|�d+d��pd������d,t|�d,d��pd������d-t|�d-d��pd������d.t|�d.d��pd������d/t|�d/d��pd������d0|�d0���d1|�d1���d2t%|�d2d�����d3t|�d3d��pd������id4t|�d4d��pd������d5t|�d5d��pd������d6t%|�d6d�����d7t|�d7d��pd������d8t%|�d8d��p:t|�d7d��pd�����d8k���d9t|�d9d��pd������d:t|�d:d��pd������d;t|�d;d��pd������d<t|�d<d��pd������d=t%|�d=d�����dt|�dd��pd������d>t|�d>d��pd������d?|�d@t|�d@d��pd������dAt|�dAd��pd������d|�d|��t|�dd��pd�����|�dB��t|�dCd��pd�����t|�dDd��pd�����t|�dEd��pd�����t|�dFd��pd�����t|�dGd��pd�����||rt'|��ndt|�dCd��pd�����rDt't|�dCd��pd�������ndt|�dDd��pd�����rDt't|�dDd��pd�������ndt|�dHd��pd�����dI����S)JNrGrr�r/�txidF�
missing_query�r�r�rbrUrVrWr�r�r'rv�verify_scan_failed)r�r�r�r��	not_foundr8rdr`r-r/r�rsr�r�r~rr�r�r*rr�T�verified�queryr�r�r�r�r�r0r�r1r�r�r�r�r�r�r�r�r�r�r�r�r�r�r2r�r�r�rwrtrurxryrzr�)rvrwrtrurxryrzrdrhr�r�r�)rr�r�r�rrhr]r�r�rYrZr�r\r�rr�r��rsplitr"r[)rGr�r�rr�r�r_r�r7�row_cert_id�row_hash�row_req�row_txidrhrdr`r�r�s                  rR�
verify_publicrb
s�
���L���V�R�(�(�.�B�5�5�7�7�D��|����b�)�)�/�R�6�6�8�8�G���!�!�&�"�-�-�3��:�:�<�<�I��L���V�R�(�(�.�B�5�5�7�7�D��,��,�9�,��A��E��e�o�>�>�?�?��D�D��E�]�
�7�>�>�.�)�)�	��n�c�G�<�<�<�
�����D�!�"�j��.�.����$�!�!�!� ��!����#&�c�g�g�i��&<�&<�&B��"C�"C�"I�"I�"K�"K�K�"�3�7�7�;��#;�#;�#A�r�B�B�H�H�J�J�H�!�#�'�'�,��";�";�"A�r�B�B�H�H�J�J�G�"�3�7�7�:�r�#:�#:�#@�b�A�A�G�G�I�I�H��!�9�!�g��6L�6L�QZ�Q`�Q`�Qb�Qb�fn�ft�ft�fv�fv�Qv�Qv� ���Q�;��'�8�"L�L�L� #������7�k�#9�#9� #���� ��Y�(�%:�%:� #�������� 0� 0� #�����5
�
�
�
�
�
�
�
�
�
�
����
�
�
�
���6�]�]�]��e�.B�s�ST�v�v�V�V�W�W�Y\�\�\�\�\�\�\�\�����]�����A��e�k�:�:�;�;�S�@�@��5�9�9�%7��<�<�B��C�C�I�I�K�K���E�I�I�k�6�2�2�<�f�=�=�C�C�E�E�I��L� � � ��'�'���E�I�I�&9�2�>�>�D�"�E�E�K�K�M�M���L� � �):� �%����	�	�-�r�2�2�8�b�9�9�?�?�A�A�E��{�{�}�}���f�%�%�(������)?�)?��)G�)G�(�5�;�;�=�=�Ka�Ka�bi�Kj�Kj�(�ns�ny�ny�n{�n{�oE�oE�FL�oM�oM�(����S�!�$�$�Q�'���/��d�/��D�/�	��/�	�3�u�y�y��B�/�/�5�2�6�6�<�<�>�>�	/�
	�S����;��3�3�9�r�:�:�@�@�B�B�/�	�C��	�	�*<�b� A� A� G�R�H�H�N�N�P�P�
/�	�c�%�)�)�,@�"�"E�"E�"K��L�L�R�R�T�T�/�	 ��U�Y�Y�/F��%K�%K�%Q�r�!R�!R�!X�!X�!Z�!Z�/�	�#�e�i�i�(8�"�=�=�C��D�D�J�J�L�L�/�	�#�e�i�i�(8�"�=�=�C��D�D�J�J�L�L�/�	�s�5�9�9�-B�B�#G�#G�#M�2�N�N�T�T�V�V�/�	 ��U�Y�Y�/F��%K�%K�%Q�r�!R�!R�!X�!X�!Z�!Z�/�	�c�%�)�)�,@�"�"E�"E�"K��L�L�R�R�T�T�/�	�u�y�y�)>�?�?�/�	�%�)�)�$4�5�5�/� 	�t�E�I�I�m�U�;�;�<�<�!/�"	��E�I�I�n�b�9�9�?�R�@�@�F�F�H�H�#/�/�$	!�#�e�i�i�0H�"�&M�&M�&S�QS�"T�"T�"Z�"Z�"\�"\�%/�&	�3�u�y�y�):�B�?�?�E�2�F�F�L�L�N�N�'/�(	%�d�5�9�9�5Q�SX�+Y�+Y�&Z�&Z�)/�*	��E�I�I�n�b�9�9�?�R�@�@�F�F�H�H�+/�,	�t�E�I�I�m�U�;�;�A�s�5�9�9�^�]_�C`�C`�Cf�df�?g�?g�?m�?m�?o�?o�tA�@A�B�B�-/�.	��E�I�I�n�b�9�9�?�R�@�@�F�F�H�H�//�0	�S����;��3�3�9�r�:�:�@�@�B�B�1/�2	�c�%�)�)�,@�"�"E�"E�"K��L�L�R�R�T�T�3/�4	�C��	�	�*<�b� A� A� G�R�H�H�N�N�P�P�5/�6	"�4��	�	�2K�U�(S�(S�#T�#T�7/�8	�c�%�)�)�L�"�5�5�;��<�<�B�B�D�D�9/�:	�3�u�y�y��B�/�/�5�2�6�6�<�<�>�>�;/�<	��=/�>	�#�e�i�i��"�-�-�3��4�4�:�:�<�<�?/�@	��E�I�I�n�b�9�9�?�R�@�@�F�F�H�H�A/�B	�Y�C/�D	�.�E/�/�F��	�	�*�b�1�1�7�R�8�8�>�>�@�@�!�I�I�&8�9�9���	�	�*�b�1�1�7�R�8�8�>�>�@�@� ����+>��!C�!C�!I�r�J�J�P�P�R�R�"�5�9�9�-B�B�#G�#G�#M�2�N�N�T�T�V�V��5�9�9�]�B�7�7�=�2�>�>�D�D�F�F��E�I�I�n�b�9�9�?�R�@�@�F�F�H�H�,�GW�_�1�2B�C�C�C�]_�ad�ej�en�en�oy�{}�e~�e~�fE�CE�bF�bF�bL�bL�bN�bN�V�/��E�I�I�j�"�4M�4M�4S�QS�0T�0T�0Z�0Z�0\�0\�]�]�]�TV�mp�qv�qz�qz�|O�QS�rT�rT�rZ�XZ�n[�n[�na�na�nc�nc�k�2�3�u�y�y�AT�VX�7Y�7Y�7_�]_�3`�3`�3f�3f�3h�3h�i�i�i�ik��%�)�)�L�"�5�5�;��<�<�B�B�D�D�]/�/�/�/�/�/sg�2<J8�.J,�5E
�	J,�

E�J,�E�E	J,� J8�,J0�0J8�3J0�4J8�8
K.�!K)�#K.�)K.rc
���tj�dd��pd���}|st	ddi��dfSt
j�|���t
j�t��t
j�t��t
j�t��t
j�t��g}t�fd�|D����st	ddi��dfSt
j�
���rt
j����st	dd	i��d
fSd}tj�dd��}t!��rd
}�nt"r|t"krd
}�n�t%|��}|�r�t'|�dd��pd�����}	t
j�
t(���rPt+t(dd���5}|D�]}	t-j|��}n#t0$rY�%wxYwt'|�dd��pd�����|kr�et'|�dd��pd�����t'|�dd��pd�����t'|�dd��pd�����g}	d�|	D��}	�|	vrd
}n��ddd��n#1swxYwYn8#t0$r+}
t	dt'|
��d���dfcYd}
~
Sd}
~
wwxYw|st	ddi��dfSt3�d
t
j�������S)z�
    Download file certificato/proof/manifest dal server path.
    Accesso consentito a:
    - tower session
    - admin token
    - client autenticato proprietario del file richiesto
    r]rr��missing_pathrbc3�h�K�|],}�|kp!��|tjz��V��-dSrL�r�rh�sep�r��root�reals  �rRr�zcert_file.<locals>.<genexpr>�
s>�����X�X�$�t�t�|�=�t���t�b�f�}�=�=�X�X�X�X�X�XrQ�forbidden_pathrA�file_not_foundr8FrTr�rUrVrWr2rdrtruc�P�g|]#}|�tj�|����$SrP)rhr]�realpathr�s  rRr�zcert_file.<locals>.<listcomp>	s.��(U�(U�(U��ST�(U���)9�)9�!�)<�)<�(U�(U�(UrQN�auth_scan_failedr�r�r�r���
as_attachment�
download_name)rr�r�r�rrhr]rrr�rRr�r�r��isfiler�r�r�r�r�r�rYrZr�r\r	�basename)r]�
allowed_rootsr�r�r�r�r_r�r7�	row_pathsrhrs           @rR�	cert_filer%�
s���
�L���V�R�(�(�.�B�5�5�7�7�D��7����0�1�1�3�6�6�
�7���D�!�!�D�	�����'�'�
�����%�%�
�����%�%�
�����&�&�	�M��X�X�X�X�-�X�X�X�X�X�9���!1�2�3�3�S�8�8�
�7�>�>�$���9�r�w�~�~�d�';�';�9���!1�2�3�3�S�8�8��G�
�/�
�
�m�R�
0�
0�C����V����	�V���+�+����!�#�&�&���	V��d�h�h�t�R�(�(�.�B�/�/�5�5�7�7�C�
V��7�>�>�.�1�1�&��n�c�G�D�D�D�&��$%�&�&�D�)�&*�j��&6�&6����#,�)�)�)� (��)���� #�3�7�7�9�b�#9�#9�#?�R�@�@�F�F�H�H�C�O�O� (�!$�C�G�G�,>��$C�$C�$I�r� J� J� P� P� R� R� #�C�G�G�J��$;�$;�$A�r� B� B� H� H� J� J� #�C�G�G�,?��$D�$D�$J�� K� K� Q� Q� S� S�)�I�)V�(U�i�(U�(U�(U�I�#�y�0�0�*.�� %�� 1�#&�&�&�&�&�&�&�&�&�&�&����&�&�&�&���(�
V�
V�
V��);��A���O�O�P�P�RU�U�U�U�U�U�U�U�����
V�����7����0�1�1�3�6�6��T��R�W�=M�=M�d�=S�=S�T�T�T�Tsg�<N�M5�I#�"M5�#
I0�-M5�/I0�0C9M5�)N�5M9�9N�<M9�=N�
N6� N1�+N6�1N6rc�N�tjd���pi}t|��S�NTr�rrr��r�s rR�certifyr*�(����d�+�+�+�1�r�G��G�$�$�$rQrc�N�tjd���pi}t|��Sr'r(r)s rR�
cert_debitr-r+rQz/billing/stripe/checkoutc���tstddi��dfStj�dd��}t|��}|stddi��dfStjd�	��pi}	t|�d
d��pd��}n#t$rd}YnwxYw|dkrtddi��d
fSd}t|�dd�����
��}t|�dd�����
��}	tjj
�dtpdt pd|pddgddd|�d�d|��d�|d�|d�gd|t|��d����}td|j|jd���S#t$r+}td t|��d!���dfcYd}~Sd}~wwxYw)"Nr��stripe_not_configuredr�rrr�r�Tr�
abo_amountr�invalid_abo_amountrbi�r�rC�paymentz.https://app.copyrightchain.it/?billing=successz-https://app.copyrightchain.it/?billing=cancel�card�eurzABO Coin Recharge (z ABO)zWallet recharge for user )r��description)�currency�product_data�unit_amount)�
price_data�quantity�abo_recharge)rr2r0)�mode�success_url�
cancel_urlr��payment_method_types�allow_promotion_codes�
line_items�metadata)r��checkout_urlrv�stripe_checkout_error�r��detail)�STRIPE_SECRET_KEYrrr�r�r�rr	r\r�r�r`rqrr�create�STRIPE_SUCCESS_URL�STRIPE_CANCEL_URL�urlr�)	r�r�r�r0�unit_amount_centsr�rC�sessionrhs	         rR�billing_stripe_checkoutrNsd���@���!8�9�:�:�C�?�?�
�/�
�
�m�R�
0�
0�C��c�"�"�D��7����0�1�1�3�6�6���4�(�(�(�.�B�D������,��2�2�7�a�8�8�
�
�������
�
�
������Q�����!5�6�7�7��<�<���

�d�h�h�t�R� � �
!�
!�
'�
'�
)�
)�C������"�%�%�&�&�,�,�.�.�E�R��/�)�0�0��*�^�.^�(�[�,[� �=�D�"(��"&�!&� G�j� G� G� G�'H�3�'H�'H�%�%�$5�
��'�
�
�
�'��!�*�o�o���%1�
�
��0�d�G�K�w�z�Z�Z�[�[�[���R�R�R��!8�C��F�F�K�K�L�L�c�Q�Q�Q�Q�Q�Q�Q�����R���s1�7%B�B,�+B,�5A<F2�2
G'�< G"�G'�"G'z/billing/stripe/webhookc��trtstddi��dfStj��}tj�dd��}	tj�	||t���}n8#t$r+}tdt|��d���d	fcYd}~Sd}~wwxYwi}	tj
|�d
����}n#t$ri}YnwxYwt|�dd�������}|�d��pi�d
��pi}|�di��pi}|dk�r�t|�dd�������}t|�dd�������}		t!|�dd��pd��}
n#t$rd}
YnwxYwt#d|d|d|	d|
d��	�	|�r�|
dk�r�|	�r�d}	t$j�t*��r�t-t*dd
���5}|D]]}
	tj
|
��}|�d��dkr|�d ��|	krd}n�N#t$rY�ZwxYwddd��n#1swxYwYn#t$rYnwxYw|s�t/|	|��\}}t1||��}d}d}t2|vr9t5t2||��st6}t2}nt#d!|d"|d���|
|z}t9|t;|��|z��t=d|	||
|||||t;|���#�
�
|dkr@t?t2|||	|��t=d$|	|t2||t;|���%��td&di��S)'Nr�r/r�zStripe-Signaturer)r��
sig_header�secret�invalid_webhookrErbrVrr��objectrBzcheckout.session.completedr2r�r0r3rz"[STRIPE WEBHOOK DEBUG] event_type=zuid=zpayment_id=zabo_amount=Tr\FrUrWr1�stripe_rechargerRz.[STRIPE PROMO DEBUG] WELCOM1 already used uid=zemail=)
r1rRr2r0�promo_codes�
bonus_coderS�credited_abor��
balance_after�stripe_promo_bonus)r1rRr2�
promo_coderSr�rXr�) rG�STRIPE_WEBHOOK_SECRETrr�get_datar�r�r`�Webhook�construct_eventr\r�rZr��decoder�r	rcrhr]r�r�rYr|r�rdrO�WELCOME_PROMO_BONUS_ABOr�r�r�rU)r�rP�eventrh�payload_json�
event_typerjr;r�rRr0�already_doner_r�r7rU�full_session�
session_emailrSrV�total_credits                     rR�billing_stripe_webhookrhTs���@�$9�@���!8�9�:�:�C�?�?��� � �G���$�$�%7��<�<�J�L���.�.��!�(�/�
�
����
�L�L�L��!2�c�!�f�f�E�E�F�F��K�K�K�K�K�K�K�����L�����L���z�'�.�.��"9�"9�:�:�����������������\�%�%�f�b�1�1�2�2�8�8�:�:�J�
�
�
�f�
%�
%�
+��0�0��:�:�A�r�C��7�7�:�r�"�"�(�b�D��1�1�1��$�(�(�9�b�)�)�*�*�0�0�2�2�������r�*�*�+�+�1�1�3�3�
�	��T�X�X�l�C�8�8�?�C�@�@�J�J���	�	�	��J�J�J�	����	�2�J���]�\f�hu�xB�JN�	O�	O�	O�	O��7	�:��>�>�j�>�$����w�~�~�n�5�5�	-�!�.�#��H�H�H�-�A�()�-�-��!-�*.�*�T�*:�*:�C�'*�w�w�v���:K�'K�'K�PS�PW�PW�Xd�Pe�Pe�is�Ps�Ps�7;��(-����'0�!-�!-�!-�$,�H�!-����-�-�-�-�-�-�-�-�-�-�-����-�-�-�-���!�����D�����$�'�0J�:�WZ�0[�0[�-�K��$8��s�$K�$K�M� !�I�!#�J�)�[�8�8�7�8J�C�Q^�_�_�~�(?�I�);�J�J�!�"R�TW�Ya�cp�x|�}�}�}�}�#-�	�#9�L���[��%5�%5��%D�E�E�E�$�.�#-� #�#-�$/�#-�"+�%1�'4�&1�#�&6�&6�����!�1�}�}�-�.@�#�}�V`�bk�l�l�l�(�!5�'1�$'�'9�&/�+8�*5�c�*:�*:������D�$�<� � � s��'A>�>
B3� B.�(B3�.B3�9'C!�!C0�/C0�%H�H�H�>;K2�9K&�?AK
�K&�

K�K&�K�K&�K2�&K*�*K2�-K*�.K2�2
K?�>K?z/tower/users/reset-passwordc�D�tj�dd��}t��s%tr|tkstddi��dfStjd���pi}t|�dd��pd�����}t|�d	d��pd�����}|stdd
i��dfS|stddi��dfSt|��d
krtddi��dfSttdgi��}|�dg��}d}|D]A}t|�dd��pd�����|kr|}n�B|stddi��dfSt|��|d<d|d<t��|d<tt|��	tj�t$d��}t��|dddd�}	t'|dd���5}
|
�t+j|	d���dz��ddd��n#1swxYwYn#t.$rYnwxYwtd|dd ���S)!Nrrr�r�r�Trr2r�r6rb�missing_new_passwordrxr�r�r�r7r8r*r+rztower_password_log.jsonl�reset_password�tower)r0r2�actionr+�actorrnrVrWFrorp)r�r2r+)rr�r�r�r�rrr�r�r�r`r�r0rSrlrhr]r��DATA_DIRrYrqrZrrr\)r�r�r�r�r;r�r�r��pw_logr7r_s           rR�!tower_users_reset_password_hyphenrq�s#��
�/�
�
�m�R�
0�
0�C��?�?�7�K�7�C�;�4F�4F����0�1�1�3�6�6���4�(�(�(�.�B�D�

�d�h�h�y�"�%�%�+��
,�
,�
2�
2�
4�
4�C��t�x�x���3�3�9�r�:�:�@�@�B�B�L��:���!2�3�4�4�c�9�9��?���!7�8�9�9�3�>�>�
�<���1������1�2�2�C�7�7��J��"�
�6�6�J��N�N�7�B�'�'�E��E�
�����q�u�u�T�2���$�"�%�%�+�+�-�-��4�4��E��E�5��9���!1�2�3�3�S�8�8�%�l�3�3�E�/��$(�E�
 �!�"�*�*�E�,���z�:�&�&�&�
�����h�(B�C�C���*�*��&�$(��
�
���&�#��
0�
0�
0�	@�A�
�G�G�D�J�s��7�7�7�$�>�?�?�?�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@����	@�	@�	@�	@����
�
�
���
������� $�����s7�/AI?�:-I3�'I?�3I7�7I?�:I7�;I?�?
J�Jz/tower/users/creditc��tj�dd��}t��s%tr|tkstddi��dfStjd���pi}t|�dd��pd�����}|�d	d��}t|�d
d��pd�����}|stddi��dfS	t|��}n##t$rtdd
i��dfcYSwxYw|dkrtddi��dfSttdgi��}|�dg��}d}|D]A}t|�dd��pd�����|kr|}n�B|stddi��dfStt|��pd��}	t||��tt|��pd��}
	tj�t$d��}t'��|||	|
|dd�}t)|dd���5}
|
�t-j|d���dz��ddd��n#1swxYwYn#t$rYnwxYwtd|||	|
d���S)Nrrr�r�r�Trr2r��noter6rbrar�zero_amountr�r�r7r8ztower_credit_log.jsonlrl)r0r2r��balance_beforerXrsrnrnrVrWFrorp)r�r2r�rurX)rr�r�r�r�rrr�r�r�r\r`r�r�r�rhr]r�rorSrYrqrZrr)r�r�r�r�rsr;r�r�r��before�after�
credit_logr7r_s              rR�tower_users_creditry�sn��
�/�
�
�m�R�
0�
0�C��?�?�7�K�7�C�;�4F�4F����0�1�1�3�6�6���4�(�(�(�.�B�D�

�d�h�h�y�"�%�%�+��
,�
,�
2�
2�
4�
4�C�
�X�X�h��
%�
%�F��t�x�x���#�#�)�r�*�*�0�0�2�2�D��:���!2�3�4�4�c�9�9�9��v�������9�9�9���!1�2�3�3�S�8�8�8�8�9������{�{����/�0�0�#�5�5��J��"�
�6�6�J��N�N�7�B�'�'�E��E�
�����q�u�u�T�2���$�"�%�%�+�+�-�-��4�4��E��E�5��9���!1�2�3�3�S�8�8�
�;�s�#�#�(�q�
)�
)�F���V�����+�c�"�"�'�a�(�(�E�
��W�\�\�(�,D�E�E�
��*�*���$�"���
�
���*�c�G�
4�
4�
4�	@��
�G�G�D�J�s��7�7�7�$�>�?�?�?�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@����	@�	@�	@�	@����
�
�
���
�������� ������sI�D�D5�4D5�&A
J8�3-J,� J8�,J0�0J8�3J0�4J8�8
K�Kc�Z�t|pd�����}t|pd��������}t��t	t
dgi��}|�dg��D]�}|r?t|�dd��pd�����|kr|cS|rQt|�dd��pd��������|kr|cS��dS)Nrr�r�rC)r�r�rr�r`r�r�)r2rCr�r�s    rR�_admin_user_by_uid_or_emailr{,s���'�-�R� � �&�&�(�(�G�������"�"�$�$�*�*�,�,�E������j�7�B�-�0�0�D�
�X�X�g�r�
"�
"�����	�s�1�5�5��r�?�?�0�b�1�1�7�7�9�9�W�D�D��H�H�H��	�S����w��+�+�1�r�2�2�8�8�:�:�@�@�B�B�e�K�K��H�H�H���4rQz/admin/agency/plansc	��tt��stddd���dfSt��t	t
dgi���dg��}d�|D��}t��}|�di��pi}g}|���D]�\}}t|t��s�|�t|��i��}t|��}|�
t|��|�dd	��|�d
d	��t|��d�|�����|�d��
��td|t!|��d���S)NFr�rr�r�c�V�i|]&}t|�dd����|��'S)r�rr�)r�r�s  rR�
<dictcomp>z&admin_agency_plans.<locals>.<dictcomp>?s.��:�:�:�q�3�q�u�u�T�2���'�'��:�:�:rQr�rCrr�)r2rCr�rgc��|�d��t|�d��p|�d����fS)NrrCr2)r�r�r�s rRr�z$admin_agency_plans.<locals>.<lambda>Qs;�����h���/��Q�U�U�7�^�^�5W�q�u�u�Y�GW�GW�1X�1X�Y�rQ)r�T)r�r�r�)r�rrr�r`r�r�rrorrr�r&r�r�r�r�)	r�r�r�r�rUr�rr�r�s	         rR�admin_agency_plansr�8s����w�'�'�D��e�n�=�=�>�>��C�C������z�G�R�=�1�1�5�5�g�r�B�B�E�:�:�E�:�:�:�K����D��H�H�W�b�!�!�'�R�E�
�C��[�[�]�]���	��T��$��%�%�	���O�O�C��H�H�b�)�)��$�S�)�)���
�
��3�x�x��U�U�7�B�'�'��E�E�&�"�%�%�&�s�+�+�	
�
�
�
�	�	�	�	��H�H�Y�Y�H�Z�Z�Z��$��s�3�x�x�@�@�A�A�ArQz/admin/agency/planc�R�tt��stddd���dfStjd���pi}t	|�dd��|�d	d����}|stdd
d���dfSt
|�dd�������}|�d
d��}|�dd��}|�dd��}t|�dd����}tdt|d����}t��}|�di��}t|�|i��t��r|�|i��ni}	|rd}
nR|�2tdt|	�d��d����}
ntdt|d����}
|dkrt|
|��n|
}
i|	�t|��t
|�d��p|	�d��pd��||
t
|�d|	�dd����pd��t
|�d|	�dd����pd��t!��d��}|||<t#|��	t%t&t!��d||�d	d��|d||
|dd�	��n#t($rYnwxYwtd||�d	d��|�dd��t+|��t-|��d���S)NFr�rr�Trr2rrCr7r8r�rr�rr�
reset_usedrr�rrrr)rrrrrrr�agency_plan_updater?)	r0r1r2rCrrrr�rnr�)r�r2rCr�rgrj)r�rrrr{r�r�r�r"r!rrr�rrrLrSrrsr6r\r�r&)r:r�r�r#r$rr�r�r�r3rrs            rR�admin_agency_plan_saver�Ts����w�'�'�D��e�n�=�=�>�>��C�C���4�(�(�(�.�B�D�&�t�x�x�	�2�'>�'>�����RT�@U�@U�V�V�D��F��e�.>�?�?�@�@�#�E�E�

�d�h�h�t�R� � �
!�
!�
'�
'�
)�
)�C��h�h�(�"�-�-�G��8�8�N�D�)�)�D�
�X�X�h��
%�
%�F��d�h�h�|�U�3�3�4�4�J��!�[��"�-�-�.�.�G����D��O�O�G�R�(�(�E�$.�u�y�y��b�/A�/A�4�$H�$H�P�e�i�i��R� � � �b�G��4����	
���1�k�'�+�+�n�*E�*E�q�I�I�J�J����1�k�$��2�2�3�3��18�A���3�|�W�-�-�-�<�L�	�
�	��v�,�,�����+�.�.�`�'�+�+�k�2J�2J�`�N`�a�a�"�$��D�H�H�^�W�[�[��QS�5T�5T�U�U�[�Y[�\�\��T�X�X�g�w�{�{�7�B�'?�'?�@�@�F�B�G�G��j�j�	�	�	�D��E�#�J��t����

��&��*�*�(���X�X�g�r�*�*��8�n�&�(�$��
)
�
)
�
	�
	�
	�
	���
�
�
���
����������'�2�&�&������$�$�"�3�'�'�$�S�)�)�
����s�;AM�
M�
Mz/admin/agency/plan/resetc�\�tt��stddd���dfStjd���pi}t	|�dd��|�d	d����}|stdd
d���dfSt
|�dd�������}t��}|�	d
i��}t|�|i��t��r|�|i��ni}|�t|�dd����t
|�dd��pd��tdt|�d��d����dt!��d���|||<t#|��	t%t&t!��d|dd���n#t($rYnwxYwtd|t+|��d���S)NFr�rr�Trr2rrCr7r8r�r�rrrrrr�r.�agency_monthly_resetr?)r0r1r2rn)r�r2rj)r�rrrr{r�r�r�rr�rrr�r"r!rrSrrsr6r\r&)r:r�r�r�r�rs      rR�admin_agency_plan_resetr��s ���w�'�'�D��e�n�=�=�>�>��C�C���4�(�(�(�.�B�D�&�t�x�x�	�2�'>�'>�����RT�@U�@U�V�V�D��F��e�.>�?�?�@�@�#�E�E�

�d�h�h�t�R� � �
!�
!�
'�
'�
)�
)�C����D��O�O�G�R�(�(�E�!+�E�I�I�c�2�,>�,>��!E�!E�M�5�9�9�S�"����2�D��K�K��t�x�x��$�/�/�0�0�����+�/A�B�B�X�FX�Y�Y��q�+�d�h�h�7H�.I�.I�2�"N�"N�O�O���j�j�������E�#�J��t����
��&�x�z�z�CY�fi�t{�(|�(|�}�}�}�}���
�
�
���
�����$�3�:L�S�:Q�:Q�R�R�S�S�Ss�&G>�>
H�
Hz#/tower/users/<user_id>/certificatesc�l�tj�dd��}t��s%tr|tkstddi��dfSt
|pd�����}|stddi��dfSttdgi��}|�dg��}d}|D]?}t
|�d	d�������|kr|}n�@|stdd
i��dfSg}	tj�t���r0ttdd
���5}|D]�}	|	���}	|	s�	tj|	��}
n#t"$rY�;wxYwt
|
�dd��pd�����}||kr�}t
|
�dd��pd�����}|dkr!	t%|
��}
n#t"$rYnwxYw|�t)|
������	ddd��n#1swxYwY|�d�d���n#t"$rg}YnwxYwtd|t-|��|d���S)Nrrr�r�r�r6rbr�r�r7r8rUrVrWr2r`r-r/c�x�t|�dd��p|�dd��pd��S)Nr�rr0r�)rUs rRr�z)tower_user_certificates.<locals>.<lambda>�s3���Q�U�U�>�2�%>�%>�%W�!�%�%��b�/�/�%W�UW�!X�!X�rQTr�)r�r2r�r,)rr�r�r�r�rr�r�r`r�rhr]r�r�rYrZr�r\r�r�r�r�r�)
r2r�r�r;r�r<r��certsr_r�r7�row_uidr`s
             rR�tower_user_certificatesr��sY��
�/�
�
�m�R�
0�
0�C��?�?�7�K�7�C�;�4F�4F����0�1�1�3�6�6�

�g�m��
�
�
"�
"�
$�
$�C��:���!2�3�4�4�c�9�9��J��"�
�6�6�J��N�N�7�B�'�'�E�
�F�
�����q�u�u�T�2�����%�%�'�'�3�.�.��F��E�/��9���!1�2�3�3�S�8�8��E��
�7�>�>�.�)�)�	E��n�c�G�<�<�<�
E���E�E�D��:�:�<�<�D��!� �!�"�j��.�.����$�!�!�!� ��!����"�#�'�'�)�R�"8�"8�">�B�?�?�E�E�G�G�G��#�~�~� � #�C�G�G�K��$@�$@�$J�F� K� K� Q� Q� S� S�I� �L�0�0�!�"2�3�"7�"7�C�C��(�!�!�!� �D�!�����L�L�!>�s�!C�!C�D�D�D�D�)E�
E�
E�
E�
E�
E�
E�
E�
E�
E�
E�
E����
E�
E�
E�
E�.	�
�
�X�X�bf�
�g�g�g�g������������������U����	����s�<J�I�.F�I�
F�
I�F�A>I�H�I�
H,�)I�+H,�,&I�J�I#�#J�&I#�'J�J�Jz/tower/certificates/filec�H��tj�dd��p@ttj�dd��pd�����}t
��s%tr|tkstddi��dfSttj�dd��pd�����}|stddi��d	fStj
�|���tj
�t��tj
�t��tj
�t��g}t�fd
�|D����stddi��dfStj
����rtj
����stdd
i��dfSt%�dtj
�������S)Nrrr�r�r�r�r]rrbc3�h�K�|],}��|tjz��p�|kV��-dSrLrrs  �rRr�z)tower_certificate_file.<locals>.<genexpr>
s>�����X�X�$�t���t�b�f�}�-�-�=����X�X�X�X�X�XrQrrArr8Fr)rr�r�r�r�r�r�r�rrhr]rrr�rRr�r�r!r	r")r�r�r#rs   @rR�tower_certificate_filer��s����
�/�
�
�m�R�
0�
0�
d�C���8H�8H��RT�8U�8U�8[�Y[�4\�4\�4b�4b�4d�4d�C��?�?�7�K�7�C�;�4F�4F����0�1�1�3�6�6�

�g�l���v�r�*�*�0�b�
1�
1�
7�
7�
9�
9�C��7����0�1�1�3�6�6�
�7���C� � �D�
�����'�'�
�����%�%�
�����%�%��M��X�X�X�X�-�X�X�X�X�X�9���!1�2�3�3�S�8�8�
�7�>�>�$���9�r�w�~�~�d�';�';�9���!1�2�3�3�S�8�8��T��b�g�>N�>N�t�>T�>T�U�U�U�UrQz/tower/usersc�:�tj�dd��}t��s%tr|tkstddi��dfSt
tdgi��}|�dg��}t|t��sg}i}	tj�t��r�ttdd�	��5}|D]�}|���}|s�	t!j|��}n#t$$rY�;wxYwt'|�d
d��pd�����}|s�y|�|d��dz||<��	ddd��n#1swxYwYn#t$$ri}YnwxYwg}|D�]E}	t'|	�d
d��pd�����}|�|t'|	�dd��pd�����t'|	�dd��pd�����t'|	�dd��pd�����t'|	�dd��pd�����t'|	�dd��pd�����t+|	�dd��pd��t-|	�dd����t'|	�dd��pd�����t'|	�dd��pd�����|rt/|��ndt+|�|d����d�����G|�d�d���tdt3|��|d���S)Nrrr�r�r�r�rUrVrWr2rr*r�rCr�r�rrrrr+Fr,r)r�rCr�r�rrrr+r,rrg�
cert_countc�Z�|�dd��|�dd��fS)Nr,rr�)r�r�s rRr�ztower_users.<locals>.<lambda>?
s%��A�E�E�,��3�3�Q�U�U�4��_�_�E�rQTr�)r�r�r�)rr�r�r�r�rr`r�rrsrhr]r�r�rYr�rZr�r\r�r�r	r"r�r�r�)
r�r�r��cert_countsr_r�r7r�rUr�s
          rR�tower_usersr�
s5��
�/�
�
�m�R�
0�
0�C��?�?�7�K�7�C�;�4F�4F����0�1�1�3�6�6��j�7�B�-�0�0�D��H�H�W�b�!�!�E��e�T�"�"�����K��
�7�>�>�.�)�)�
	C��n�c�G�<�<�<�
C���C�C�D��:�:�<�<�D��!� �!�"�j��.�.����$�!�!�!� ��!�����c�g�g�i��4�4�:��;�;�A�A�C�C�C��!� �'2���s�A�'>�'>��'B�K��$�$�C�
C�
C�
C�
C�
C�
C�
C�
C�
C�
C�
C����
C�
C�
C�
C���������������
�C�
�����!�%�%��b�/�/�'�R�(�(�.�.�0�0���
�
������w��+�+�1�r�2�2�8�8�:�:�����f�b�)�)�/�R�0�0�6�6�8�8�����w��+�+�1�r�2�2�8�8�:�:��!�%�%��"�-�-�3��4�4�:�:�<�<�����f�f�-�-�7��8�8�>�>�@�@� #�A�E�E�*<�a�$@�$@�$E�A� F� F�$(����/E�u�)M�)M�$N�$N��a�e�e�L�"�5�5�;��<�<�B�B�D�D��a�e�e�L�"�5�5�;��<�<�B�B�D�D�/2�9�;�s�+�+�+���k�o�o�c�1�5�5�6�6�

�

�
	�
	�
	�
	��H�H�E�E�t�H�T�T�T��$��S���C�@�@�A�A�As[�;F�E<�3D�E<�
D�E<�D�AE<�0F�<F�F�F�F�F�Frc��tjd���pi}tj�dd��}t	|��}|stddi��dfSt
|�dd�������}|stdd	i��d
fSt
|�dd����������}t
|�d
����}t||��\}}}|std|||d���dfStj
��}	tjdddt��iddd|d�gd�gd�d���}
ttj
��|	z
dz��}|
jd
krKt!||��t#|dd|
j|d||d �!�	�	td |
jd"���|
jfSt#|ddd#|t&||�$��	|
���}n#t*$ri}YnwxYw|�d%��pd���}
|
s�|�d&��pg}t-|t.��r�g}|D]�}t-|t0��rm|�d'��pgD]U}t-|t0��r>|�d(��sn(|�|�d(�����V��d�|�����}
td|
d)���S)*NTrrrr�r�r�r�r�rbrr�r�rqr�rpr�rr�r�r�r�r�r�r�r�r!r�r�Fr�r�r�r�r�r�r�r�r�r�r�)rrr�r�r�rr�r�rr�r�r�r7rr	r8r�r�r�r�rZr\rrsrr�r�)r�r�r�r�rr�r�r�rmr�rUr�r�r�rUr�r�r�s                  rR�ai_textr�C
s�����d�+�+�+�1�r�G�
�/�
�
�m�R�
0�
0�C��c�"�"�D��7����0�1�1�3�6�6�
����X�r�*�*�
+�
+�
1�
1�
3�
3�F��9���!1�2�3�3�S�8�8�	�W�[�[��y�
)�
)�	*�	*�	0�	0�	2�	2�	8�	8�	:�	:�B�

�d�h�h�t�n�n�
�
�C�%4�S�"�%=�%=�"�H�j�(��z��!7�r�x�hr�s�s�t�t�vy�y�y�	
����B��
�-� �"<�N�"<�"<�=�%�&�Wc�ms�Nt�Nt�Mu�1v�1v�0w�
x�
x��		�	�	�A�

�d�i�k�k�B��$�
&�	'�	'�B��}�����C��"�"�"��S�8��a�m�XZ�eh�mo�{C�KY�	Z�	Z�	Z�	Z���A�F�C�C�D�D�a�m�S�S���x�D���Ve�jl�w�A�A�A�A��
�F�F�H�H����������������
�E�E�-� � �&�B�-�-�/�/�D��	,��e�e�H�o�o�#����c�4� � �	,��E��
8�
8���b�$�'�'�8� �f�f�Y�/�/�5�2�8�8��%�a��.�.�8�A�E�E�&�M�M�8�8�!�L�L����v���7�7�7����G�G�E�N�N�)�)�+�+�D��$��-�-�.�.�.s�H)�)H8�7H8)�Pathr
c�6�i}	td��������D]t}|���}|r|�d��sd|vr�2|�dd��\}}|���||���<�un#t$rYnwxYwt|�dd��pd������	��}|dvr�t|�dd	��pd	�����}t|�d
d	��pd	�����}|r||d<|r|�
d��|d
<|S)Nr��#r�r*�OPENAPI_POSTAL_ENVr:)�
production�prod�live�OPENAPI_POSTAL_PROD_TOKENr�OPENAPI_POSTAL_PROD_BASE_URL�OPENAPI_POSTAL_TOKENr#�OPENAPI_POSTAL_BASE_URL)�_postal_Path�	read_text�
splitlinesr�r�r�r\r�r�r�rstrip)r�r�rrrs�
postal_env�
prod_token�	prod_bases       rR�_postal_envr��
s���
�D�
� �!;�<�<�F�F�H�H�S�S�U�U�	(�	(�D��:�:�<�<�D��
�4�?�?�3�/�/�
�3�d�?�?���:�:�c�1�%�%�D�A�q��g�g�i�i�D������O�O�	(���
�
�
���
�����T�X�X�2�I�>�>�K�)�L�L�R�R�T�T�Z�Z�\�\�J��3�3�3�����"=�r�B�B�H�b�I�I�O�O�Q�Q�
�����!?��D�D�J��K�K�Q�Q�S�S�	��	6�+5�D�'�(��	D�.7�.>�.>�s�.C�.C�D�*�+��Ks�B(B-�-
B:�9B:z/api/ai/postal/pricingr)rc�J�t��}|�dd��}|�dd���d��}|stddd���d	fSt	j|d
zd|zdd
d�d���}	t	j|d���5}|����dd��}|�	��}ddd��n#1swxYwYn~#tj$r9}|����dd��}|j}Yd}~n;d}~wt$r+}tdt|��d���d	fcYd}~Sd}~wwxYw	tj|��}n-#t$r tdd|dd�d���|fcYSwxYwg}	|�dg��pgD�]}
|
�d��pigd}t#|�d��pd��}t#|�d��pd��}
t#|�d��pd��}|	�|
�d��|
�d��|
�d ��|
�d!��t'||
z|zd"��d#�����
t|�d$��|�d%��|�d&��|	d'���|fS)(Nr�rr��"https://test.ws.ufficiopostale.comr#FzOPENAPI_POSTAL_TOKEN missing�r$r�r�z	/pricing/r�rr�rrr r�r��method�(r�rVri�Risposta non JSONr��r$r�r�r��tariffer�tariffa_postale�stampa�imbustamento�prodotto�descrizione�attivo�accetta_allegatird)r�r�r�r��costo_1_paginar$r+r�)r$r+r��services)r�r�r��_postal_jsonify�_postal_request�Request�urlopen�readr_�getcode�
_postal_error�	HTTPErrorrGr\r��_postal_jsonr�r�r��round)r�r�r-r�rUr�r-rhr�r�rL�first�postaler�r�s               rR�ccp_postal_pricingr��
s���
�-�-�C��G�G�*�B�/�/�E��7�7�,�.R�S�S�Z�Z�[^�_�_�D��a��5�;Y�Z�Z�[�[�]`�`�`�
�
!��{��&��.�(�$�
�
�
����C�I�
�
$�S�"�
5�
5�
5�	!���&�&�(�(�/�/�'�9�5�5�C��Y�Y�[�[�F�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!����	!�	!�	!�	!����"�����f�f�h�h�o�o�g�y�1�1���������������I�I�I��5�3�q�6�6�B�B�C�C�S�H�H�H�H�H�H�H�����I����l��!�#�&�&�����l�l�l��5�;N�WZ�[`�\`�[`�Wa�b�b�c�c�ek�k�k�k�k�l�����H������$�$�*��������)�$�$�,���a�0����	�	�"3�4�4�9��:�:���u�y�y��*�*�/�a�0�0���U�Y�Y�~�6�6�;�!�<�<���������,�,��8�8�M�2�2��h�h�x�(�(� $���);� <� <�#�G�f�$4�|�$C�Q�G�G�
�
�	�	�	�	���8�8�I�&�&��8�8�I�&�&����'�"�"��	����
	��s`�C1�=C%�C1�%C)�)C1�,C)�-C1�1E,�/D4�4
E,� E'�!E,�'E,�0F�'F/�.F/)rc���t��}|�dd��}tj�dd��}t	|��otj||��S)Nr�rr�)r�r��_postal_draft_request_flaskr�r"�_postal_draft_hmac�compare_digest)r�r��receiveds   rR�_postal_admin_okr��
sW��
�-�-�C��w�w�-�r�2�2�H�*�2�6�6�7H�"�M�M�H���>�>�S�0�?��(�S�S�SrQz/api/ai/postal/smart/draftrc	���t��stddd���dfSt��}|�dd��}|�dd���d	��}|�d
d��}tjd�
��pi}|�di��d|dd<tj	|d����
d��}tj|dz|d|zdddd�d���}	tj
|d���5}|����dd��}|���}	ddd��n#1swxYwYn~#t"j$r9}
|
����dd��}|
j}	Yd}
~
n;d}
~
wt($r+}
tdt+|
��d���dfcYd}
~
Sd}
~
wwxYw	tj|��}n#t($rdd|dd�d�}YnwxYw	t/|�d d!��pd"��}n#t($rd"}YnwxYw	d}
t1|t2��r|�d#��nd}t1|t4��r
|r|d$n|}t1|t2��r?|�d%��pi�d&��pi�d'��}
n#t($rd}
YnwxYw	t7|��}|�dd�(��t;t=j����d)|	|�d*��|d+�}|d,z� d-d�.��5}|�!tj	|d���d/z��ddd��n#1swxYwYn#t($rYnwxYwt|��|	fS)0NFr�r�r�r�rr�r�r#�CCP_POSTAL_DATA_DIR�/opt/ccp-ai-gateway/data/postalTr�opzioni�autoconfirmrorV�/raccomandate_smart/r�rr�rrrr r�r�r�r��-r�rir�r���r��!CCP_POSTAL_SMART_PUBLIC_PRICE_EUR�9.90g������#@r�rrn�totale�importo_totale��parentsrJ�raccomandata_smart_draftr$)r0r1r-r$�responsezpostal_smart_drafts.jsonlrnrWrp)"r�r�r�r�r�r�rr�r�rrr�r�r�r�r�r_r�r�r�rGr\r�r�r�rrrs�_postal_draft_Path�mkdirr	�_postal_draft_timer�rYrq)r�r�r-�data_dirr:r�r�rUr�r-rhr��
service_price�
provider_cost�data_obj�	first_obj�d�logr_s                   rR�ccp_postal_smart_draftr��
s������Q��5�>�J�J�K�K�S�P�P�
�-�-�C��G�G�*�B�/�/�E��7�7�,�.R�S�S�Z�Z�[^�_�_�D��w�w�,�.O�P�P�H�&�/�t�<�<�<�B��D��O�O�I�r�"�"�"�%*�D��O�M�"�� ��E�:�:�:�A�A�'�J�J�G�
�
!��%�%�
�&��.�(�.�$�	
�
��
�
�
�C�I�
�
$�S�"�
5�
5�
5�	!���&�&�(�(�/�/�'�9�5�5�C��Y�Y�[�[�F�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!����	!�	!�	!�	!����"�����f�f�h�h�o�o�g�y�1�1���������������I�I�I��5�3�q�6�6�B�B�C�C�S�H�H�H�H�H�H�H�����I����W��%�c�*�*�����W�W�W�$�/B�3�u�PT�u�:�V�V����W������c�g�g�&I�6�R�R�Z�VZ�[�[�
�
�������
�
�
�������
�+5�h��+E�+E�O�8�<�<��'�'�'�4��#-�h��#=�#=�X�(�X�H�Q�K�K�PX�	��i��&�&�	k�(�}�}�Y�7�7�=�2�B�B�8�L�L�R�PR�W�W�Xh�i�i�M��������
�
�
�����

��x�(�(��	����t��,�,�,��(�-�/�/�0�0�.���|�|�I�.�.� �
�
���-�-�
3�
3�C�'�
3�
J�
J�	H�a�
�G�G�L�&�s��?�?�?�$�F�G�G�G�	H�	H�	H�	H�	H�	H�	H�	H�	H�	H�	H����	H�	H�	H�	H����
�
�
���
�����8�$�$�f�,�,s��E6�!=E*�E6�*E.�.E6�1E.�2E6�6G1�/F9�9
G1� G,�&G1�,G1�5H
�
H%�$H%�)%I�I�I�"B#L�L�L�A9O�-O�?O�O�O�O�O�
O$�#O$z(/api/ai/postal/smart/confirm/<postal_id>�PATCHc	���t��stddd���dfSt��}|�dd�����}|dkrtdddd	���d
fStjd���pi}|�d
��dkrtdddd���dfS|�dd��}|�dd���d��}tj	ddid����
d��}tj|dz|z|d|zdddd�d� ��}	tj
|d!�"��5}|����dd#��}	|���}
ddd��n#1swxYwYn~#t"j$r9}|����dd#��}	|j}
Yd}~n;d}~wt($r+}tdt+|��d���d$fcYd}~Sd}~wwxYw	tj|	��}n#t($rdd%|	dd&�d'�}YnwxYwt|��|
fS)(NFr�r�r�r�r:�production_blockedu@Conferma bloccata: questo endpoint è abilitato solo in sandbox.�r$r�r+rATr�confirm_phrase�CONFIRM_SANDBOX_POSTAL_SEND�missing_confirm_phrase)r$r��requiredrbr�rr�r�r#r�rorVr�r�rrr�r�r�r�r�rir�r�r�r�)r�r�r�r�rr�rr�r�rrr�r�r�r�r�r_r�r�r�rGr\r�r�)
�	postal_idr�r�r:r�r-r�r�rUr�r-rhr�s
             rR�ccp_postal_smart_confirmr�4s6�����Q��5�>�J�J�K�K�S�P�P�
�-�-�C����-�y�9�9�?�?�A�A�J��Y�����)�Y� 
� 
���
�	�	�'�/�t�<�<�<�B��D��x�x� �!�!�%B�B�B���-�5� 
� 
���
�	�	�
�G�G�*�B�/�/�E��7�7�,�.R�S�S�Z�Z�[^�_�_�D�� �+�t�!4�5�I�I�I�P�P�QX�Y�Y�G�
�
!��%�%�	�1�
�&��.�(�.�$�	
�
��
�
�
�C�I�
�
$�S�"�
5�
5�
5�	!���&�&�(�(�/�/�'�9�5�5�C��Y�Y�[�[�F�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!����	!�	!�	!�	!����"�����f�f�h�h�o�o�g�y�1�1���������������I�I�I��5�3�q�6�6�B�B�C�C�S�H�H�H�H�H�H�H�����I����W��%�c�*�*�����W�W�W�$�/B�3�u�PT�u�:�V�V����W�����8�$�$�f�,�,s`�
F5� =F)�F5�)F-�-F5�0F-�1F5�5H0�/G8�8
H0� H+�%H0�+H0�4I	�	I$�#I$z'/api/ai/postal/smart/detail/<postal_id>c��t��stddd���dfSt��}|�dd��}|�dd���d	��}tj|d
z|zd|zdd
d�d���}	tj|d���5}|����	dd��}|�
��}ddd��n#1swxYwYn~#tj$r9}|����	dd��}|j
}Yd}~n;d}~wt$r+}tdt|��d���dfcYd}~Sd}~wwxYw	t!j|��}	n#t$rdd|dd�d�}	YnwxYwt|	��|fS)NFr�r�r�r�rr�r�r#r�r�rrr�rr�r�r�rVrir�r�r�r�)r�r�r�r�r�r�r�r�r�r_r�r�r�rGr\r�r�r�)
r�r�r�r-r�rUr�r-rhr�s
          rR�ccp_postal_smart_detailr�ssI�����Q��5�>�J�J�K�K�S�P�P�
�-�-�C��G�G�*�B�/�/�E��7�7�,�.R�S�S�Z�Z�[^�_�_�D�
�
!��%�%�	�1�&��.�(�$�
�
�
����C�I�
�
$�S�"�
5�
5�
5�	!���&�&�(�(�/�/�'�9�5�5�C��Y�Y�[�[�F�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!����	!�	!�	!�	!����"�����f�f�h�h�o�o�g�y�1�1���������������I�I�I��5�3�q�6�6�B�B�C�C�S�H�H�H�H�H�H�H�����I����W��%�c�*�*�����W�W�W�$�/B�3�u�PT�u�:�V�V����W�����8�$�$�f�,�,s`�D�+=C4�(D�4C8�8D�;C8�<D�E;�/E�
E;� E6�0E;�6E;�?F�F/�.F/z/admin/postal/smart/draftsc���tt��}|stddd���dfS	t��}|�dd��}t|��}|dz}g}|����r|�d�	�����D�]U}|�	��}|s�	tj|��}t|�d
��t��r|�d
��ni}t|t��r|�d��ni}	t|	t��r|	r|	dni}	|�d
��|�d��|�d��|�d��p+t|	t��r|	�d��nd|�d��p+t|	t��r|	�d��nd|�d��|�d��|�d��|�d��|�d��|�d��|�d��|�d��|�d
��|d�}
|�|
����F#t $rY��SwxYwt#|d�d���dd �}td|t%|��d!���S#t $r+}tdt'|��d���d"fcYd}~Sd}~wwxYw)#NFr�rr�r�r�� postal_client_smart_drafts.jsonlrVrWr�r�rr0r2r�r�r�r�stater��canceled�admin_canceled�canceled_atr$�provider_cost_eur�public_price_eur�service_mode)r0r2r�r�r�r�r�r�r�r$r�rrr,r�c�J�t|�d��pd��S�Nr0r�r	r�r�s rRr�z+admin_postal_smart_drafts.<locals>.<lambda>����C����d���0@�q�,A�,A�rQTr�r�)r��draftsr�r�)r�rrr�r�r�r�r�r�r�r�r�rrrsr�r\rur�r�)�
admin_payloadr�r�r�r_ror�r7r�r�rLrhs            rR�admin_postal_smart_draftsr�sP��'��0�0�M��D��e�n�=�=�>�>��C�C�+<��m�m���7�7�0�2S�T�T���x�(�(��
�2�2�����8�8�:�:�	����W��5�5�@�@�B�B�
�
���z�z�|�|������&�,�T�2�2�C�6@�����AT�AT�VZ�6[�6[�c�s�w�w�z�2�2�2�ac�H�3=�h��3M�3M�U�8�<�<��/�/�/�SU�D�!�$��-�-�7�*.�6�t�A�w�w�B��"�g�g�d�m�m�#&�7�7�9�#5�#5�&)�g�g�l�&;�&;�%(�W�W�[�%9�%9�%o�PZ�[_�ae�Pf�Pf�>n�d�h�h�t�n�n�n�ln�!$����!1�!1�!j�:�VZ�\`�Ka�Ka�6i�d�h�h�w�6G�6G�6G�gi�%(�W�W�[�%9�%9�$'�G�G�J�$7�$7�*-�'�'�2B�*C�*C�'*�w�w�}�'=�'=�#&�7�7�9�#5�#5�-0�W�W�5H�-I�-I�,/�G�G�4F�,G�,G�(+����(?�(?�&)�g�g�d�m�m�"���D�"�L�L��&�&�&�&�� �����H������u�"A�"A�4�P�P�P�QU�RU�QU�V���d�e�c�%�j�j�I�I�J�J�J���<�<�<��e�c�!�f�f�5�5�6�6��;�;�;�;�;�;�;�����<���sC�BL5�>H)K)�'L5�)
K7�3L5�6K7�7=L5�5
M*�? M%�M*�%M*z/admin/postal/smart/cancelc���tt��}|stddd���dfStjd���pi}t	|�dd��pd�����}t	|�d	d��pd�����}|s|stdd
d���dfS	t��}|�dd
��}t|��}|dz}|�	��stddd���dfS|�
d������}d}	d}
g}|D�]|}|���s|�|���-	tj|��}
n%#t$r|�|��Y�dwxYwt!|
�d��t"��r|
�d��ni}t!|t"��r|�d��ni}t!|t$��r|r|dni}t	|
�d��p-t!|t"��r|�d��ndpd�����}t	|
�d	d��pd�����}d}|r	||krd}n
|r||krd}|r�t'|
�d����s"t'|
�d����rtdddd���dfcSd|
d<d|
d<t)t+j����|
d<d |
d!<d"|
d#<d}	|
}
|�tj|
d�$������g|�|����~|	stdd%d���dfS|�d&�|��d&zd���tdd|||
d'���S#t$r+}tdt	|��d���d(fcYd}~Sd}~wwxYw))NFr�rr�Trr�rr0�missing_postal_id_or_tsrbr�r�r��draft_log_not_foundr8rVrWr�r�rr��admin_confirmedr��already_confirmedu>Bozza già confermata: non può essere annullata dal registro.�r�r�r+r'r�r�r�r?�canceled_by�CANCELEDr�ro�draft_not_foundrp)r�r�r�r0�draftr�)r�rrrr�r�r�r�r�r�r�r�r�r�r�r\rrrsr"r	r�r�rr�
write_textr�)rr:r�r0r�r�r�r_�linesr��canceled_rowrUr�r7r�r��
row_postal_id�row_ts�matchrhs                    rR�admin_postal_smart_cancelr�s���'��0�0�M��D��e�n�=�=�>�>��C�C���4�(�(�(�.�B�D��D�H�H�[�"�-�-�3��4�4�:�:�<�<�I�	�T�X�X�d�B�
�
�
%�2�	&�	&�	,�	,�	.�	.�B��O�R�O��e�.G�H�H�I�I�3�N�N�H<��m�m���7�7�0�2S�T�T���x�(�(��
�2�2���x�x�z�z�	O��%�2G�H�H�I�I�3�N�N����W��-�-�8�8�:�:���������*	!�*	!�D��:�:�<�<�
��
�
�4� � � ��
�"�(��.�.�����
�
�
��
�
�4� � � ���
����/9�����9L�9L�d�.S�.S�[�s�w�w�z�*�*�*�Y[�H�+5�h��+E�+E�M�8�<�<��'�'�'�2�D��$��%�%�
/�"&�.�t�A�w�w�B������� 4� 4� p�:�VZ�\`�Ka�Ka�9i����$����gi� p�np�q�q�w�w�y�y�M������r�*�*�0�b�1�1�7�7�9�9�F��E��
�]�i�7�7�����
��"������
!����� 1�2�2�3�3��t�C�G�G�K�<P�<P�7Q�7Q��"�#�!4�#c�$�$����	����)-��$�%�"&��J��%(�);�)@�)B�)B�%C�%C��M�"�%,��M�"�)��G����"���
�
�<�-�c��F�F�F�G�G�G�G��
�
�4� � � � ��	K��%�2C�D�D�E�E�s�J�J�	���T�Y�Y�s�^�^�d�*�W��=�=�=����"��!�
�
���	���<�<�<��e�c�!�f�f�5�5�6�6��;�;�;�;�;�;�;�����<���sY�	AP/�)AP/�F�P/�F>�;P/�=F>�>FP/�BP/�-AP/�/
Q$�9 Q�Q$�Q$z/admin/postal/smart/confirmc��tt��}|stddd���dfStjd���pi}t	|�dd�������}|stdd	d���d
fS	t��}|�dd�����}t	|�d
d�������dv}|dkr|stdddd���dfS|dkrNt	|�dd�������dkrtdddd���d
fS|�dd��}t|��}|dz}|�
��stddd���dfS|�d������}	g}
d}d}t|	��D�]x\}
}|���s|
�d���0	tj|��}n%#t"$r|
�d��Y�gwxYwt%|�d��t&��r|�d��ni}t%|t&��r|�d ��ni}t%|t(��r|r|d!ni}t	|�d��p-t%|t&��r|�d"��ndpd�����}|
�|��||kr|
}|}��z|�|�tdd#|d$���dfSt+|�d%����s[t+|�d&����s9t	|�d'd�������d(krtdd)d*d���d+fSt+|�d,����r;tdd||�d-��|�d.��d/���St	|�d0d�������}|stdd1d���d
fSt	|�d2��pd�����}|d3krd4nd5}t/|��}||krtdd6|||d7���d8fS|�d9d��}|�d:d;���d<��}tjd=did�>���d��}t7j|d?z|z|d@|zdAdAdBdC�dD�E��}	t7j|dF�G��5}|����ddH��}|� ��}ddd��n#1swxYwYn~#tBj"$r9}|����ddH��}|j#}Yd}~n;d}~wt"$r+}tdt	|��d���dIfcYd}~Sd}~wwxYw	tj|��}n#t"$rddJ|ddK�dL�}YnwxYw|dMks|dNks|�dO��durtddP||dQ���dRfS||z
} tI|| ��d|d,<d|d=<tKtMj'����|dS<dT|dU<||d-<||dV<| |d.<||dW<||dX<	t%|t&��r|�d ��ni}t%|t(��r|r|d!ni}t%|t&��r-|�d'��p|�d'��|d'<n#t"$rYnwxYw||
|<g}!t|	��D]J\}
}"|
|kr*|!�tj|d�>�����5|!�|"���K|�(dY�)|!��dYzd���td|||||| ||dZ�	��S#t"$r+}tdt	|��d���dIfcYd}~Sd}~wwxYw)[NFr�rr�Trr�r�missing_postal_idrbr�r:�%CCP_POSTAL_PRODUCTION_CONFIRM_ENABLEDr3r4r�z�Conferma invio reale bloccata. Impostare CCP_POSTAL_PRODUCTION_CONFIRM_ENABLED=1 solo dopo test e controllo credenziali produzione.rrAr��CONFIRM_REAL_POSTAL_SEND�missing_real_confirm_phrase)r�r�r�r�r�r�rr8rVrWr�r�rr�r)r�r�r�r�r�r�r�draft_canceledu,Bozza annullata: non può essere confermata.r'r�abo_chargedrX)r�r
r�r rXr2�missing_user_id_in_draftr�certifica_inviag@r	rq)r�r�r2rgrmrpr�r�r�r#r�ror�r�rrr�r�r�r�r�rir�r�r�r�r�i,r$�openapi_confirm_failed)r�r�r-r�i�rzr?�confirmed_byru�confirm_status�confirm_responserp)	r�r�r2rr rurX�openapi_status�openapi_response)*r�rrrr�r�r�r�rr�r�r�r�r�r�r�r�r\rrrsr"rFr�r�rrr�r�r�r�r�r_r�r�r�rGr�r	r�r�rr�)#rr:r�r�r��production_confirm_enabledr�r�r_rr��target_indexr<�idxr�r7r�r�rr2rrmrur�r-r�r�rUr�r-rhr&rX�	out_lines�originals#                                   rR�$admin_postal_smart_confirm_and_debitr..s�
��'��0�0�M��D��e�n�=�=�>�>��C�C���4�(�(�(�.�B�D��D�H�H�[�"�-�-�.�.�4�4�6�6�I��I��e�.A�B�B�C�C�S�H�H�m<��m�m���W�W�1�9�=�=�C�C�E�E�
�%(����1X�Z]�)^�)^�%_�%_�%e�%e�%g�%g�lF�&F�"���"�"�+E�"���-�a������	�
���"�"��4�8�8�,�b�1�1�2�2�8�8�:�:�>X�X�X���:� :� � ����	���7�7�0�2S�T�T���x�(�(��
�2�2���x�x�z�z�	O��%�2G�H�H�I�I�3�N�N����W��-�-�8�8�:�:��������"�5�)�)�	�	�I�C���:�:�<�<�
����D�!�!�!��
�"�(��.�.�����
�
�
����D�!�!�!���
����/9�����9L�9L�d�.S�.S�[�s�w�w�z�*�*�*�Y[�H�+5�h��+E�+E�M�8�<�<��'�'�'�2�D��$��%�%�
/�"&�.�t�A�w�w�B������� 4� 4� p�:�VZ�\`�Ka�Ka�9i����$����gi� p�np�q�q�w�w�y�y�M��K�K������	�)�)�"������>�\�1��%�2C�R[�\�\�]�]�_b�b�b���
�
�+�,�,�-�-�	��f�j�j��6L�6L�1M�1M�	�QT�U[�U_�U_�`g�ik�Ul�Ul�Qm�Qm�Qs�Qs�Qu�Qu�zD�RD�RD���)�I������	�
���
�
�,�-�-�.�.�	���%)�&�%�z�z�-�8�8�!'���O�!<�!<�����
��f�j�j��B�/�/�0�0�6�6�8�8���	T��%�2L�M�M�N�N�PS�S�S��6�:�:�n�5�5�;��<�<�B�B�D�D��&�*;�;�;�3�3���$�W�-�-���H�$�$���/�"�-�$������
�
����.��3�3���w�w�0�2V�W�W�^�^�_b�c�c���$�k�4�%8�u�M�M�M�T�T�U\�]�]���%��)�)�I�5��!*�U�!2�,� 2�(�	���

�

�

��	@� �(��b�9�9�9�
%�Q��f�f�h�h�o�o�g�y�9�9��������
%�
%�
%�
%�
%�
%�
%�
%�
%�
%�
%����
%�
%�
%�
%����&�	�	�	��&�&�(�(�/�/�'�9�5�5�C��V�F�F�F�F�F�F������	@�	@�	@��%�#�a�&�&�9�9�:�:�C�?�?�?�?�?�?�?�����	@����	c�+�1�#�6�6�����	c�	c�	c�+0�;N�WZ�[`�\`�[`�Wa�b�b����	c�����C�<�<�6�S�=�=�,<�,@�,@��,K�,K�u�,T�,T���1� �,�	����
��
�'��1�
��G�]�+�+�+�$(�� �!�"��{��!$�%7�%<�%>�%>�!?�!?��~��!(��~�� (��}��#1��� �"/����#)��� �%5��!�"�	�3=�>N�PT�3U�3U�]�#�'�'��/�/�/�[]�D��$��%�%�
/�"&�.�t�A�w�w�B���$��%�%�
K�"&�(�(�7�"3�"3�"J�v�z�z�'�7J�7J��w�����	�	�	��D�	����$��\���	�&�u�-�-�	+�	+�M�C���l�"�"�� � ��!3�F��!O�!O�!O�P�P�P�P�� � ��*�*�*�*�	���T�Y�Y�y�)�)�D�0�7��C�C�C���"��(�#�,�*�$� 0�

�

�
�
�
	���<�<�<��e�c�!�f�f�5�5�6�6��;�;�;�;�;�;�;�����<���s3�B	c�Ac�,Ac�>A-c�,I�c�I#� c�"I#�#D*c�Bc� Ac�=A
c�A+c�4Bc�X0�=X$�X0�$X(�(X0�+X(�,X0�/c�0Z+�?/Y3�.c�3
Z+� Z&� Z+�!c�&Z+�+c�/[�c�[�c�[�;c�A c�<B`�c�
`�c�`�B)c�
c8�
 c3�-c8�3c8z/client/postal/smart/historyc�F�tj�dd��}t|��}|st	ddd���dfSt|�dd�������}	t��}|�dd	��}t|��}|d
z}g}|�	���r�|�
d������D�]�}|���}|s�	tj
|��}	n#t$rY�<wxYwt|	�d
d�������|kr�zt|	�d��t ��r|	�d��ni}
t|
t ��r|
�d��ni}t|t"��r|r|dni}|	�d��p+t|t ��r|�d��nd}|	�d��p+t|t ��r|�d��nd}
t%|	�d��p|	�d����}t|	�d��t ��r|	�d��ni}t|	�d��t ��r|	�d��ni}t|�d��pd�����p�t|�d��pd�����dzt|�d��pd�����z���p7t|�d��pd�����pd}t|�d��pd�����}t|�d��pd�����}|�id|	�d���d|	�d���d|�d|
�d|�d |	�d ���d!|	�d!���d"|	�d"���d#|	�d#���d|r|nd�d$|�d%|�d&t%|���d'|	�d'���d(|	�d(��pd)�d|�d*|�d+|	�d+��p|	�d,��pdi������t)|d-�d.�/��dd0�}t	d.|t+|��d1���S#t$r+}t	dt|��d���d2fcYd}~Sd}~wwxYw)3NrrFr�rr�r�r�r�r�rVrWr2r�r�rr�r�r�r�	recipient�certificater�r�r�r�rCu—r�r0r,rrr rX�certificate_id�certificate_verify_url�legacyr$r�zInvio documento�recipient_display�pdf_url�document_urlc�J�t|�d��pd��Srrr�s rRr�z1ccp_client_postal_smart_history.<locals>.<lambda>4rrQTr�r�)r�ror�r�)rr�r�r�rr�r�r�r�r�r�r�r�r�r\rrrsr"r�rur�)r�r�r�r�r�r�r_ror�r7r�r�r�r�r�r0rYr5r2r3rhs                     rR�ccp_client_postal_smart_historyr9�s5��
�/�
�
�m�R�
0�
0�C��c�"�"�D��D��e�n�=�=�>�>��C�C�

�d�h�h�t�R� � �
!�
!�
'�
'�
)�
)�C�C<��m�m���7�7�0�2S�T�T���x�(�(��
�2�2�����8�8�:�:�7	����W��5�5�@�@�B�B�6
�6
���z�z�|�|������&�,�T�2�2�C�C�� �����H������s�w�w�y�"�-�-�.�.�4�4�6�6�#�=�=��2<�S�W�W�Z�=P�=P�RV�2W�2W�_�3�7�7�:�.�.�.�]_��/9�(�D�/I�/I�Q�x�|�|�F�+�+�+�r���d�D�)�)�3�&*�2�4��7�7��D��G�G�K�0�0�f�z�RV�X\�G]�G]�5e�T�X�X�d�^�^�^�ce�	�����(�(�a�*�T�SW�BX�BX�-`�T�X�X�g�->�->�->�^`�� �����!5�!5�!S����AR�9S�9S�T�T�	�4>�s�w�w�{�?S�?S�UY�4Z�4Z�b�C�G�G�K�0�0�0�`b�	�1;�C�G�G�M�<R�<R�TX�1Y�1Y�a�s�w�w�}�-�-�-�_a���	�
�
�&7�8�8�>�B�?�?�E�E�G�G���I�M�M�&�1�1�7�R�8�8�>�>�@�@�3�F��Y�]�]�[d�Me�Me�Mk�ik�Il�Il�Ir�Ir�It�It�t�{�{�}�}���9�=�=��1�1�7�R�8�8�>�>�@�@���	"�"%�T�X�X�d�^�^�%9�r�!:�!:�!@�!@�!B�!B��),�T�X�X�l�-C�-C�-I�r�)J�)J�)P�)P�)R�)R�&������#�'�'�$�-�-�� �#�'�'�$�-�-�� ����U�	�
 ���#�C�G�G�N�$;�$;�
�'����0B�(C�(C��"�3�7�7�=�#9�#9��$�S�W�W�_�%=�%=��"�4�#9�4�4�T��%�n��-�.D���$�~�"6�"6�6���s�w�w�y�1�1���S�W�W�W�-�-�B�1B��  ��!�"(�):�#�$�s�w�w�y�1�1�R�S�W�W�^�5L�5L�R�PR�%������*�u�"A�"A�4�P�P�P�QU�RU�QU�V���d�U�S��Z�Z�H�H�I�I�I���<�<�<��e�c�!�f�f�5�5�6�6��;�;�;�;�;�;�;�����<���sD�<BW+�D#�"W+�#
D0�-W+�/D0�0R:W+�+
X �5 X�X �X c�L��t�t��sdgS�fd�}g}t|d��o
|d����}t|d����}|s|s|�d��ddd	d
ddd
d�}|���D]%\}}||��s|�|���&|d��}|r<|���rt
|��dkr|�d��|d�����}	|	r<t
|	��dks|	���s|�d��|d
�����}
|
r(t
|
��dkr|�d��|S)Nr0c�p��t��|��pd�����SrBr�)rrr0s �rRrsz)_ccp_validate_postal_recipient.<locals>.vAs.����9�=�=��#�#�)�r�*�*�0�0�2�2�2rQr�r�r��nome_cognome_o_ragione_sociale�tipo_stradar�r�r�r�r�r�)r�r�r�r�r�r�r�r�cap_non_validord�provincia_non_valida�nazione_non_valida)	rrr"r�ror�r�rF�isalpha)r0rs�errors�
has_person�has_companyr�r�r�r�r�r�s`          rR�_ccp_validate_postal_recipientrE=s�����i��&�&���}��3�3�3�3�3��F��a�a��i�i�0�A�A�i�L�L�1�1�J��q�q�*�+�+�,�,�K��8�k�8��
�
�6�7�7�7�� ���� ����H��n�n�&�&�!�!�
��U��q��v�v�	!��M�M�%� � � ��
�!�E�(�(�C�
�(�C�K�K�M�M�(�S��X�X��]�]��
�
�&�'�'�'���+���$�$�&�&�I��.�c�)�n�n��)�)��1B�1B�1D�1D�)��
�
�,�-�-�-��a�	�l�l� � �"�"�G��,�3�w�<�<�1�$�$��
�
�*�+�+�+��MrQz/client/postal/smart/createc�R�tj�dd��}t|��}|st	ddd���dfStjd���pi}t
|�d	i��t��r|�d	i��ni}t
|�d
i��t��r|�d
i��ni}|�d��p|pi}|�d��pi}t|��}|rtddd
d|d���dfS|�d��pd}|�d��pd}	|�d��pd}
|�d��pi}g}|�
|��|�
d��|�
|	��|
dv�rJ|�rG|�
d��|�
d��|�
dt|�dd����z��|�
dt|�dd����z��|�
dt|�dd����z��|�
dt|�d d����z��|�
d!t|�d"d����z��||gd#�|��gt|�d$d����t|�d%d����t|�d&d����dd'�d(�}
t��}t|�d)d*��pd*��������}t|�d+d,�������d-v}|d*kr|st	dd.d/d0���d1fS|�d2d��}|�d3d4���d5��}|�d6d7��}t%j|
d�8���d9��}t+j|d:z|d;|zd<d<d=d>�d?�@��}	t+j|dA�B��5}|����d9dC��}|���}ddd��n#1swxYwYn~#t6j$r9}|����d9dC��}|j}Yd}~n;d}~wt<$r+}t	dt|��d���dDfcYd}~Sd}~wwxYw	t%j|��}n#t<$rddE|ddF�dG�}YnwxYw|
dv}|rdHndI}|rdJndK}	tA|�||��p|��}n#t<$rtA|��}YnwxYw	d}t
|t��r|�dL��nd} t
| tB��r
| r| dMn| }!t
|!t��r?|!�dN��pi�dO��pi�dP��}n#t<$rd}YnwxYw	tE|��}"|"�#dd�Q��t
|t��r|�dL��nd}#t
|#tB��r
|#r|#dMn|#}$t
|$t��si}$t|$�d��p+|$�dR��p|$�dS��pd�����}%t|$�dT��p|$�dU��pd�����}&|rdVnd}'idWtItKj&�����dXdY�dZt|�dd�����d[t|�d\d�����dU|�d]t
|t��r|�d]��nd�d^|%�d_|$�d_���d`d�dT|&�d|�d|�d|�dt
|t��r|r|nd�d|
�da|'�db|�||dc��}(|"ddz�'ded9�f��5})|)�(t%j|(d�8��d#z��ddd��n#1swxYwYn#t<$rYnwxYw|}*	t%jt%j|d�8����}*||*dg<|rdVnd|*da<|*�dL��} t
| tB��r| n| g}+|+D]a},t
|,t��rJ|,�)dNd��||,dg<|rdVnd|,da<t|,�d_d����|,d_<�bn#t<$r|}*YnwxYwt	|*��|fS)hNrrFr�r�r�Trrwrx�senderr0�recipient_validation_failed�*Dati destinatario incompleti o non validi.�r�r$r�r+�fieldsrbr��Invio documento onliner��)Documento inviato tramite CopyrightChain.r<�
solo_invior1�r"�certifica_e_invia�	certified�PROVA DIGITALE COPYRIGHTCHAIN�ID certificato: r��Titolo: �Hash SHA-256: r/�Verifica pubblica: r��
Provider: r�rp�fronteretro�colori�ar�rXrYrZr���mittente�destinatari�	documentor�r�r:�$CCP_POSTAL_PRODUCTION_CREATE_ENABLEDr3r4�production_create_blockedzxCreazione invio reale bloccata. Abilitare CCP_POSTAL_PRODUCTION_CREATE_ENABLED=1 solo per test controllato o produzione.r�rAr�r�r�r#r�r�rorVr�r�rrr�rr�r�r�rir�r�r�r��"CCP_POSTAL_SMART_PREMIUM_PRICE_EURr�z14.90r�r�rrnr�r�r��_idr�r�r-r"r0r1�client_raccomandata_smart_draftr2r�rCr$r�r�rrr�)rr�r�rnrW�service_price_eur)*rr�r�r�r�rrrrErr�r�r�r"r�r�rr�r�rrr�r�r�r�r�r_r�r�r�rGr\r�r�rsr�r�r	r�r�rYrqrE)-r�r�r:rw�saved_postalrGr0�recipient_errorsr�r�r<r1�document_lines�openapi_bodyr�r��production_create_enabledr�r-r�r�r�rUr�r-rhr��premium_mode�
price_env_key�
default_pricer�r�r�r�r��response_data_obj�response_first_obj�postal_id_value�state_value�service_mode_valuer�r_�public_responserorLs-                                             rR�ccp_client_postal_smart_createrths���
�/�
�
�m�R�
0�
0�C��c�"�"�D��Q��5�>�J�J�K�K�S�P�P���4�(�(�(�.�B�D�)3�D�H�H�Y��4K�4K�T�)R�)R�Z�d�h�h�y�"�%�%�%�XZ�G�0:�7�;�;�x�QS�;T�;T�VZ�0[�0[�c�7�;�;�x��,�,�,�ac�L�
�X�X�h�
�
�
5�<�
5�2�F�����%�%�+��I�5�i�@�@�������2�C�&�
�
���
�
�	�
�H�H�W���9�!9�E��8�8�F���J�J�D��8�8�F���+�|�D��(�(�=�)�)�/�R�K��N����%� � � ����"�������$�����D�D�D��D����b�!�!�!����=�>�>�>����0�3�{���t�R�7P�7P�3Q�3Q�Q�R�R�R����j�3�{���w��/K�/K�+L�+L�L�M�M�M����.��[�_�_�V�R�5P�5P�1Q�1Q�Q�R�R�R����3�c�+�/�/�,�XZ�:[�:[�6\�6\�\�]�]�]����l�S�����R�1P�1P�-Q�-Q�Q�R�R�R��!�{��i�i��/�/�0������� >� >�?�?��4�8�8�H�e�4�4�5�5��t�x�x��d�+�+�,�,� �	
�
�	
�
�L��-�-�C��S�W�W�1�9�=�=�J��K�K�Q�Q�S�S�Y�Y�[�[�J� #�C�G�G�,R�TW�$X�$X� Y� Y� _� _� a� a�e� ���Y���'@����0�R� 
� 
���
�	�	�
�G�G�*�B�/�/�E��7�7�,�.R�S�S�Z�Z�[^�_�_�D��w�w�,�.O�P�P�H�� ��E�B�B�B�I�I�'�R�R�G�
�
!��%�%�
�&��.�(�.�$�	
�
��
�
�
�C�I�
�
$�S�"�
5�
5�
5�	!���&�&�(�(�/�/�'�9�5�5�C��Y�Y�[�[�F�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!����	!�	!�	!�	!����"�����f�f�h�h�o�o�g�y�1�1���������������I�I�I��5�3�q�6�6�B�B�C�C�S�H�H�H�H�H�H�H�����I����W��%�c�*�*�����W�W�W�$�/B�3�u�PT�u�:�V�V����W�����P�P�L�<H�q�8�8�Nq�M�+�7�G�G��M�-��c�g�g�m�]�C�C�T�}�U�U�
�
���-�-�-��m�,�,�
�
�
�-������
�+5�h��+E�+E�O�8�<�<��'�'�'�4��#-�h��#=�#=�X�(�X�H�Q�K�K�PX�	��i��&�&�	k�(�}�}�Y�7�7�=�2�B�B�8�L�L�R�PR�W�W�Xh�i�i�M��������
�
�
�����0
��x�(�(��	����t��,�,�,�4>�x��4N�4N�X�H�L�L��0�0�0�TX��5?�@Q�SW�5X�5X�F�]n�F�.�q�1�1�uF���,�d�3�3�	$�!#����"�"�4�(�(�
�!�%�%�e�,�,�
�!�%�%�e�,�,�
��	
�
�
�%�'�'�	���"�"�7�+�+�
�!�%�%�h�/�/�
��
�
��%�'�'�		�3?�P�.�.�L��
��#�(�-�/�/�0�0�
��5�
�
�s�4�8�8�D�"�-�-�.�.�
�
�#�d�h�h�w��3�3�4�4�	
�

�f�
�
�*�X�t�2L�2L�V�x�|�|�I�.�.�.�RV�

�
��
�
�+�/�/��<�<�
�
�u�
�
�[�
�
�U�
�
�f�
�
��
�
�*�[�$�*G�*G�a�K�a�;�;�]a�
�
�D�
� 
�.�!
�"
 ��#
�$!.� �'
�
�
��,�4�4�
:�
:�3��
:�
Q�
Q�	H�UV�
�G�G�L�&�s��?�?�?�$�F�G�G�G�	H�	H�	H�	H�	H�	H�	H�	H�	H�	H�	H����	H�	H�	H�	H����
�
�
���
�����O�
#�&�,�\�-?��W\�-]�-]�-]�^�^��/<��+�,�?K�*]�*;�*;�Q]���'�"�&�&�v�.�.��&�x��6�6�F���X�J���	G�	G�D��$��%�%�
G�����D�)�)�)�,9��(�)�<H�'Z�'8�'8�l��^�$�$(����+�u�)E�)E�$F�$F��[�!��	G���#�#�#�"����#�����?�+�+�V�3�3s��4U�
=U�U�U�U�U�U�W�./V"�"
W�/ W�W�W�W3�3X�
X�"%Y�Y$�#Y$�(B#\�\�\�If)�$-f�f)�f!�!f)�$f!�%f)�)
f6�5f6�<C	j�j�jz/api/ai/postal/smart/createc�	�t��stddd���dfStjd���pi}|�d��pi}|�d��pi}t|��}|rt
ddd	d
|d���dfS|�d
��pd}|�d��pd}|�d��pd}|�d��pi}g}|�|��|�d��|�|��|dv�rJ|�rG|�d��|�d��|�dt|�dd����z��|�dt|�d
d����z��|�dt|�dd����z��|�dt|�dd����z��|�dt|�dd����z��||gd �	|��gt|�d!d����t|�d"d����t|�d#d����dd$�d%�}	t��}
|
�d&d��}|
�d'd(���d)��}tj|	d�*���d+��}
t!j|d,z|
d-|zd.d.d/d0�d1�2��}	t!j|d3�4��5}|����d+d5��}|���}ddd��n#1swxYwYn~#t,j$r9}|����d+d5��}|j}Yd}~n;d}~wt2$r+}tdt|��d���d6fcYd}~Sd}~wwxYw	tj|��}n#t2$rdd7|dd8�d9�}YnwxYwt|��|fS):NFr�r�r�TrrGr0rHrIrJrbr�rLr�rMr<rNr1rrOrRrSr�rTrUr/rVr�rWr�rprXrYrZr[r\r�r�r�r#rorVr�r�rrr�rr�r�r�rir�r�r�r�)r�r�r�rr�rErr�r�r�r"r�r�r�rrr�r�r�r�r�r_r�r�r�rGr\r�)r:rGr0rgr�r�r<r1rhrir�r�r-r�r�rUr�r-rhr�s                    rR�ccp_postal_smart_simple_createrv)sD�����Q��5�>�J�J�K�K�S�P�P�&�/�t�<�<�<�B��D�
�X�X�h�
�
�
%�2�F�����%�%�+��I�5�i�@�@�������2�C�&�
�
���
�
�	�
�H�H�W���9�!9�E��8�8�F���J�J�D��8�8�F���+�|�D��(�(�=�)�)�/�R�K��N����%� � � ����"�������$�����D�D�D��D����b�!�!�!����=�>�>�>����0�3�{���t�R�7P�7P�3Q�3Q�Q�R�R�R����j�3�{���w��/K�/K�+L�+L�L�M�M�M����.��[�_�_�V�R�5P�5P�1Q�1Q�Q�R�R�R����3�c�+�/�/�,�XZ�:[�:[�6\�6\�\�]�]�]����l�S�����R�1P�1P�-Q�-Q�Q�R�R�R��!�{��i�i��/�/�0������� >� >�?�?��4�8�8�H�e�4�4�5�5��t�x�x��d�+�+�,�,� �	
�
�	
�
�L��-�-�C��G�G�*�B�/�/�E��7�7�,�.R�S�S�Z�Z�[^�_�_�D�� ��E�B�B�B�I�I�'�R�R�G�
�
!��%�%�
�&��.�(�.�$�	
�
��
�
�
�C�I�
�
$�S�"�
5�
5�
5�	!���&�&�(�(�/�/�'�9�5�5�C��Y�Y�[�[�F�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!����	!�	!�	!�	!����"�����f�f�h�h�o�o�g�y�1�1���������������I�I�I��5�3�q�6�6�B�B�C�C�S�H�H�H�H�H�H�H�����I����W��%�c�*�*�����W�W�W�$�/B�3�u�PT�u�:�V�V����W�����8�$�$�f�,�,s`�P�0=O9�-P�9O=�=P�O=�P�R�/Q�
R� Q;�5R�;R�R�R4�3R4�__main__z	127.0.0.1i�)r)r)rr9rL)r�)rr)�rhrZr�r�r�r3rrr��flaskrrrrr	�
flask_corsr
r�r`�reportlab.pdfgenr�reportlab.lib.pagesizesr�reportlab.lib.unitsr
r�r�r\�__name__�APPr�r�r�rrr�r�ror]r�r�r�r�r�r�r6r�r�rZr]r�rGr[rIrJrdr`r?�api_keyrr�rRrr2r9r;r<r=r>r@r�rBr�r�r�r��COST_GEMINI_EURr
rSr`rlrsr�r�rr�r�r�r�r�r�r�r�r�r�r�r�rrrrr	rrr&r8r<r@rDrHrOrUrXrjr|r�r�r�r�r�r�r�r�r�r�rr<rVrXr[r^r�r�r�r�r�r�r�r�r�r�rrr7rr r4r=rGrJrMr\r^rcrhrjrtr.r1r0r|r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrr%r*r-rNrhrqryr{r�r�r�r�r�r�r�r��urllib.requestr��urllib.errorr�r��pathlibr�r�r�r��router�r��hmacr�r�r�r�r�r�r�rrr.r9rErtrvr�rPrQrR�<module>r�s���	�	�	�	�����������������	�	�	�	�'�'�'�'�'�'�'�'���������C�C�C�C�C�C�C�C�C�C�C�C�C�C�����������
�
�
�
�$�#�#�#�#�#�&�&�&�&�&�&�"�"�"�"�"�"���M�M�M��J�J������
�F��J�J�J������e�H�o�o������y�#�#�#���
�B�B�B�7�7�7�
�
�
�
��j�n�n�1�2�6�6������ 0�"�5�5������ 0�"�5�5������ 4�b�9�9������ 4�b�9�9��
�:�>�>�+�-G�H�H��
�W�\�\�(�L�
1�
1�
��G�L�L��#3�4�4�	�����h�(:�;�;������X��7�7�
��G�L�L��+>�?�?���7�<�<��*>�?�?���w�|�|�H�n�5�5���*�.�.�!6��;�;�B�B�3�G�G���*�.�.�!6��;�;�B�B�3�G�G���J�N�N�#:�B�?�?�E�E�G�G���
���'B�B�G�G�M�M�O�O���Z�^�^�$<�b�A�A�G�G�I�I���J�N�N�#:�B�?�?�E�E�G�G�������7�<�<��*<�=�=���'�&�F�N��
���2�B�G�L�L��>�[a�4b�4b�c�c�
��
���8�"�'�,�,�x�Q_�am�:n�:n�o�o���
���7�����h�P^�`k�9l�9l�m�m���J�N�N�+F��L�L�R�R�T�T�Z�Z�\�\�`z�z���
���'>�	�J�J�P�P�R�R�X�X�Z�Z���*�.�.�)B�B�G�G�M�M�O�O��#%�:�>�>�2T�VX�#Y�#Y�#_�#_�#a�#a� �#%�:�>�>�2T�VX�#Y�#Y�#_�#_�#a�#a� ��Z�^�^�,H�J^�_�_�e�e�g�g������(@�*�M�M�S�S�U�U�[�[�]�]��!�E�"�*�.�.�1L�d�"S�"S�T�T��
�*�.�.��(E�
F�
F�
L�
L�
N�
N�
o�Ro���z�~�~�0�"�'�,�,�x��2O�2O�P�P��O���%��
���'D�f�M�M�N�N���%��
���'D�f�M�M�N�N�����H�t�$�$�$�$����M�D�)�)�)�)����K�$�'�'�'�'����K�$�'�'�'�'����L�4�(�(�(�(�2�2�2�������<�<�<�
	Y�	Y�	Y�	Y�b�b�b�8+�4�+�C�+�+�+�+��3�����"	�	�	����.�.�.�	�C�	�	�	�	�!�d�!�!�!�!�"4�4�4��S��U�����$�S�$�%�$�$�$�$��S����5�����5�5�5����(�(�(�������������2��2��2�2�2�2��C��D����� 4�4�c�4�s�4��4�4�4�4�l #� #�s� #�� #�#� #�3� #�UX� #� #� #� #�H4�4�4�,�,�,�+�+�+�
�
�
�'�'�'�,8�8�8�#�#�#�J-&�-&�-&�-&�^F�F�F�F�$_�_�_����	4�C�	4�E�	4�	4�	4�	4����#�������������(<�<�<�7�7�7�y�y�y�y�>	�#�	��	�s�	�s�	�	�	�	��t��#��3��3�����FB�3�B�4�B�B�B�B�J\�D�\�s�\��\�]a�\�fi�\�\�\�\�~A�A�A�:�S�:�S�:�:�:�:���s��s��C�����L�L�L�`
L�C�L�C�L�L�L�L� � � � � � ��C�����>���C��S��3��\_�����8�S��c��D�����4�c��S����� *�D�*�s�*��*�c�*�_b�*�*�*�*�X#�$�#�#�#�#�L����������������������2������
R�
R���
R����.�����������
� � �!�!�!� �!�*���
� � �;�;�!� �;�~���
'�(�(�&�&�)�(�&�P���
� � �)�)�!� �)�V���	���:�:���:����	���*�*���*����	%�&�&�A2�A2�'�&�A2�F���	���@�@���@����
!�"�"�F�F�#�"�F� ���
� � �I�I�!� �I� ���	���"�"���"����
���1�1� ��1�@���
�
�
�F�F�F�1�1�1�
�D��S�����1�t�1�1�1�1�f���	� � �8�8�!� �8�:���	���BM�BM� ��BM�J���
���)�)���)�V���/��������6���
���
!�
!���
!����
���b/�b/� ��b/�N���
���b/�b/� ��b/�L���
���b/�b/� ��b/�J���
#�$�$���%�$��@������
�
���
�$���8���	��������"���
��������B������O�O���O����	���k�k���k�Z������BU�BU���BU�H���*���%�%���%����-���%�%���%����
$�%�%�1R�1R�&�%�1R�h���
#�$�$�]!�]!�%�$�]!�F���
'�(�(�2�2�)�(�2�j���
� � �8�8�!� �8�z
�
�
�
����	���B�B� ��B�6���
���?�?� ��?�B���
$�%�%�T�T�&�%�T�@���	.�/�/�7�7�0�/�7�x���	#�$�$�V�V�%�$�V�4������0B�0B���0B�f���'���3/�3/���3/�p����(�(�(�(�(�(�$�$�$�$�$�$�(�(�(�(�(�(�,�,�,�,�,�,����2���#�e�W��5�5�4�4�6�5�4�x9�8�8�8�8�8�!�!�!�!�!�!�!�!�.�.�.�.�.�.�T�T�T����'�&���:�:�H-�H-�;�:�H-�`���5���?P��Q�Q�6-�6-�R�Q�6-�|���4�u�g��F�F�!-�!-�G�F�!-�T���'�%���9�9�0<�0<�:�9�0<�l���'�&���:�:�T<�T<�;�:�T<�p���(�6�(��;�;�w<�w<�<�;�w<�x���)�E�7��;�;�K<�K<�<�;�K<�b)�)�)�V���(�6�(��;�;�y4�y4�<�;�y4�@���(�6�(��;�;�R-�R-�<�;�R-�n�z����G�G�K��������s�A�	A+�*A+

Youez - 2016 - github.com/yon3zu
LinuXploit