mirror of https://github.com/zulip/zulip.git
382 lines
6.2 KiB
Python
382 lines
6.2 KiB
Python
from disposable_email_domains import blocklist
|
|
from django.conf import settings
|
|
|
|
|
|
def is_reserved_subdomain(subdomain: str) -> bool:
|
|
if subdomain == settings.SOCIAL_AUTH_SUBDOMAIN:
|
|
return True
|
|
if subdomain == settings.SELF_HOSTING_MANAGEMENT_SUBDOMAIN:
|
|
return True
|
|
if subdomain in ZULIP_RESERVED_SUBDOMAINS:
|
|
return True
|
|
if subdomain.endswith("s") and subdomain.removesuffix("s") in ZULIP_RESERVED_SUBDOMAINS:
|
|
return True
|
|
if subdomain in GENERIC_RESERVED_SUBDOMAINS:
|
|
return True
|
|
if subdomain.endswith("s") and subdomain.removesuffix("s") in GENERIC_RESERVED_SUBDOMAINS:
|
|
return True
|
|
if settings.CORPORATE_ENABLED and ("zulip" in subdomain or "kandra" in subdomain):
|
|
return True
|
|
return False
|
|
|
|
|
|
def is_disposable_domain(domain: str) -> bool:
|
|
if domain.lower() in WHITELISTED_EMAIL_DOMAINS:
|
|
return False
|
|
return domain.lower() in DISPOSABLE_DOMAINS
|
|
|
|
|
|
ZULIP_RESERVED_SUBDOMAINS = {
|
|
# Zulip terms
|
|
"stream",
|
|
"channel",
|
|
"topic",
|
|
"thread",
|
|
"installation",
|
|
"organization",
|
|
"your-org",
|
|
"realm",
|
|
"team",
|
|
"subdomain",
|
|
"activity",
|
|
"octopus",
|
|
"acme",
|
|
"push",
|
|
# machines
|
|
"zulipdev",
|
|
"localhost",
|
|
"staging",
|
|
"prod",
|
|
"production",
|
|
"testing",
|
|
"nagios",
|
|
"nginx",
|
|
"mg",
|
|
"front-mail",
|
|
# website pages
|
|
"server",
|
|
"client",
|
|
"features",
|
|
"integration",
|
|
"bot",
|
|
"blog",
|
|
"history",
|
|
"story",
|
|
"stories",
|
|
"testimonial",
|
|
"compare",
|
|
"for",
|
|
"vs",
|
|
# competitor pages
|
|
"slack",
|
|
"mattermost",
|
|
"rocketchat",
|
|
"irc",
|
|
"twitter",
|
|
"zephyr",
|
|
"flowdock",
|
|
"spark",
|
|
"skype",
|
|
"microsoft",
|
|
"twist",
|
|
"ryver",
|
|
"matrix",
|
|
"discord",
|
|
"email",
|
|
"usenet",
|
|
# Zulip names
|
|
"zulip",
|
|
"tulip",
|
|
"humbug",
|
|
# platforms
|
|
"plan9",
|
|
"electron",
|
|
"linux",
|
|
"mac",
|
|
"windows",
|
|
"cli",
|
|
"ubuntu",
|
|
"android",
|
|
"ios",
|
|
# floss
|
|
"contribute",
|
|
"floss",
|
|
"foss",
|
|
"free",
|
|
"opensource",
|
|
"open",
|
|
"code",
|
|
"license",
|
|
# internship programs
|
|
"intern",
|
|
"outreachy",
|
|
"gsoc",
|
|
"externship",
|
|
# Things that sound like security
|
|
"auth",
|
|
"authentication",
|
|
"security",
|
|
# tech blogs
|
|
"engineering",
|
|
"infrastructure",
|
|
"tooling",
|
|
"tools",
|
|
"javascript",
|
|
"python",
|
|
}
|
|
|
|
# Most of this list was curated from the following sources:
|
|
# http://wiki.dwscoalition.org/notes/List_of_reserved_subdomains (license: CC-BY-SA 3.0)
|
|
# https://stackoverflow.com/questions/11868191/which-saas-subdomains-to-block (license: CC-BY-SA 2.5)
|
|
GENERIC_RESERVED_SUBDOMAINS = {
|
|
"about",
|
|
"abuse",
|
|
"account",
|
|
"ad",
|
|
"admanager",
|
|
"admin",
|
|
"admindashboard",
|
|
"administrator",
|
|
"adsense",
|
|
"advice",
|
|
"adword",
|
|
"affiliate",
|
|
"alpha",
|
|
"anonymous",
|
|
"api",
|
|
"assets",
|
|
"audio",
|
|
"avatar",
|
|
"badges",
|
|
"beta",
|
|
"billing",
|
|
"biz",
|
|
"blog",
|
|
"board",
|
|
"bookmark",
|
|
"bot",
|
|
"bugs",
|
|
"buy",
|
|
"cache",
|
|
"calendar",
|
|
"chat",
|
|
"clients",
|
|
"cname",
|
|
"code",
|
|
"comment",
|
|
"communities",
|
|
"community",
|
|
"contact",
|
|
"contributor",
|
|
"control",
|
|
"coppa",
|
|
"copyright",
|
|
"cpanel",
|
|
"css",
|
|
"cssproxy",
|
|
"customer",
|
|
"customise",
|
|
"customize",
|
|
"dashboard",
|
|
"data",
|
|
"demo",
|
|
"deploy",
|
|
"deployment",
|
|
"desktop",
|
|
"dev",
|
|
"devel",
|
|
"developer",
|
|
"development",
|
|
"discussion",
|
|
"diversity",
|
|
"dmca",
|
|
"docs",
|
|
"donate",
|
|
"download",
|
|
"e-mail",
|
|
"email",
|
|
"embed",
|
|
"embedded",
|
|
"example",
|
|
"explore",
|
|
"faq",
|
|
"favorite",
|
|
"favourites",
|
|
"features",
|
|
"feed",
|
|
"feedback",
|
|
"files",
|
|
"forum",
|
|
"friend",
|
|
"ftp",
|
|
"general",
|
|
"gettingstarted",
|
|
"gift",
|
|
"git",
|
|
"global",
|
|
"graphs",
|
|
"guide",
|
|
"hack",
|
|
"hello",
|
|
"help",
|
|
"home",
|
|
"hostmaster",
|
|
"https",
|
|
"icon",
|
|
"im",
|
|
"image",
|
|
"img",
|
|
"inbox",
|
|
"index",
|
|
"investors",
|
|
"invite",
|
|
"invoice",
|
|
"ios",
|
|
"ipad",
|
|
"iphone",
|
|
"irc",
|
|
"jabber",
|
|
"jars",
|
|
"jobs",
|
|
"join",
|
|
"js",
|
|
"kb",
|
|
"knowledgebase",
|
|
"launchpad",
|
|
"legal",
|
|
"livejournal",
|
|
"lj",
|
|
"login",
|
|
"logs",
|
|
"m",
|
|
"mail",
|
|
"main",
|
|
"manage",
|
|
"map",
|
|
"media",
|
|
"memories",
|
|
"memory",
|
|
"merchandise",
|
|
"messages",
|
|
"mobile",
|
|
"my",
|
|
"mystore",
|
|
"networks",
|
|
"new",
|
|
"newsite",
|
|
"onboarding",
|
|
"official",
|
|
"ogg",
|
|
"online",
|
|
"order",
|
|
"paid",
|
|
"panel",
|
|
"partner",
|
|
"partnerpage",
|
|
"pay",
|
|
"payment",
|
|
"picture",
|
|
"policy",
|
|
"pop",
|
|
"popular",
|
|
"portal",
|
|
"post",
|
|
"postmaster",
|
|
"press",
|
|
"pricing",
|
|
"principles",
|
|
"privacy",
|
|
"private",
|
|
"profile",
|
|
"public",
|
|
"question",
|
|
"random",
|
|
"redirect",
|
|
"register",
|
|
"registration",
|
|
"resolver",
|
|
"root",
|
|
"rss",
|
|
"s",
|
|
"sandbox",
|
|
"school",
|
|
"search",
|
|
"secure",
|
|
"servers",
|
|
"service",
|
|
"setting",
|
|
"shop",
|
|
"shortcuts",
|
|
"signin",
|
|
"signup",
|
|
"sitemap",
|
|
"sitenews",
|
|
"sites",
|
|
"sms",
|
|
"smtp",
|
|
"sorry",
|
|
"ssl",
|
|
"staff",
|
|
"stage",
|
|
"staging",
|
|
"stars",
|
|
"stat",
|
|
"static",
|
|
"statistics",
|
|
"status",
|
|
"store",
|
|
"style",
|
|
"support",
|
|
"surveys",
|
|
"svn",
|
|
"syn",
|
|
"syndicated",
|
|
"system",
|
|
"tag",
|
|
"talk",
|
|
"team",
|
|
"termsofservice",
|
|
"test",
|
|
"testers",
|
|
"ticket",
|
|
"tool",
|
|
"tos",
|
|
"trac",
|
|
"translate",
|
|
"update",
|
|
"upgrade",
|
|
"uploads",
|
|
"use",
|
|
"user",
|
|
"username",
|
|
"validation",
|
|
"videos",
|
|
"volunteer",
|
|
"web",
|
|
"webdisk",
|
|
"webmail",
|
|
"webmaster",
|
|
"welcome",
|
|
"whm",
|
|
"whois",
|
|
"wiki",
|
|
"www",
|
|
"www0",
|
|
"www8",
|
|
"www9",
|
|
"xml",
|
|
"xmpp",
|
|
"xoxo",
|
|
}
|
|
|
|
DISPOSABLE_DOMAINS = set(blocklist)
|
|
|
|
WHITELISTED_EMAIL_DOMAINS = {
|
|
# Controlled by https://www.abine.com; more legitimate than most
|
|
# disposable domains
|
|
"opayq.com",
|
|
"abinemail.com",
|
|
"blurmail.net",
|
|
"maskmemail.com",
|
|
}
|