Exemplo n.º 1
0
def before_send(event, hint):
    if "request" in event and "data" in event["request"] and "email" in event[
            "request"]["data"]:
        event["request"]["data"]["email"] = remove_pii(
            event["request"]["data"]["email"])
    if "location" in event and event["location"] in (
            "vacnotify.tasts.email_confirmation",
            "vacnotify.tasts.email_notification_spot",
            "vacnotify.tasts.email_notification_group"):
        celery_args = event["extra"]["celery-job"]["args"]
        celery_args[0] = remove_pii(celery_args[0])
    return event
Exemplo n.º 2
0
def email_notification_spot(email: str, secret: str, cities_free: Mapping):
    sentry_sdk.set_user({"id": remove_pii(email)})
    html = render_template("email/notification_spot.html.jinja2", secret=secret, cities_free=cities_free)
    msg = Message("Voľné miesta na očkovanie", recipients=[email], html=html,
                  extra_headers={"List-Unsubscribe-Post": "List-Unsubscribe=One-Click",
                                 "List-Unsubscribe": "<" + url_for("main.spot_unsubscribe", secret=secret) + ">"})
    mail.send(msg)
Exemplo n.º 3
0
def email_notification_group(email: str, secret: str, new_groups: List[str]):
    sentry_sdk.set_user({"id": remove_pii(email)})
    html = render_template("email/notification_group.html.jinja2", secret=secret, new_groups=new_groups)
    msg = Message("Nová skupina na očkovanie", recipients=[email], html=html,
                  extra_headers={"List-Unsubscribe-Post": "List-Unsubscribe=One-Click",
                                 "List-Unsubscribe": "<" + url_for("main.group_unsubscribe", secret=secret) + ">"})
    mail.send(msg)
Exemplo n.º 4
0
def push_notification_group(subscription_info, secret: str,
                            new_groups: List[str]):
    sentry_sdk.set_user({"id": remove_pii(subscription_info["endpoint"])})
    text = "Vo formulári na registráciu na očkovanie"
    if len(new_groups) > 1:
        text += " pribudli nové skupiny"
    else:
        text += " pribudla nová skupina"
    text += " ľudí na očkovanie: " + ", ".join(new_groups)

    actions = [
        {
            "action": "register",
            "title": "Zaregistrovať sa",
            "icon": url_for("main.static",
                            filename="img/edit.svg",
                            _external=True)
        },
        {
            "action":
            "unsubsribe",
            "title":
            "Zrušiť odber",
            "icon":
            url_for("main.static",
                    filename="img/bell-slash.svg",
                    _external=True)
        },
    ]
    action_map = {
        "register":
        "https://www.old.korona.gov.sk/covid-19-vaccination-form.php",
        "unsubscribe":
        url_for("main.group_unsubscribe", secret=secret, _external=True)
    }
    try:
        webpush(subscription_info=subscription_info,
                data=json.dumps({
                    "action":
                    "notifyGroups",
                    "body":
                    text,
                    "icon":
                    url_for('main.static',
                            filename="img/virus.svg",
                            _external=True),
                    "actions":
                    actions,
                    "actionMap":
                    action_map
                }),
                vapid_private_key=vapid_privkey,
                vapid_claims=dict(vapid_claims))
    except WebPushException as e:
        if e.response is not None and e.response.status_code == 410:
            clear_db_push.delay(secret)
        else:
            logging.error(e)
Exemplo n.º 5
0
def email_confirmation(email: str, secret: str, subscription_type: str):
    sentry_sdk.set_user({"id": remove_pii(email)})
    if subscription_type not in ("group", "spot", "both"):
        raise ValueError
    title_suffix = {
        "group": " - Nová skupina",
        "spot": " - Voľné miesta",
        "both": ""
    }
    html = render_template("email/confirm.html.jinja2", secret=secret, type=subscription_type)
    msg = Message("Potvrdenie odberu notifikácii" + title_suffix[subscription_type], recipients=[email], html=html,
                  extra_headers={"List-Unsubscribe-Post": "List-Unsubscribe=One-Click",
                                 "List-Unsubscribe": "<" + url_for(f"main.{subscription_type}_unsubscribe", secret=secret) + ">"})
    mail.send(msg)
Exemplo n.º 6
0
def push_notification(subscription_info, body: str):
    sentry_sdk.set_user({"id": remove_pii(subscription_info["endpoint"])})
    try:
        webpush(subscription_info=subscription_info,
                data=json.dumps({
                    "action":
                    "notify",
                    "body":
                    body,
                    "icon":
                    url_for('main.static',
                            filename="img/virus.svg",
                            _external=True),
                    "actions": []
                }),
                vapid_private_key=vapid_privkey,
                vapid_claims=dict(vapid_claims))
    except WebPushException as e:
        if e.response is not None and e.response.status_code == 410:
            logging.info(e)
        else:
            logging.error(e)
Exemplo n.º 7
0
def push_confirmation(subscription_info, secret: str, subscription_type: str):
    sentry_sdk.set_user({"id": remove_pii(subscription_info["endpoint"])})
    endpoint_map = {
        "group": "main.group_confirm",
        "spot": "main.spot_confirm",
        "both": "main.both_confirm"
    }
    endpoint = endpoint_map[subscription_type]
    try:
        webpush(subscription_info=subscription_info,
                data=json.dumps({
                    "action":
                    "confirm",
                    "endpoint":
                    url_for(endpoint, secret=secret, push=1)
                }),
                vapid_private_key=vapid_privkey,
                vapid_claims=dict(vapid_claims))
    except WebPushException as e:
        if e.response is not None and e.response.status_code == 410:
            clear_db_push.delay(secret)
        else:
            logging.error(e)
Exemplo n.º 8
0
def push_notification_spot(subscription_info, secret: str,
                           cities_free: Mapping):
    sentry_sdk.set_user({"id": remove_pii(subscription_info["endpoint"])})
    actions = [
        {
            "action": "register",
            "title": "Zaregistrovať sa",
            "icon": url_for("main.static",
                            filename="img/edit.svg",
                            _external=True)
        },
        {
            "action":
            "places",
            "title":
            "Voľné termíny",
            "icon":
            url_for("main.static", filename="img/calendar.svg", _external=True)
        },
        {
            "action":
            "unsubsribe",
            "title":
            "Zrušiť odber",
            "icon":
            url_for("main.static",
                    filename="img/bell-slash.svg",
                    _external=True)
        },
    ]
    action_map = {
        "register":
        "https://www.old.korona.gov.sk/covid-19-vaccination-form.php",
        "places":
        url_for("main.spot_subscribe", _anchor="places-table", _external=True),
        "unsubscribe":
        url_for("main.spot_unsubscribe", secret=secret, _external=True)
    }
    try:
        webpush(subscription_info=subscription_info,
                data=json.dumps({
                    "action":
                    "notifySpots",
                    "body":
                    "V nasledujúcich mestách sú voľné termíny: " +
                    ", ".join(f"{name} ({free})"
                              for name, free in cities_free.items()) + ".",
                    "icon":
                    url_for('main.static',
                            filename="img/virus.svg",
                            _external=True),
                    "actions":
                    actions,
                    "actionMap":
                    action_map
                }),
                vapid_private_key=vapid_privkey,
                vapid_claims=dict(vapid_claims))
    except WebPushException as e:
        if e.response is not None and e.response.status_code == 410:
            clear_db_push.delay(secret)
        else:
            logging.error(e)