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.*'], ]; }