Fix some task quirks
This commit is contained in:
@@ -16,6 +16,50 @@ SAFE_TASK_FLAGS_DEFAULTS = {
|
||||
"min_chars": 3,
|
||||
}
|
||||
|
||||
WHATSAPP_GROUP_ID_RE = re.compile(r"^\d+@g\.us$")
|
||||
WHATSAPP_DIRECT_ID_RE = re.compile(r"^\d+@s\.whatsapp\.net$")
|
||||
WHATSAPP_BARE_ID_RE = re.compile(r"^\d+$")
|
||||
SIGNAL_GROUP_ID_RE = re.compile(r"^group\.[A-Za-z0-9+/=]+$")
|
||||
SIGNAL_UUID_RE = re.compile(
|
||||
r"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
|
||||
re.IGNORECASE,
|
||||
)
|
||||
SIGNAL_PHONE_RE = re.compile(r"^\+\d+$")
|
||||
SIGNAL_INTERNAL_ID_RE = re.compile(r"^[A-Za-z0-9+/=]+$")
|
||||
|
||||
|
||||
def _normalize_whatsapp_identifier(identifier: str) -> str:
|
||||
value = str(identifier or "").strip()
|
||||
if not value:
|
||||
return ""
|
||||
if "/" in value or "?" in value or "#" in value:
|
||||
return ""
|
||||
if WHATSAPP_GROUP_ID_RE.fullmatch(value):
|
||||
return value
|
||||
if WHATSAPP_DIRECT_ID_RE.fullmatch(value):
|
||||
return value
|
||||
bare = value.split("@", 1)[0].strip()
|
||||
if not WHATSAPP_BARE_ID_RE.fullmatch(bare):
|
||||
return ""
|
||||
if value.endswith("@s.whatsapp.net"):
|
||||
return f"{bare}@s.whatsapp.net"
|
||||
return f"{bare}@g.us"
|
||||
|
||||
|
||||
def _normalize_signal_identifier(identifier: str) -> str:
|
||||
value = str(identifier or "").strip()
|
||||
if not value:
|
||||
return ""
|
||||
if SIGNAL_GROUP_ID_RE.fullmatch(value):
|
||||
return value
|
||||
if SIGNAL_UUID_RE.fullmatch(value):
|
||||
return value.lower()
|
||||
if SIGNAL_PHONE_RE.fullmatch(value):
|
||||
return value
|
||||
if SIGNAL_INTERNAL_ID_RE.fullmatch(value):
|
||||
return value
|
||||
return ""
|
||||
|
||||
|
||||
def normalize_channel_identifier(service: str, identifier: str) -> str:
|
||||
service_key = str(service or "").strip().lower()
|
||||
@@ -23,12 +67,9 @@ def normalize_channel_identifier(service: str, identifier: str) -> str:
|
||||
if not value:
|
||||
return ""
|
||||
if service_key == "whatsapp":
|
||||
bare = value.split("@", 1)[0].strip()
|
||||
if not bare:
|
||||
return value
|
||||
if value.endswith("@s.whatsapp.net"):
|
||||
return f"{bare}@s.whatsapp.net"
|
||||
return f"{bare}@g.us"
|
||||
return _normalize_whatsapp_identifier(value)
|
||||
if service_key == "signal":
|
||||
return _normalize_signal_identifier(value)
|
||||
return value
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user