feat: add wildcard pattern support to provider database

This commit is contained in:
link2xt
2024-02-05 21:17:03 +00:00
parent f1688d2b3f
commit f8907e3c83
4 changed files with 366 additions and 396 deletions

View File

@@ -220,9 +220,9 @@ if __name__ == "__main__":
process_dir(Path(sys.argv[1])) process_dir(Path(sys.argv[1]))
out_all += "pub(crate) static PROVIDER_DATA: Lazy<HashMap<&'static str, &'static Provider>> = Lazy::new(|| HashMap::from([\n" out_all += "pub(crate) static PROVIDER_DATA: [(&str, &Provider); " + str(len(domains_set)) + "] = [\n";
out_all += out_domains out_all += out_domains
out_all += "]));\n\n" out_all += "];\n\n"
out_all += "pub(crate) static PROVIDER_IDS: Lazy<HashMap<&'static str, &'static Provider>> = Lazy::new(|| HashMap::from([\n" out_all += "pub(crate) static PROVIDER_IDS: Lazy<HashMap<&'static str, &'static Provider>> = Lazy::new(|| HashMap::from([\n"
out_all += out_ids out_all += out_ids

View File

@@ -6,7 +6,7 @@ set -euo pipefail
export TZ=UTC export TZ=UTC
# Provider database revision. # Provider database revision.
REV=18f714cf73d0bdfb8b013fa344494ab80c92b477 REV=2f3db24107e4802c2df0aa0a40f0e144006c0a9b
CORE_ROOT="$PWD" CORE_ROOT="$PWD"
TMP="$(mktemp -d)" TMP="$(mktemp -d)"

View File

@@ -215,8 +215,18 @@ pub async fn get_provider_info(
/// Finds a provider in offline database based on domain. /// Finds a provider in offline database based on domain.
pub fn get_provider_by_domain(domain: &str) -> Option<&'static Provider> { pub fn get_provider_by_domain(domain: &str) -> Option<&'static Provider> {
if let Some(provider) = PROVIDER_DATA.get(domain.to_lowercase().as_str()) { let domain = domain.to_lowercase();
return Some(*provider); for (pattern, provider) in PROVIDER_DATA {
if let Some(suffix) = pattern.strip_prefix('*') {
// Wildcard domain pattern.
//
// For example, `suffix` is ".hermes.radio" for "*.hermes.radio" pattern.
if domain.ends_with(suffix) {
return Some(provider);
}
} else if pattern == domain {
return Some(provider);
}
} }
None None
@@ -226,33 +236,42 @@ pub fn get_provider_by_domain(domain: &str) -> Option<&'static Provider> {
/// ///
/// For security reasons, only Gmail can be configured this way. /// For security reasons, only Gmail can be configured this way.
pub async fn get_provider_by_mx(context: &Context, domain: &str) -> Option<&'static Provider> { pub async fn get_provider_by_mx(context: &Context, domain: &str) -> Option<&'static Provider> {
if let Ok(resolver) = get_resolver() { let Ok(resolver) = get_resolver() else {
let mut fqdn: String = domain.to_string(); warn!(context, "Cannot get a resolver to check MX records.");
if !fqdn.ends_with('.') { return None;
fqdn.push('.'); };
let mut fqdn: String = domain.to_string();
if !fqdn.ends_with('.') {
fqdn.push('.');
}
let Ok(mx_domains) = resolver.mx_lookup(fqdn).await else {
warn!(context, "Cannot resolve MX records for {domain:?}.");
return None;
};
for (provider_domain_pattern, provider) in PROVIDER_DATA {
if provider.id != "gmail" {
// MX lookup is limited to Gmail for security reasons
continue;
} }
if let Ok(mx_domains) = resolver.mx_lookup(fqdn).await { if provider_domain_pattern.starts_with('*') {
for (provider_domain, provider) in &*PROVIDER_DATA { // Skip wildcard patterns.
if provider.id != "gmail" { continue;
// MX lookup is limited to Gmail for security reasons }
continue;
}
let provider_fqdn = provider_domain.to_string() + "."; let provider_fqdn = provider_domain_pattern.to_string() + ".";
let provider_fqdn_dot = ".".to_string() + &provider_fqdn; let provider_fqdn_dot = ".".to_string() + &provider_fqdn;
for mx_domain in mx_domains.iter() { for mx_domain in mx_domains.iter() {
let mx_domain = mx_domain.exchange().to_lowercase().to_utf8(); let mx_domain = mx_domain.exchange().to_lowercase().to_utf8();
if mx_domain == provider_fqdn || mx_domain.ends_with(&provider_fqdn_dot) { if mx_domain == provider_fqdn || mx_domain.ends_with(&provider_fqdn_dot) {
return Some(provider); return Some(provider);
}
}
} }
} }
} else {
warn!(context, "cannot get a resolver to check MX records.");
} }
None None

View File

@@ -593,7 +593,7 @@ static P_GMX_NET: Provider = Provider {
oauth2_authorizer: None, oauth2_authorizer: None,
}; };
// hermes.radio.md: ac.hermes.radio, ac1.hermes.radio, ac2.hermes.radio, ac3.hermes.radio, ac4.hermes.radio, ac5.hermes.radio, ac6.hermes.radio, ac7.hermes.radio, ac8.hermes.radio, ac9.hermes.radio, ac10.hermes.radio, ac11.hermes.radio, ac12.hermes.radio, ac13.hermes.radio, ac14.hermes.radio, ac15.hermes.radio, ka.hermes.radio, ka1.hermes.radio, ka2.hermes.radio, ka3.hermes.radio, ka4.hermes.radio, ka5.hermes.radio, ka6.hermes.radio, ka7.hermes.radio, ka8.hermes.radio, ka9.hermes.radio, ka10.hermes.radio, ka11.hermes.radio, ka12.hermes.radio, ka13.hermes.radio, ka14.hermes.radio, ka15.hermes.radio, ec.hermes.radio, ec1.hermes.radio, ec2.hermes.radio, ec3.hermes.radio, ec4.hermes.radio, ec5.hermes.radio, ec6.hermes.radio, ec7.hermes.radio, ec8.hermes.radio, ec9.hermes.radio, ec10.hermes.radio, ec11.hermes.radio, ec12.hermes.radio, ec13.hermes.radio, ec14.hermes.radio, ec15.hermes.radio, hermes.radio // hermes.radio.md: *.hermes.radio, *.aco-connexion.org
static P_HERMES_RADIO: Provider = Provider { static P_HERMES_RADIO: Provider = Provider {
id: "hermes.radio", id: "hermes.radio",
status: Status::Ok, status: Status::Ok,
@@ -1608,375 +1608,326 @@ static P_ZOHO: Provider = Provider {
oauth2_authorizer: None, oauth2_authorizer: None,
}; };
pub(crate) static PROVIDER_DATA: Lazy<HashMap<&'static str, &'static Provider>> = Lazy::new(|| { pub(crate) static PROVIDER_DATA: [(&str, &Provider); 318] = [
HashMap::from([ ("163.com", &P_163),
("163.com", &P_163), ("aktivix.org", &P_AKTIVIX_ORG),
("aktivix.org", &P_AKTIVIX_ORG), ("aol.com", &P_AOL),
("aol.com", &P_AOL), ("arcor.de", &P_ARCOR_DE),
("arcor.de", &P_ARCOR_DE), ("autistici.org", &P_AUTISTICI_ORG),
("autistici.org", &P_AUTISTICI_ORG), ("delta.blinzeln.de", &P_BLINDZELN_ORG),
("delta.blinzeln.de", &P_BLINDZELN_ORG), ("delta.blindzeln.org", &P_BLINDZELN_ORG),
("delta.blindzeln.org", &P_BLINDZELN_ORG), ("bluewin.ch", &P_BLUEWIN_CH),
("bluewin.ch", &P_BLUEWIN_CH), ("buzon.uy", &P_BUZON_UY),
("buzon.uy", &P_BUZON_UY), ("c1.testrun.org", &P_C1_TESTRUN_ORG),
("c1.testrun.org", &P_C1_TESTRUN_ORG), ("c2.testrun.org", &P_C2_TESTRUN_ORG),
("c2.testrun.org", &P_C2_TESTRUN_ORG), ("c3.testrun.org", &P_C3_TESTRUN_ORG),
("c3.testrun.org", &P_C3_TESTRUN_ORG), ("chello.at", &P_CHELLO_AT),
("chello.at", &P_CHELLO_AT), ("xfinity.com", &P_COMCAST),
("xfinity.com", &P_COMCAST), ("comcast.net", &P_COMCAST),
("comcast.net", &P_COMCAST), ("dismail.de", &P_DISMAIL_DE),
("dismail.de", &P_DISMAIL_DE), ("disroot.org", &P_DISROOT),
("disroot.org", &P_DISROOT), ("e.email", &P_E_EMAIL),
("e.email", &P_E_EMAIL), ("espiv.net", &P_ESPIV_NET),
("espiv.net", &P_ESPIV_NET), ("example.com", &P_EXAMPLE_COM),
("example.com", &P_EXAMPLE_COM), ("example.org", &P_EXAMPLE_COM),
("example.org", &P_EXAMPLE_COM), ("example.net", &P_EXAMPLE_COM),
("example.net", &P_EXAMPLE_COM), ("123mail.org", &P_FASTMAIL),
("123mail.org", &P_FASTMAIL), ("150mail.com", &P_FASTMAIL),
("150mail.com", &P_FASTMAIL), ("150ml.com", &P_FASTMAIL),
("150ml.com", &P_FASTMAIL), ("16mail.com", &P_FASTMAIL),
("16mail.com", &P_FASTMAIL), ("2-mail.com", &P_FASTMAIL),
("2-mail.com", &P_FASTMAIL), ("4email.net", &P_FASTMAIL),
("4email.net", &P_FASTMAIL), ("50mail.com", &P_FASTMAIL),
("50mail.com", &P_FASTMAIL), ("airpost.net", &P_FASTMAIL),
("airpost.net", &P_FASTMAIL), ("allmail.net", &P_FASTMAIL),
("allmail.net", &P_FASTMAIL), ("bestmail.us", &P_FASTMAIL),
("bestmail.us", &P_FASTMAIL), ("cluemail.com", &P_FASTMAIL),
("cluemail.com", &P_FASTMAIL), ("elitemail.org", &P_FASTMAIL),
("elitemail.org", &P_FASTMAIL), ("emailcorner.net", &P_FASTMAIL),
("emailcorner.net", &P_FASTMAIL), ("emailengine.net", &P_FASTMAIL),
("emailengine.net", &P_FASTMAIL), ("emailengine.org", &P_FASTMAIL),
("emailengine.org", &P_FASTMAIL), ("emailgroups.net", &P_FASTMAIL),
("emailgroups.net", &P_FASTMAIL), ("emailplus.org", &P_FASTMAIL),
("emailplus.org", &P_FASTMAIL), ("emailuser.net", &P_FASTMAIL),
("emailuser.net", &P_FASTMAIL), ("eml.cc", &P_FASTMAIL),
("eml.cc", &P_FASTMAIL), ("f-m.fm", &P_FASTMAIL),
("f-m.fm", &P_FASTMAIL), ("fast-email.com", &P_FASTMAIL),
("fast-email.com", &P_FASTMAIL), ("fast-mail.org", &P_FASTMAIL),
("fast-mail.org", &P_FASTMAIL), ("fastem.com", &P_FASTMAIL),
("fastem.com", &P_FASTMAIL), ("fastemail.us", &P_FASTMAIL),
("fastemail.us", &P_FASTMAIL), ("fastemailer.com", &P_FASTMAIL),
("fastemailer.com", &P_FASTMAIL), ("fastest.cc", &P_FASTMAIL),
("fastest.cc", &P_FASTMAIL), ("fastimap.com", &P_FASTMAIL),
("fastimap.com", &P_FASTMAIL), ("fastmail.cn", &P_FASTMAIL),
("fastmail.cn", &P_FASTMAIL), ("fastmail.co.uk", &P_FASTMAIL),
("fastmail.co.uk", &P_FASTMAIL), ("fastmail.com", &P_FASTMAIL),
("fastmail.com", &P_FASTMAIL), ("fastmail.com.au", &P_FASTMAIL),
("fastmail.com.au", &P_FASTMAIL), ("fastmail.de", &P_FASTMAIL),
("fastmail.de", &P_FASTMAIL), ("fastmail.es", &P_FASTMAIL),
("fastmail.es", &P_FASTMAIL), ("fastmail.fm", &P_FASTMAIL),
("fastmail.fm", &P_FASTMAIL), ("fastmail.fr", &P_FASTMAIL),
("fastmail.fr", &P_FASTMAIL), ("fastmail.im", &P_FASTMAIL),
("fastmail.im", &P_FASTMAIL), ("fastmail.in", &P_FASTMAIL),
("fastmail.in", &P_FASTMAIL), ("fastmail.jp", &P_FASTMAIL),
("fastmail.jp", &P_FASTMAIL), ("fastmail.mx", &P_FASTMAIL),
("fastmail.mx", &P_FASTMAIL), ("fastmail.net", &P_FASTMAIL),
("fastmail.net", &P_FASTMAIL), ("fastmail.nl", &P_FASTMAIL),
("fastmail.nl", &P_FASTMAIL), ("fastmail.org", &P_FASTMAIL),
("fastmail.org", &P_FASTMAIL), ("fastmail.se", &P_FASTMAIL),
("fastmail.se", &P_FASTMAIL), ("fastmail.to", &P_FASTMAIL),
("fastmail.to", &P_FASTMAIL), ("fastmail.tw", &P_FASTMAIL),
("fastmail.tw", &P_FASTMAIL), ("fastmail.uk", &P_FASTMAIL),
("fastmail.uk", &P_FASTMAIL), ("fastmail.us", &P_FASTMAIL),
("fastmail.us", &P_FASTMAIL), ("fastmailbox.net", &P_FASTMAIL),
("fastmailbox.net", &P_FASTMAIL), ("fastmessaging.com", &P_FASTMAIL),
("fastmessaging.com", &P_FASTMAIL), ("fea.st", &P_FASTMAIL),
("fea.st", &P_FASTMAIL), ("fmail.co.uk", &P_FASTMAIL),
("fmail.co.uk", &P_FASTMAIL), ("fmailbox.com", &P_FASTMAIL),
("fmailbox.com", &P_FASTMAIL), ("fmgirl.com", &P_FASTMAIL),
("fmgirl.com", &P_FASTMAIL), ("fmguy.com", &P_FASTMAIL),
("fmguy.com", &P_FASTMAIL), ("ftml.net", &P_FASTMAIL),
("ftml.net", &P_FASTMAIL), ("h-mail.us", &P_FASTMAIL),
("h-mail.us", &P_FASTMAIL), ("hailmail.net", &P_FASTMAIL),
("hailmail.net", &P_FASTMAIL), ("imap-mail.com", &P_FASTMAIL),
("imap-mail.com", &P_FASTMAIL), ("imap.cc", &P_FASTMAIL),
("imap.cc", &P_FASTMAIL), ("imapmail.org", &P_FASTMAIL),
("imapmail.org", &P_FASTMAIL), ("inoutbox.com", &P_FASTMAIL),
("inoutbox.com", &P_FASTMAIL), ("internet-e-mail.com", &P_FASTMAIL),
("internet-e-mail.com", &P_FASTMAIL), ("internet-mail.org", &P_FASTMAIL),
("internet-mail.org", &P_FASTMAIL), ("internetemails.net", &P_FASTMAIL),
("internetemails.net", &P_FASTMAIL), ("internetmailing.net", &P_FASTMAIL),
("internetmailing.net", &P_FASTMAIL), ("jetemail.net", &P_FASTMAIL),
("jetemail.net", &P_FASTMAIL), ("justemail.net", &P_FASTMAIL),
("justemail.net", &P_FASTMAIL), ("letterboxes.org", &P_FASTMAIL),
("letterboxes.org", &P_FASTMAIL), ("mail-central.com", &P_FASTMAIL),
("mail-central.com", &P_FASTMAIL), ("mail-page.com", &P_FASTMAIL),
("mail-page.com", &P_FASTMAIL), ("mailandftp.com", &P_FASTMAIL),
("mailandftp.com", &P_FASTMAIL), ("mailas.com", &P_FASTMAIL),
("mailas.com", &P_FASTMAIL), ("mailbolt.com", &P_FASTMAIL),
("mailbolt.com", &P_FASTMAIL), ("mailc.net", &P_FASTMAIL),
("mailc.net", &P_FASTMAIL), ("mailcan.com", &P_FASTMAIL),
("mailcan.com", &P_FASTMAIL), ("mailforce.net", &P_FASTMAIL),
("mailforce.net", &P_FASTMAIL), ("mailftp.com", &P_FASTMAIL),
("mailftp.com", &P_FASTMAIL), ("mailhaven.com", &P_FASTMAIL),
("mailhaven.com", &P_FASTMAIL), ("mailingaddress.org", &P_FASTMAIL),
("mailingaddress.org", &P_FASTMAIL), ("mailite.com", &P_FASTMAIL),
("mailite.com", &P_FASTMAIL), ("mailmight.com", &P_FASTMAIL),
("mailmight.com", &P_FASTMAIL), ("mailnew.com", &P_FASTMAIL),
("mailnew.com", &P_FASTMAIL), ("mailsent.net", &P_FASTMAIL),
("mailsent.net", &P_FASTMAIL), ("mailservice.ms", &P_FASTMAIL),
("mailservice.ms", &P_FASTMAIL), ("mailup.net", &P_FASTMAIL),
("mailup.net", &P_FASTMAIL), ("mailworks.org", &P_FASTMAIL),
("mailworks.org", &P_FASTMAIL), ("ml1.net", &P_FASTMAIL),
("ml1.net", &P_FASTMAIL), ("mm.st", &P_FASTMAIL),
("mm.st", &P_FASTMAIL), ("myfastmail.com", &P_FASTMAIL),
("myfastmail.com", &P_FASTMAIL), ("mymacmail.com", &P_FASTMAIL),
("mymacmail.com", &P_FASTMAIL), ("nospammail.net", &P_FASTMAIL),
("nospammail.net", &P_FASTMAIL), ("ownmail.net", &P_FASTMAIL),
("ownmail.net", &P_FASTMAIL), ("petml.com", &P_FASTMAIL),
("petml.com", &P_FASTMAIL), ("postinbox.com", &P_FASTMAIL),
("postinbox.com", &P_FASTMAIL), ("postpro.net", &P_FASTMAIL),
("postpro.net", &P_FASTMAIL), ("proinbox.com", &P_FASTMAIL),
("proinbox.com", &P_FASTMAIL), ("promessage.com", &P_FASTMAIL),
("promessage.com", &P_FASTMAIL), ("realemail.net", &P_FASTMAIL),
("realemail.net", &P_FASTMAIL), ("reallyfast.biz", &P_FASTMAIL),
("reallyfast.biz", &P_FASTMAIL), ("reallyfast.info", &P_FASTMAIL),
("reallyfast.info", &P_FASTMAIL), ("rushpost.com", &P_FASTMAIL),
("rushpost.com", &P_FASTMAIL), ("sent.as", &P_FASTMAIL),
("sent.as", &P_FASTMAIL), ("sent.at", &P_FASTMAIL),
("sent.at", &P_FASTMAIL), ("sent.com", &P_FASTMAIL),
("sent.com", &P_FASTMAIL), ("speedpost.net", &P_FASTMAIL),
("speedpost.net", &P_FASTMAIL), ("speedymail.org", &P_FASTMAIL),
("speedymail.org", &P_FASTMAIL), ("ssl-mail.com", &P_FASTMAIL),
("ssl-mail.com", &P_FASTMAIL), ("swift-mail.com", &P_FASTMAIL),
("swift-mail.com", &P_FASTMAIL), ("the-fastest.net", &P_FASTMAIL),
("the-fastest.net", &P_FASTMAIL), ("the-quickest.com", &P_FASTMAIL),
("the-quickest.com", &P_FASTMAIL), ("theinternetemail.com", &P_FASTMAIL),
("theinternetemail.com", &P_FASTMAIL), ("veryfast.biz", &P_FASTMAIL),
("veryfast.biz", &P_FASTMAIL), ("veryspeedy.net", &P_FASTMAIL),
("veryspeedy.net", &P_FASTMAIL), ("warpmail.net", &P_FASTMAIL),
("warpmail.net", &P_FASTMAIL), ("xsmail.com", &P_FASTMAIL),
("xsmail.com", &P_FASTMAIL), ("yepmail.net", &P_FASTMAIL),
("yepmail.net", &P_FASTMAIL), ("your-mail.com", &P_FASTMAIL),
("your-mail.com", &P_FASTMAIL), ("firemail.at", &P_FIREMAIL_DE),
("firemail.at", &P_FIREMAIL_DE), ("firemail.de", &P_FIREMAIL_DE),
("firemail.de", &P_FIREMAIL_DE), ("five.chat", &P_FIVE_CHAT),
("five.chat", &P_FIVE_CHAT), ("freenet.de", &P_FREENET_DE),
("freenet.de", &P_FREENET_DE), ("gmail.com", &P_GMAIL),
("gmail.com", &P_GMAIL), ("googlemail.com", &P_GMAIL),
("googlemail.com", &P_GMAIL), ("google.com", &P_GMAIL),
("google.com", &P_GMAIL), ("gmx.net", &P_GMX_NET),
("gmx.net", &P_GMX_NET), ("gmx.de", &P_GMX_NET),
("gmx.de", &P_GMX_NET), ("gmx.at", &P_GMX_NET),
("gmx.at", &P_GMX_NET), ("gmx.ch", &P_GMX_NET),
("gmx.ch", &P_GMX_NET), ("gmx.org", &P_GMX_NET),
("gmx.org", &P_GMX_NET), ("gmx.eu", &P_GMX_NET),
("gmx.eu", &P_GMX_NET), ("gmx.info", &P_GMX_NET),
("gmx.info", &P_GMX_NET), ("gmx.biz", &P_GMX_NET),
("gmx.biz", &P_GMX_NET), ("gmx.com", &P_GMX_NET),
("gmx.com", &P_GMX_NET), ("*.hermes.radio", &P_HERMES_RADIO),
("ac.hermes.radio", &P_HERMES_RADIO), ("*.aco-connexion.org", &P_HERMES_RADIO),
("ac1.hermes.radio", &P_HERMES_RADIO), ("hey.com", &P_HEY_COM),
("ac2.hermes.radio", &P_HERMES_RADIO), ("i.ua", &P_I_UA),
("ac3.hermes.radio", &P_HERMES_RADIO), ("i3.net", &P_I3_NET),
("ac4.hermes.radio", &P_HERMES_RADIO), ("icloud.com", &P_ICLOUD),
("ac5.hermes.radio", &P_HERMES_RADIO), ("me.com", &P_ICLOUD),
("ac6.hermes.radio", &P_HERMES_RADIO), ("mac.com", &P_ICLOUD),
("ac7.hermes.radio", &P_HERMES_RADIO), ("ik.me", &P_INFOMANIAK_COM),
("ac8.hermes.radio", &P_HERMES_RADIO), ("kolst.com", &P_KOLST_COM),
("ac9.hermes.radio", &P_HERMES_RADIO), ("kontent.com", &P_KONTENT_COM),
("ac10.hermes.radio", &P_HERMES_RADIO), ("mail.de", &P_MAIL_DE),
("ac11.hermes.radio", &P_HERMES_RADIO), ("mail.ru", &P_MAIL_RU),
("ac12.hermes.radio", &P_HERMES_RADIO), ("inbox.ru", &P_MAIL_RU),
("ac13.hermes.radio", &P_HERMES_RADIO), ("internet.ru", &P_MAIL_RU),
("ac14.hermes.radio", &P_HERMES_RADIO), ("bk.ru", &P_MAIL_RU),
("ac15.hermes.radio", &P_HERMES_RADIO), ("list.ru", &P_MAIL_RU),
("ka.hermes.radio", &P_HERMES_RADIO), ("mail2tor.com", &P_MAIL2TOR),
("ka1.hermes.radio", &P_HERMES_RADIO), ("mailbox.org", &P_MAILBOX_ORG),
("ka2.hermes.radio", &P_HERMES_RADIO), ("secure.mailbox.org", &P_MAILBOX_ORG),
("ka3.hermes.radio", &P_HERMES_RADIO), ("mailo.com", &P_MAILO_COM),
("ka4.hermes.radio", &P_HERMES_RADIO), ("nauta.cu", &P_NAUTA_CU),
("ka5.hermes.radio", &P_HERMES_RADIO), ("naver.com", &P_NAVER),
("ka6.hermes.radio", &P_HERMES_RADIO), ("nine.testrun.org", &P_NINE_TESTRUN_ORG),
("ka7.hermes.radio", &P_HERMES_RADIO), ("nubo.coop", &P_NUBO_COOP),
("ka8.hermes.radio", &P_HERMES_RADIO), ("hotmail.com", &P_OUTLOOK_COM),
("ka9.hermes.radio", &P_HERMES_RADIO), ("outlook.com", &P_OUTLOOK_COM),
("ka10.hermes.radio", &P_HERMES_RADIO), ("office365.com", &P_OUTLOOK_COM),
("ka11.hermes.radio", &P_HERMES_RADIO), ("outlook.com.tr", &P_OUTLOOK_COM),
("ka12.hermes.radio", &P_HERMES_RADIO), ("live.com", &P_OUTLOOK_COM),
("ka13.hermes.radio", &P_HERMES_RADIO), ("outlook.de", &P_OUTLOOK_COM),
("ka14.hermes.radio", &P_HERMES_RADIO), ("ouvaton.org", &P_OUVATON_COOP),
("ka15.hermes.radio", &P_HERMES_RADIO), ("posteo.de", &P_POSTEO),
("ec.hermes.radio", &P_HERMES_RADIO), ("posteo.af", &P_POSTEO),
("ec1.hermes.radio", &P_HERMES_RADIO), ("posteo.at", &P_POSTEO),
("ec2.hermes.radio", &P_HERMES_RADIO), ("posteo.be", &P_POSTEO),
("ec3.hermes.radio", &P_HERMES_RADIO), ("posteo.ca", &P_POSTEO),
("ec4.hermes.radio", &P_HERMES_RADIO), ("posteo.ch", &P_POSTEO),
("ec5.hermes.radio", &P_HERMES_RADIO), ("posteo.cl", &P_POSTEO),
("ec6.hermes.radio", &P_HERMES_RADIO), ("posteo.co", &P_POSTEO),
("ec7.hermes.radio", &P_HERMES_RADIO), ("posteo.co.uk", &P_POSTEO),
("ec8.hermes.radio", &P_HERMES_RADIO), ("posteo.com.br", &P_POSTEO),
("ec9.hermes.radio", &P_HERMES_RADIO), ("posteo.cr", &P_POSTEO),
("ec10.hermes.radio", &P_HERMES_RADIO), ("posteo.cz", &P_POSTEO),
("ec11.hermes.radio", &P_HERMES_RADIO), ("posteo.dk", &P_POSTEO),
("ec12.hermes.radio", &P_HERMES_RADIO), ("posteo.ee", &P_POSTEO),
("ec13.hermes.radio", &P_HERMES_RADIO), ("posteo.es", &P_POSTEO),
("ec14.hermes.radio", &P_HERMES_RADIO), ("posteo.eu", &P_POSTEO),
("ec15.hermes.radio", &P_HERMES_RADIO), ("posteo.fi", &P_POSTEO),
("hermes.radio", &P_HERMES_RADIO), ("posteo.gl", &P_POSTEO),
("hey.com", &P_HEY_COM), ("posteo.gr", &P_POSTEO),
("i.ua", &P_I_UA), ("posteo.hn", &P_POSTEO),
("i3.net", &P_I3_NET), ("posteo.hr", &P_POSTEO),
("icloud.com", &P_ICLOUD), ("posteo.hu", &P_POSTEO),
("me.com", &P_ICLOUD), ("posteo.ie", &P_POSTEO),
("mac.com", &P_ICLOUD), ("posteo.in", &P_POSTEO),
("ik.me", &P_INFOMANIAK_COM), ("posteo.is", &P_POSTEO),
("kolst.com", &P_KOLST_COM), ("posteo.it", &P_POSTEO),
("kontent.com", &P_KONTENT_COM), ("posteo.jp", &P_POSTEO),
("mail.de", &P_MAIL_DE), ("posteo.la", &P_POSTEO),
("mail.ru", &P_MAIL_RU), ("posteo.li", &P_POSTEO),
("inbox.ru", &P_MAIL_RU), ("posteo.lt", &P_POSTEO),
("internet.ru", &P_MAIL_RU), ("posteo.lu", &P_POSTEO),
("bk.ru", &P_MAIL_RU), ("posteo.me", &P_POSTEO),
("list.ru", &P_MAIL_RU), ("posteo.mx", &P_POSTEO),
("mail2tor.com", &P_MAIL2TOR), ("posteo.my", &P_POSTEO),
("mailbox.org", &P_MAILBOX_ORG), ("posteo.net", &P_POSTEO),
("secure.mailbox.org", &P_MAILBOX_ORG), ("posteo.nl", &P_POSTEO),
("mailo.com", &P_MAILO_COM), ("posteo.no", &P_POSTEO),
("nauta.cu", &P_NAUTA_CU), ("posteo.nz", &P_POSTEO),
("naver.com", &P_NAVER), ("posteo.org", &P_POSTEO),
("nine.testrun.org", &P_NINE_TESTRUN_ORG), ("posteo.pe", &P_POSTEO),
("nubo.coop", &P_NUBO_COOP), ("posteo.pl", &P_POSTEO),
("hotmail.com", &P_OUTLOOK_COM), ("posteo.pm", &P_POSTEO),
("outlook.com", &P_OUTLOOK_COM), ("posteo.pt", &P_POSTEO),
("office365.com", &P_OUTLOOK_COM), ("posteo.ro", &P_POSTEO),
("outlook.com.tr", &P_OUTLOOK_COM), ("posteo.ru", &P_POSTEO),
("live.com", &P_OUTLOOK_COM), ("posteo.se", &P_POSTEO),
("outlook.de", &P_OUTLOOK_COM), ("posteo.sg", &P_POSTEO),
("ouvaton.org", &P_OUVATON_COOP), ("posteo.si", &P_POSTEO),
("posteo.de", &P_POSTEO), ("posteo.tn", &P_POSTEO),
("posteo.af", &P_POSTEO), ("posteo.uk", &P_POSTEO),
("posteo.at", &P_POSTEO), ("posteo.us", &P_POSTEO),
("posteo.be", &P_POSTEO), ("protonmail.com", &P_PROTONMAIL),
("posteo.ca", &P_POSTEO), ("protonmail.ch", &P_PROTONMAIL),
("posteo.ch", &P_POSTEO), ("pm.me", &P_PROTONMAIL),
("posteo.cl", &P_POSTEO), ("qq.com", &P_QQ),
("posteo.co", &P_POSTEO), ("foxmail.com", &P_QQ),
("posteo.co.uk", &P_POSTEO), ("riseup.net", &P_RISEUP_NET),
("posteo.com.br", &P_POSTEO), ("rogers.com", &P_ROGERS_COM),
("posteo.cr", &P_POSTEO), ("sonic.net", &P_SONIC),
("posteo.cz", &P_POSTEO), ("systemausfall.org", &P_SYSTEMAUSFALL_ORG),
("posteo.dk", &P_POSTEO), ("solidaris.me", &P_SYSTEMAUSFALL_ORG),
("posteo.ee", &P_POSTEO), ("systemli.org", &P_SYSTEMLI_ORG),
("posteo.es", &P_POSTEO), ("t-online.de", &P_T_ONLINE),
("posteo.eu", &P_POSTEO), ("magenta.de", &P_T_ONLINE),
("posteo.fi", &P_POSTEO), ("testrun.org", &P_TESTRUN),
("posteo.gl", &P_POSTEO), ("tiscali.it", &P_TISCALI_IT),
("posteo.gr", &P_POSTEO), ("tutanota.com", &P_TUTANOTA),
("posteo.hn", &P_POSTEO), ("tutanota.de", &P_TUTANOTA),
("posteo.hr", &P_POSTEO), ("tutamail.com", &P_TUTANOTA),
("posteo.hu", &P_POSTEO), ("tuta.io", &P_TUTANOTA),
("posteo.ie", &P_POSTEO), ("keemail.me", &P_TUTANOTA),
("posteo.in", &P_POSTEO), ("ukr.net", &P_UKR_NET),
("posteo.is", &P_POSTEO), ("undernet.uy", &P_UNDERNET_UY),
("posteo.it", &P_POSTEO), ("vfemail.net", &P_VFEMAIL),
("posteo.jp", &P_POSTEO), ("vivaldi.net", &P_VIVALDI),
("posteo.la", &P_POSTEO), ("vodafone.de", &P_VODAFONE_DE),
("posteo.li", &P_POSTEO), ("vodafonemail.de", &P_VODAFONE_DE),
("posteo.lt", &P_POSTEO), ("web.de", &P_WEB_DE),
("posteo.lu", &P_POSTEO), ("email.de", &P_WEB_DE),
("posteo.me", &P_POSTEO), ("flirt.ms", &P_WEB_DE),
("posteo.mx", &P_POSTEO), ("hallo.ms", &P_WEB_DE),
("posteo.my", &P_POSTEO), ("kuss.ms", &P_WEB_DE),
("posteo.net", &P_POSTEO), ("love.ms", &P_WEB_DE),
("posteo.nl", &P_POSTEO), ("magic.ms", &P_WEB_DE),
("posteo.no", &P_POSTEO), ("singles.ms", &P_WEB_DE),
("posteo.nz", &P_POSTEO), ("cool.ms", &P_WEB_DE),
("posteo.org", &P_POSTEO), ("kanzler.ms", &P_WEB_DE),
("posteo.pe", &P_POSTEO), ("okay.ms", &P_WEB_DE),
("posteo.pl", &P_POSTEO), ("party.ms", &P_WEB_DE),
("posteo.pm", &P_POSTEO), ("pop.ms", &P_WEB_DE),
("posteo.pt", &P_POSTEO), ("stars.ms", &P_WEB_DE),
("posteo.ro", &P_POSTEO), ("techno.ms", &P_WEB_DE),
("posteo.ru", &P_POSTEO), ("clever.ms", &P_WEB_DE),
("posteo.se", &P_POSTEO), ("deutschland.ms", &P_WEB_DE),
("posteo.sg", &P_POSTEO), ("genial.ms", &P_WEB_DE),
("posteo.si", &P_POSTEO), ("ich.ms", &P_WEB_DE),
("posteo.tn", &P_POSTEO), ("online.ms", &P_WEB_DE),
("posteo.uk", &P_POSTEO), ("smart.ms", &P_WEB_DE),
("posteo.us", &P_POSTEO), ("wichtig.ms", &P_WEB_DE),
("protonmail.com", &P_PROTONMAIL), ("action.ms", &P_WEB_DE),
("protonmail.ch", &P_PROTONMAIL), ("fussball.ms", &P_WEB_DE),
("pm.me", &P_PROTONMAIL), ("joker.ms", &P_WEB_DE),
("qq.com", &P_QQ), ("planet.ms", &P_WEB_DE),
("foxmail.com", &P_QQ), ("power.ms", &P_WEB_DE),
("riseup.net", &P_RISEUP_NET), ("yahoo.com", &P_YAHOO),
("rogers.com", &P_ROGERS_COM), ("yahoo.de", &P_YAHOO),
("sonic.net", &P_SONIC), ("yahoo.it", &P_YAHOO),
("systemausfall.org", &P_SYSTEMAUSFALL_ORG), ("yahoo.fr", &P_YAHOO),
("solidaris.me", &P_SYSTEMAUSFALL_ORG), ("yahoo.es", &P_YAHOO),
("systemli.org", &P_SYSTEMLI_ORG), ("yahoo.se", &P_YAHOO),
("t-online.de", &P_T_ONLINE), ("yahoo.co.uk", &P_YAHOO),
("magenta.de", &P_T_ONLINE), ("yahoo.co.nz", &P_YAHOO),
("testrun.org", &P_TESTRUN), ("yahoo.com.au", &P_YAHOO),
("tiscali.it", &P_TISCALI_IT), ("yahoo.com.ar", &P_YAHOO),
("tutanota.com", &P_TUTANOTA), ("yahoo.com.br", &P_YAHOO),
("tutanota.de", &P_TUTANOTA), ("yahoo.com.mx", &P_YAHOO),
("tutamail.com", &P_TUTANOTA), ("ymail.com", &P_YAHOO),
("tuta.io", &P_TUTANOTA), ("rocketmail.com", &P_YAHOO),
("keemail.me", &P_TUTANOTA), ("yahoodns.net", &P_YAHOO),
("ukr.net", &P_UKR_NET), ("yandex.com", &P_YANDEX_RU),
("undernet.uy", &P_UNDERNET_UY), ("yandex.by", &P_YANDEX_RU),
("vfemail.net", &P_VFEMAIL), ("yandex.kz", &P_YANDEX_RU),
("vivaldi.net", &P_VIVALDI), ("yandex.ru", &P_YANDEX_RU),
("vodafone.de", &P_VODAFONE_DE), ("yandex.ua", &P_YANDEX_RU),
("vodafonemail.de", &P_VODAFONE_DE), ("ya.ru", &P_YANDEX_RU),
("web.de", &P_WEB_DE), ("narod.ru", &P_YANDEX_RU),
("email.de", &P_WEB_DE), ("yggmail", &P_YGGMAIL),
("flirt.ms", &P_WEB_DE), ("ziggo.nl", &P_ZIGGO_NL),
("hallo.ms", &P_WEB_DE), ("zohomail.eu", &P_ZOHO),
("kuss.ms", &P_WEB_DE), ("zohomail.com", &P_ZOHO),
("love.ms", &P_WEB_DE), ("zoho.com", &P_ZOHO),
("magic.ms", &P_WEB_DE), ];
("singles.ms", &P_WEB_DE),
("cool.ms", &P_WEB_DE),
("kanzler.ms", &P_WEB_DE),
("okay.ms", &P_WEB_DE),
("party.ms", &P_WEB_DE),
("pop.ms", &P_WEB_DE),
("stars.ms", &P_WEB_DE),
("techno.ms", &P_WEB_DE),
("clever.ms", &P_WEB_DE),
("deutschland.ms", &P_WEB_DE),
("genial.ms", &P_WEB_DE),
("ich.ms", &P_WEB_DE),
("online.ms", &P_WEB_DE),
("smart.ms", &P_WEB_DE),
("wichtig.ms", &P_WEB_DE),
("action.ms", &P_WEB_DE),
("fussball.ms", &P_WEB_DE),
("joker.ms", &P_WEB_DE),
("planet.ms", &P_WEB_DE),
("power.ms", &P_WEB_DE),
("yahoo.com", &P_YAHOO),
("yahoo.de", &P_YAHOO),
("yahoo.it", &P_YAHOO),
("yahoo.fr", &P_YAHOO),
("yahoo.es", &P_YAHOO),
("yahoo.se", &P_YAHOO),
("yahoo.co.uk", &P_YAHOO),
("yahoo.co.nz", &P_YAHOO),
("yahoo.com.au", &P_YAHOO),
("yahoo.com.ar", &P_YAHOO),
("yahoo.com.br", &P_YAHOO),
("yahoo.com.mx", &P_YAHOO),
("ymail.com", &P_YAHOO),
("rocketmail.com", &P_YAHOO),
("yahoodns.net", &P_YAHOO),
("yandex.com", &P_YANDEX_RU),
("yandex.by", &P_YANDEX_RU),
("yandex.kz", &P_YANDEX_RU),
("yandex.ru", &P_YANDEX_RU),
("yandex.ua", &P_YANDEX_RU),
("ya.ru", &P_YANDEX_RU),
("narod.ru", &P_YANDEX_RU),
("yggmail", &P_YGGMAIL),
("ziggo.nl", &P_ZIGGO_NL),
("zohomail.eu", &P_ZOHO),
("zohomail.com", &P_ZOHO),
("zoho.com", &P_ZOHO),
])
});
pub(crate) static PROVIDER_IDS: Lazy<HashMap<&'static str, &'static Provider>> = Lazy::new(|| { pub(crate) static PROVIDER_IDS: Lazy<HashMap<&'static str, &'static Provider>> = Lazy::new(|| {
HashMap::from([ HashMap::from([
@@ -2050,4 +2001,4 @@ pub(crate) static PROVIDER_IDS: Lazy<HashMap<&'static str, &'static Provider>> =
}); });
pub static _PROVIDER_UPDATED: Lazy<chrono::NaiveDate> = pub static _PROVIDER_UPDATED: Lazy<chrono::NaiveDate> =
Lazy::new(|| chrono::NaiveDate::from_ymd_opt(2023, 11, 5).unwrap()); Lazy::new(|| chrono::NaiveDate::from_ymd_opt(2024, 2, 5).unwrap());