diff --git a/src/main/scala/app/SystemSettingsController.scala b/src/main/scala/app/SystemSettingsController.scala index f323347..bdcb0a5 100644 --- a/src/main/scala/app/SystemSettingsController.scala +++ b/src/main/scala/app/SystemSettingsController.scala @@ -41,6 +41,7 @@ "fullNameAttribute" -> trim(label("Full name attribute", optional(text()))), "mailAttribute" -> trim(label("Mail address attribute", optional(text()))), "tls" -> trim(label("Enable TLS", optional(boolean()))), + "ssl" -> trim(label("Enable SSL", optional(boolean()))), "keystore" -> trim(label("Keystore", optional(text()))) )(Ldap.apply)) )(SystemSettings.apply).verifying { settings => diff --git a/src/main/scala/service/SystemSettingsService.scala b/src/main/scala/service/SystemSettingsService.scala index 14bc531..d0d536d 100644 --- a/src/main/scala/service/SystemSettingsService.scala +++ b/src/main/scala/service/SystemSettingsService.scala @@ -42,6 +42,7 @@ ldap.fullNameAttribute.foreach(x => props.setProperty(LdapFullNameAttribute, x)) ldap.mailAttribute.foreach(x => props.setProperty(LdapMailAddressAttribute, x)) ldap.tls.foreach(x => props.setProperty(LdapTls, x.toString)) + ldap.ssl.foreach(x => props.setProperty(LdapSsl, x.toString)) ldap.keystore.foreach(x => props.setProperty(LdapKeystore, x)) } } @@ -92,6 +93,7 @@ getOptionValue(props, LdapFullNameAttribute, None), getOptionValue(props, LdapMailAddressAttribute, None), getOptionValue[Boolean](props, LdapTls, None), + getOptionValue[Boolean](props, LdapSsl, None), getOptionValue(props, LdapKeystore, None))) } else { None @@ -134,6 +136,7 @@ fullNameAttribute: Option[String], mailAttribute: Option[String], tls: Option[Boolean], + ssl: Option[Boolean], keystore: Option[String]) case class Smtp( @@ -174,6 +177,7 @@ private val LdapFullNameAttribute = "ldap.fullname_attribute" private val LdapMailAddressAttribute = "ldap.mail_attribute" private val LdapTls = "ldap.tls" + private val LdapSsl = "ldap.ssl" private val LdapKeystore = "ldap.keystore" private def getValue[A: ClassTag](props: java.util.Properties, key: String, default: A): A = diff --git a/src/main/scala/util/LDAPUtil.scala b/src/main/scala/util/LDAPUtil.scala index ae578bd..c8d741f 100644 --- a/src/main/scala/util/LDAPUtil.scala +++ b/src/main/scala/util/LDAPUtil.scala @@ -48,6 +48,7 @@ dn = ldapSettings.bindDN.getOrElse(""), password = ldapSettings.bindPassword.getOrElse(""), tls = ldapSettings.tls.getOrElse(false), + ssl = ldapSettings.ssl.getOrElse(false), keystore = ldapSettings.keystore.getOrElse(""), error = "System LDAP authentication failed." ){ conn => @@ -65,6 +66,7 @@ dn = userDN, password = password, tls = ldapSettings.tls.getOrElse(false), + ssl = ldapSettings.ssl.getOrElse(false), keystore = ldapSettings.keystore.getOrElse(""), error = "User LDAP Authentication Failed." ){ conn => @@ -96,7 +98,7 @@ }).replaceAll("[^a-zA-Z0-9\\-_.]", "").replaceAll("^[_\\-]", "") } - private def bind[A](host: String, port: Int, dn: String, password: String, tls: Boolean, keystore: String, error: String) + private def bind[A](host: String, port: Int, dn: String, password: String, tls: Boolean, ssl: Boolean, keystore: String, error: String) (f: LDAPConnection => Either[String, A]): Either[String, A] = { if (tls) { // Dynamically set Sun as the security provider @@ -109,7 +111,13 @@ } } - val conn: LDAPConnection = new LDAPConnection(new LDAPJSSEStartTLSFactory()) + val conn: LDAPConnection = + if(ssl) { + new LDAPConnection(new LDAPJSSESecureSocketFactory()) + }else { + new LDAPConnection(new LDAPJSSEStartTLSFactory()) + } + try { // Connect to the server conn.connect(host, port) diff --git a/src/main/twirl/admin/system.scala.html b/src/main/twirl/admin/system.scala.html index 9379672..1d06745 100644 --- a/src/main/twirl/admin/system.scala.html +++ b/src/main/twirl/admin/system.scala.html @@ -170,6 +170,13 @@