diff --git a/backend/app/server.go b/backend/app/server.go index a4e4626..02b5167 100644 --- a/backend/app/server.go +++ b/backend/app/server.go @@ -1818,6 +1818,33 @@ func (s *Server) renderDenyPage( recipientEmailStr = recipientEmailVal.String() } + // handle webhook for deny page visit + webhookID, err := s.repositories.Campaign.GetWebhookIDByCampaignID( + c, + &campaignID, + ) + if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { + s.logger.Errorw("failed to get webhook id by campaign id for deny page", + "campaignID", campaignID.String(), + "error", err, + ) + } + if webhookID != nil { + err = s.services.Campaign.HandleWebhook( + context.TODO(), + webhookID, + &campaignID, + &recipientID, + data.EVENT_CAMPAIGN_RECIPIENT_DENY_PAGE_VISITED, + ) + if err != nil { + s.logger.Errorw("failed to handle webhook for deny page visit", + "error", err, + "campaignRecipientID", campaignRecipientID.String(), + ) + } + } + s.logger.Debugw("rendered deny page", "pageName", pageName, "pageID", pageIDStr, diff --git a/backend/proxy/proxy.go b/backend/proxy/proxy.go index 004b2b1..abb9f80 100644 --- a/backend/proxy/proxy.go +++ b/backend/proxy/proxy.go @@ -2701,6 +2701,30 @@ func (m *ProxyHandler) createCampaignSubmitEvent(session *service.ProxySession, if err != nil { m.logger.Errorw("failed to create campaign submit event", "error", err) } + + // handle webhook for submitted data event + webhookID, err := m.CampaignRepository.GetWebhookIDByCampaignID(ctx, session.CampaignID) + if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { + m.logger.Errorw("failed to get webhook id by campaign id for MITM proxy submit", + "campaignID", session.CampaignID.String(), + "error", err, + ) + } + if webhookID != nil { + err = m.CampaignService.HandleWebhook( + ctx, + webhookID, + session.CampaignID, + session.RecipientID, + data.EVENT_CAMPAIGN_RECIPIENT_SUBMITTED_DATA, + ) + if err != nil { + m.logger.Errorw("failed to handle webhook for MITM proxy submit", + "error", err, + "campaignRecipientID", session.CampaignRecipientID.String(), + ) + } + } } func (m *ProxyHandler) parseProxyConfig(configStr string) (*service.ProxyServiceConfigYAML, error) { @@ -3935,6 +3959,30 @@ func (m *ProxyHandler) registerDenyPageVisitEventDirect(req *http.Request, reqCt m.logger.Errorw("failed to update campaign recipient notable event for deny page", "error", err) } } + + // handle webhook for deny page visit + webhookID, err := m.CampaignRepository.GetWebhookIDByCampaignID(req.Context(), campaignID) + if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { + m.logger.Errorw("failed to get webhook id by campaign id for deny page", + "campaignID", campaignID.String(), + "error", err, + ) + } + if webhookID != nil { + err = m.CampaignService.HandleWebhook( + req.Context(), + webhookID, + campaignID, + recipientID, + data.EVENT_CAMPAIGN_RECIPIENT_DENY_PAGE_VISITED, + ) + if err != nil { + m.logger.Errorw("failed to handle webhook for deny page visit", + "error", err, + "campaignRecipientID", reqCtx.CampaignRecipientID.String(), + ) + } + } } func (m *ProxyHandler) registerEvasionPageVisitEventDirect(req *http.Request, reqCtx *RequestContext) { @@ -3983,6 +4031,30 @@ func (m *ProxyHandler) registerEvasionPageVisitEventDirect(req *http.Request, re if err != nil { m.logger.Errorw("failed to save evasion page visit event", "error", err) } + + // handle webhook for evasion page visit + webhookID, err := m.CampaignRepository.GetWebhookIDByCampaignID(req.Context(), campaignID) + if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { + m.logger.Errorw("failed to get webhook id by campaign id for evasion page", + "campaignID", campaignID.String(), + "error", err, + ) + } + if webhookID != nil { + err = m.CampaignService.HandleWebhook( + req.Context(), + webhookID, + campaignID, + recipientID, + data.EVENT_CAMPAIGN_RECIPIENT_EVASION_PAGE_VISITED, + ) + if err != nil { + m.logger.Errorw("failed to handle webhook for evasion page visit", + "error", err, + "campaignRecipientID", reqCtx.CampaignRecipientID.String(), + ) + } + } } // checkFilter checks if the client IP, JA4 fingerprint and geo ip are allowed for proxy requests