diff --git a/app/controllers/Dev.scala b/app/controllers/Dev.scala index 7e5d08c5f7..8d96f41bff 100644 --- a/app/controllers/Dev.scala +++ b/app/controllers/Dev.scala @@ -10,6 +10,7 @@ object Dev extends LilaController { private lazy val settingsList = List[lila.memo.SettingStore[_]]( Env.security.ugcArmedSetting, + Env.security.emailBlacklistSetting, Env.irwin.irwinModeSetting, Env.api.assetVersionSetting, Env.explorer.indexFlowSetting, diff --git a/modules/security/src/main/DisposableEmailDomain.scala b/modules/security/src/main/DisposableEmailDomain.scala index c1f889988d..6494facd4f 100644 --- a/modules/security/src/main/DisposableEmailDomain.scala +++ b/modules/security/src/main/DisposableEmailDomain.scala @@ -5,6 +5,7 @@ import play.api.Play.current final class DisposableEmailDomain( providerUrl: String, + blacklistStr: () => String, busOption: Option[lila.common.Bus] ) { @@ -41,7 +42,9 @@ final class DisposableEmailDomain( } def apply(domain: String) = - !DisposableEmailDomain.mainstreamDomains(domain.toLowerCase) && domains(domain) + !DisposableEmailDomain.mainstreamDomains(domain.toLowerCase) && { + domains.contains(domain) || blacklistStr().split(' ').contains(domain) + } } private object DisposableEmailDomain { diff --git a/modules/security/src/main/Env.scala b/modules/security/src/main/Env.scala index b493b50218..4120b08b7c 100644 --- a/modules/security/src/main/Env.scala +++ b/modules/security/src/main/Env.scala @@ -148,8 +148,15 @@ final class Env( lazy val emailAddressValidator = new EmailAddressValidator(disposableEmailDomain) + lazy val emailBlacklistSetting = settingStore[String]( + "emailBlacklist", + default = "", + text = "Blacklisted email domains separated by a space".some + ) + private lazy val disposableEmailDomain = new DisposableEmailDomain( providerUrl = DisposableEmailProviderUrl, + blacklistStr = emailBlacklistSetting.get, busOption = system.lilaBus.some )