diff --git a/app/config.py b/app/config.py index 0e86cd8b..523b9608 100644 --- a/app/config.py +++ b/app/config.py @@ -3,7 +3,7 @@ import random import socket import string from ast import literal_eval -from typing import Callable, List +from typing import Callable, List, Optional from urllib.parse import urlparse from dotenv import load_dotenv @@ -588,3 +588,20 @@ EVENT_WEBHOOK = os.environ.get("EVENT_WEBHOOK", None) # We want it disabled by default, so only skip if defined EVENT_WEBHOOK_SKIP_VERIFY_SSL = "EVENT_WEBHOOK_SKIP_VERIFY_SSL" in os.environ EVENT_WEBHOOK_DISABLE = "EVENT_WEBHOOK_DISABLE" in os.environ + + +def read_webhook_enabled_user_ids() -> Optional[List[int]]: + user_ids = os.environ.get("EVENT_WEBHOOK_ENABLED_USER_IDS", None) + if user_ids is None: + return None + + ids = [] + for id in user_ids.split(","): + try: + ids.append(int(id.strip())) + except ValueError: + pass + return ids + + +EVENT_WEBHOOK_ENABLED_USER_IDS: Optional[List[int]] = read_webhook_enabled_user_ids() diff --git a/app/events/event_dispatcher.py b/app/events/event_dispatcher.py index af30d330..c7546b8d 100644 --- a/app/events/event_dispatcher.py +++ b/app/events/event_dispatcher.py @@ -40,6 +40,10 @@ class EventDispatcher: if not config.EVENT_WEBHOOK and skip_if_webhook_missing: return + if config.EVENT_WEBHOOK_ENABLED_USER_IDS is not None: + if user.id not in config.EVENT_WEBHOOK_ENABLED_USER_IDS: + return + partner_user = EventDispatcher.__partner_user(user.id) if not partner_user: return