From d18ee78454c0d1bfbfec5772aac06460ae589947 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Fri, 28 Aug 2020 17:15:59 +0200 Subject: [PATCH] Allow wildcards in email domains Signed-off-by: Joas Schilling --- lib/Service/RegistrationService.php | 16 +++++++++++++++- .../Service/RegistrationServiceTest.php | 2 ++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/Service/RegistrationService.php b/lib/Service/RegistrationService.php index a02b2bd..89041db 100644 --- a/lib/Service/RegistrationService.php +++ b/lib/Service/RegistrationService.php @@ -222,7 +222,21 @@ class RegistrationService { foreach ($allowedDomains as $domain) { // valid domain, everything's fine - if ($mailDomain === $domain) { + + // Wildcards + if (strpos($domain, '*') !== false) { + // *.example.com + // Make save for regex: + // \*\.example\.com + $regexDomain = preg_quote($domain, '\\'); + // Replace "\*" with an actual regex wildcard and set start and end: + // /^.+\.example\.com$/ + $regexDomain = '/^' . str_replace('\\*', '.+', $regexDomain) . '$/'; + + if (preg_match($regexDomain, $mailDomain)) { + return true; + } + } elseif ($mailDomain === $domain) { return true; } } diff --git a/tests/Integration/Service/RegistrationServiceTest.php b/tests/Integration/Service/RegistrationServiceTest.php index 00413bf..0292ff6 100644 --- a/tests/Integration/Service/RegistrationServiceTest.php +++ b/tests/Integration/Service/RegistrationServiceTest.php @@ -110,6 +110,8 @@ class RegistrationServiceTest extends TestCase { ['aaaa@example.com', 'example.com'], ['aaaa@example.com', 'eXample.com'], ['aaaa@eXample.com', 'example.com'], + ['aaaa@cloud.example.com', '*.example.com'], + ['aaaa@cloud.example.com', 'cloud.example.*'], ]; }