from flask import Blueprint, redirect, request from webargs import fields from webargs.flaskparser import use_kwargs from urllib.parse import unquote from core_notifications.analytics import emails_events from core_notifications.consts import SystemEvents from core_notifications.logs import logger analytics = Blueprint("analytics", __name__) @analytics.route("/link/click", methods=["GET"]) @use_kwargs( { "origin": fields.Str(required=False), "user_id": fields.Str(required=False), "user_name": fields.Str(required=False), "email_id": fields.Str(required=False), "subject": fields.Str(required=False), "to": fields.Str(required=False), "template_id": fields.Str(required=False), "template_name": fields.Str(required=False), "campaign_id": fields.Str(required=False), }, location="query", ) def link_click(origin, **kwargs): # handle split long lines symbol url = unquote(origin.replace("\r", "")) cleaned_kwargs = { k: unquote(v.replace("\r", "")) for k, v in kwargs.items() if v } # links protection apps like the "Outlook Links Protection" mey send extra # HEAD requests, that we do not need to track to avoid possible duplicates if request.method == "GET": emails_events.log( SystemEvents.email_click_by_link, url=url, **cleaned_kwargs, ) else: logger.warning( f"Skipping tracking request with {request.method} method" ) return redirect(url)