
    f6i                     |    d dl Z d dlZd dlmZ d dlZd dlmZ d dlmZ d dl	m
Z
mZ  eddd	      d
edefd       Zy)    N)shared_task)Session)SessionLocal)WebhookEventWebhookTz$app.workers.webhooks.deliver_webhook   )bindnamemax_retriesevent_idreturnc                    t               }	 |j                  t              j                  t        j                  |k(        j                         }|sd| d|j                          S |j                  t              j                  t        j                  |j                  k(        j                         }|sd| d|j                          S ddl	}|j                  |j                  d      }t        j                  |j                  j                         |j                         t         j"                        j%                         }d||j&                  d	}	 t)        j*                  d
      5 }	|	j-                  |j.                  ||      }
|
j1                          ddd       |j2                  j5                         |_        |xj8                  dz  c_        |j;                          d| d|j                          S # 1 sw Y   cxY w# t(        j<                  $ r~}|xj8                  dz  c_        |j;                          |j8                  dk  r| j?                  d|j8                  z        d| dtA        |       cY d}~|j                          S d}~ww xY w# tB        $ r}| j?                  |d      d}~ww xY w# |j                          w xY w)z
    Deliver webhook event with HMAC signature
    
    Args:
        event_id: WebhookEvent record ID
    
    Retry policy: max 5 attempts with exponential backoff
    Signature: X-Signature header with HMAC-SHA256(secret, payload)
    zwebhook_event:z
:not_foundz:webhook_not_foundr   NT)	sort_keyszapplication/json)zContent-TypezX-SignaturezX-Event-Typeg      $@)timeout)contentheaders   z
:deliveredr      )	countdownz:exhausted:
   )excr   )"r   queryr   filteridfirstcloser   
webhook_idjsondumpspayloadhmacnewsecretencodehashlibsha256	hexdigesttypehttpxClientposturlraise_for_statusfuncnowdelivered_atattemptscommit	HTTPErrorretrystr	Exception)selfr   dbeventwebhookr   payload_str	signaturer   clientresponsees               ./var/www/notifications/app/workers/webhooks.pydeliver_webhookrA   
   sM    .B3&--loo.IJPPR#H:Z8` 	
] ((7#**7::9I9I+IJPPR#H:-?@X 	
S 	jj$j? HHNN!!# NN
 )+	 	 /$!JJ
	Fd+ ,v!;;w{{KQX;Y))+, "$ENNaNIIK#H:Z8 	
/, ,  	FNNaNIIK~~!jj1+>j??'zSVHEE 	
	F  .jjQ"j--. 	
sv   A
J 'AJ B
J H
 -/G>AH
 >HH
 
JA#J JJ JJ 	J?'J::J??K K)r!   r%   celeryr   r)   sqlalchemy.ormr   app.db.sessionr   app.db.modelsr   r   intr5   rA        r@   <module>rI      sH        " ' / $CQRS?C ?C ? T?rH   