
    !i                    &   d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZmZ 	 d d	lmZmZ  ej0                  e      Zdd
ZddZd ZddZddZddZ ddZ!ddZ"	 	 	 	 	 	 	 	 ddZ#y# e$ r eZdZY Iw xY w)    )annotationsN)Path)Any)serialization)ec)get_settings)SessionIdentityget_tenant_store)WebPushExceptionwebpushc                h    t        j                  |       j                  d      j                  d      S )N   =ascii)base64urlsafe_b64encoderstripdecode)datas    :apps/backend-hub/app/services/push_notification_service.py_urlsafe_base64r      s)    ##D)006==gFF    c                 <    t        t               j                        S )N)r   r   push_vapid_private_key_file r   r   _private_key_pathr      s    ::;;r   c                 T   t               } | j                         r%t        j                  | j	                         d       S | j
                  j                  dd       t        j                  t        j                               }|j                  t        j                  j                  t        j                  j                  t        j                               }| j!                  |       	 t#        j$                  | d       |S # t&        $ r t(        j+                  d|        Y |S w xY w)N)passwordT)parentsexist_ok)encodingformatencryption_algorithmi  z2Impossibile impostare i permessi del file VAPID %s)r   existsr   load_pem_private_key
read_bytesparentmkdirr   generate_private_key	SECP256R1private_bytesEncodingPEMPrivateFormatTraditionalOpenSSLNoEncryptionwrite_bytesoschmodOSErrorloggerwarning)pathprivate_keypems      r   _load_or_create_private_keyr9   "   s    D{{}11$//2CdSSKKdT2))",,.9K

#
#''++**==*779 $ C
 	SS
u   SKTRSs   ,D D'&D'c                     t         y t               } | j                         j                         }d|j                  j                  dd      z   |j                  j                  dd      z   }t        |      S )N       big)r   r9   
public_keypublic_numbersxto_bytesyr   )r7   r?   raw_public_keys      r   get_push_public_keyrD   6   sk    -/K ++-<<>N~//88UCCnFVFVF_F_`bdiFjjN>**r   c                   t        | j                  d      xs d      j                         }t        | j                  d      xs( | j                  d      xs | j                  d      xs d      j                         }| d| }t        |      dkD  r|d d	  d
}d|dd| j                  d      xs d d| j                  d      ddS )NtitlezNuova segnalazionereporter_namereporter_usernamereporter_email
Dipendente:       ...z/reportszreport-id report_created)type	report_idrF   bodyurltagr   )strgetstriplen)reportrF   reporterrU   s       r   _push_payload_for_reportr^   @   s    

7#;';<BBDEFJJ'z6::6I+JzfjjYiNjznz{	  Zr%!D
4y3t*S!%D)/R01$D)
	 	r   c                   t        t        | dd      xs d      }t        t        | dd      xs d      j                         }t        t        | dd      xs t        | dd      xs d      j                         }|j                  d      }t	        |j                  d	      xs d
      }t	        |j                  d      xs d
      }g }|r|dk(  rdnd}	|j                  | d|	        |r|dk(  rdnd}
|j                  | d|
        dj                  |      xs d}|rd| nd}| d| d| }|r| d| d}t        |      dkD  r|d d  d}d|dd|xs |xs d  d!|xs d |d"d#S )$NrO   rP   supplier_namezFornitore non rilevatodisplay_nameoriginal_namezdocumento fiscalematched_batch_idmissing_line_countr   extra_line_count   zriga mancante o parzialezrighe mancanti o parziali z
riga extrazrighe extraz, zdifferenze da verificarezordine #zordine abbinatorK   z su z ()      rN   zDiscrepanza documento fiscalez/fiscal-documentszfiscal-discrepancy-documentfiscal_document_discrepancy)rR   document_idrc   rT   )rX   getattrrZ   rY   intappendjoinr[   )rk   order_matchrm   r`   ra   rc   missing_countextra_countdifferencesmissing_labelextra_labeldifference_labelorder_labelrU   s                 r   -_push_payload_for_fiscal_document_discrepancyrz   U   s   ghb17R8K/2>ZBZ[aacMwx<}Race@f}j}~  E  E  GL"'9:(<=BCMkoo&89>Q?KK6Cq6H2Nim_Am_=>&1Q&6lMk]!K=9:yy-K1K3CH-./IZK_B/0[MBDr,q)
4y3t*S! 1"$[%R4D%R
$ST1&.$ 0

 
r   c           
     4   t         yt        | j                  d      xs d      j                         }t	        | j                  d      t
              r| j                  d      ni }|r"|j                  d      r|j                  d      sy	 t        |t        |d         t        |d         dd	t        j                  |d
      t        t                     dt               j                  iddddi      }t        |dd       }t        j                  d|d d |xs d       y# t        $ r6}t        |dd       }t        |dd       }|dv }d
t        |      |fcY d }~S d }~wt        $ r-}t        j!                  d       d
t        |      d
fcY d }~S d }~ww xY w)N)Fzpywebpush non disponibileFendpointrP   keysp256dhauth)FzSottoscrizione push incompletaT)r~   r   )r|   r}   F)ensure_asciisub
   iQ Urgencyhigh)subscription_infor   vapid_private_keyvapid_claimstimeoutttlheadersstatus_codez(Notifica push inviata a %s con status %s0   okresponse>        Invio notifica push non riuscito)TNF)r   rX   rY   rZ   
isinstancedictjsondumpsr   r   push_vapid_subjectrn   r4   infor   	Exception	exception)subscriptionpayloadr|   r}   r   r   excdisables           r   send_web_pushr   y   s   8<##J/526<<>H'1,2B2B62JD'Q<F#WYD488H-TXXf5E<&$!$x.1V- G%8!"3"56!B!BC'
 ht<>"{Ob^bc   (3
D1ht<+c#h'' &;<c#h%%&s1   BD$ $	F-+EFF*"FFFc           	         t               }t        |      }|j                  |       D ]J  }t        ||      \  }}}|r|j	                  | t        |j                  d      xs d      |xs d|       L y Nr|   rP   r   )r   )r
   r^   list_admin_push_subscriptionsr   mark_push_subscription_errorrX   rY   )sessionr\   storer   r   r   errorr   s           r    send_report_created_notificationr      s~    E&v.G;;GD *<AE7..L$$Z06B7;;	 / r   c           	         t               }t        ||      }|j                  |       D ]J  }t        ||      \  }}}|r|j	                  | t        |j                  d      xs d      |xs d|       L y r   )r
   rz   r   r   r   rX   rY   )	r   rk   rr   r   r   r   r   r   r   s	            r   -send_fiscal_document_discrepancy_notificationr      s    
 E;HkRG;;GD *<AE7..L$$Z06B7;;	 / r   )r   bytesreturnrX   )r   r   )r   z
str | None)r\   dict[str, object]r   r   )rk   r   rr   r   r   r   )r   zdict[str, Any]r   r   r   ztuple[bool, str | None, bool])r   r	   r\   r   r   None)r   r	   rk   r   rr   r   r   r   )$
__future__r   r   r   loggingr1   pathlibr   typingr   cryptography.hazmat.primitivesr   )cryptography.hazmat.primitives.asymmetricr   app.core.configr   app.services.tenant_storer	   r
   	pywebpushr   r   ImportErrorr   	getLogger__name__r4   r   r   r9   rD   r^   rz   r   r   r   r   r   r   <module>r      s    "    	   8 8 ( G3 
		8	$G<(+*!H$N # 
	y   Gs   B 	BB