diff --git a/lib/scalatra-forms_2.10-0.0.2.jar b/lib/scalatra-forms_2.10-0.0.2.jar new file mode 100644 index 000000000..ced430af6 Binary files /dev/null and b/lib/scalatra-forms_2.10-0.0.2.jar differ diff --git a/project/build.scala b/project/build.scala index cc8251e38..4f0d9dfdc 100644 --- a/project/build.scala +++ b/project/build.scala @@ -32,7 +32,7 @@ object MyBuild extends Build { "org.scalatra" %% "scalatra-specs2" % ScalatraVersion % "test", "org.scalatra" %% "scalatra-json" % ScalatraVersion, "org.json4s" %% "json4s-jackson" % "3.2.4", - "jp.sf.amateras" %% "scalatra-forms" % "0.0.1", +// "jp.sf.amateras" %% "scalatra-forms" % "0.0.1", "commons-io" % "commons-io" % "2.4", "org.pegdown" % "pegdown" % "1.3.0", "org.apache.commons" % "commons-compress" % "1.5", diff --git a/src/main/scala/app/ControllerBase.scala b/src/main/scala/app/ControllerBase.scala index c359ff2b9..ffbf7c23f 100644 --- a/src/main/scala/app/ControllerBase.scala +++ b/src/main/scala/app/ControllerBase.scala @@ -167,12 +167,12 @@ trait AccountManagementControllerBase extends ControllerBase with FileUploadCont } protected def uniqueUserName: Constraint = new Constraint(){ - def validate(name: String, value: String): Option[String] = + override def validate(name: String, value: String): Option[String] = getAccountByUserName(value).map { _ => "User already exists." } } protected def uniqueMailAddress(paramName: String = ""): Constraint = new Constraint(){ - def validate(name: String, value: String): Option[String] = + override def validate(name: String, value: String, params: Map[String, String]): Option[String] = getAccountByMailAddress(value) .filter { x => if(paramName.isEmpty) true else Some(x.userName) != params.get(paramName) } .map { _ => "Mail address is already registered." } diff --git a/src/main/scala/app/CreateRepositoryController.scala b/src/main/scala/app/CreateRepositoryController.scala index 5180bb7fe..0a9ebe7ff 100644 --- a/src/main/scala/app/CreateRepositoryController.scala +++ b/src/main/scala/app/CreateRepositoryController.scala @@ -180,7 +180,7 @@ trait CreateRepositoryControllerBase extends ControllerBase { } private def existsAccount: Constraint = new Constraint(){ - def validate(name: String, value: String): Option[String] = + override def validate(name: String, value: String): Option[String] = if(getAccountByUserName(value).isEmpty) Some("User or group does not exist.") else None } @@ -188,7 +188,7 @@ trait CreateRepositoryControllerBase extends ControllerBase { * Duplicate check for the repository name. */ private def unique: Constraint = new Constraint(){ - def validate(name: String, value: String): Option[String] = + override def validate(name: String, value: String, params: Map[String, String]): Option[String] = params.get("owner").flatMap { userName => getRepositoryNamesOfUser(userName).find(_ == value).map(_ => "Repository already exists.") } diff --git a/src/main/scala/app/LabelsController.scala b/src/main/scala/app/LabelsController.scala index e666d6797..1366c4c65 100644 --- a/src/main/scala/app/LabelsController.scala +++ b/src/main/scala/app/LabelsController.scala @@ -51,7 +51,7 @@ trait LabelsControllerBase extends ControllerBase { * Constraint for the identifier such as user name, repository name or page name. */ private def labelName: Constraint = new Constraint(){ - def validate(name: String, value: String): Option[String] = + override def validate(name: String, value: String): Option[String] = if(!value.matches("^[^,]+$")){ Some(s"${name} contains invalid character.") } else if(value.startsWith("_") || value.startsWith("-")){ diff --git a/src/main/scala/app/RepositorySettingsController.scala b/src/main/scala/app/RepositorySettingsController.scala index 14c4f9142..a6479305c 100644 --- a/src/main/scala/app/RepositorySettingsController.scala +++ b/src/main/scala/app/RepositorySettingsController.scala @@ -112,7 +112,7 @@ trait RepositorySettingsControllerBase extends ControllerBase with FlashMapSuppo * Provides Constraint to validate the collaborator name. */ private def collaborator: Constraint = new Constraint(){ - def validate(name: String, value: String): Option[String] = { + override def validate(name: String, value: String): Option[String] = { val paths = request.getRequestURI.split("/") getAccountByUserName(value) match { case None => Some("User does not exist.") diff --git a/src/main/scala/app/SystemSettingsController.scala b/src/main/scala/app/SystemSettingsController.scala index a8f87e9f0..0e824c4d2 100644 --- a/src/main/scala/app/SystemSettingsController.scala +++ b/src/main/scala/app/SystemSettingsController.scala @@ -16,16 +16,13 @@ trait SystemSettingsControllerBase extends ControllerBase with FlashMapSupport { "allowAccountRegistration" -> trim(label("Account registration", boolean())), "gravatar" -> trim(label("Gravatar", boolean())), "notification" -> trim(label("Notification", boolean())), - "smtp" -> mapping( - "host" -> trim(label("SMTP Host", text(new Constraint(){ - def validate(name: String, value: String): Option[String] = - if(params.get("notification").exists(_ == "on")) required.validate(name, value) else None - }))), + "smtp" -> optionalIfNotChecked("notification", mapping( + "host" -> trim(label("SMTP Host", text(required))), "port" -> trim(label("SMTP Port", optional(number()))), "user" -> trim(label("SMTP User", optional(text()))), "password" -> trim(label("SMTP Password", optional(text()))), "ssl" -> trim(label("Enable SSL", optional(boolean()))) - )(Smtp.apply) + )(Smtp.apply)) )(SystemSettings.apply) diff --git a/src/main/scala/app/WikiController.scala b/src/main/scala/app/WikiController.scala index c1c1feb0c..c18c473ab 100644 --- a/src/main/scala/app/WikiController.scala +++ b/src/main/scala/app/WikiController.scala @@ -136,12 +136,12 @@ trait WikiControllerBase extends ControllerBase { }) private def unique: Constraint = new Constraint(){ - def validate(name: String, value: String): Option[String] = + override def validate(name: String, value: String, params: Map[String, String]): Option[String] = getWikiPageList(params("owner"), params("repository")).find(_ == value).map(_ => "Page already exists.") } private def pagename: Constraint = new Constraint(){ - def validate(name: String, value: String): Option[String] = + override def validate(name: String, value: String): Option[String] = if(value.exists("\\/:*?\"<>|".contains(_))){ Some(s"${name} contains invalid character.") } else if(value.startsWith("_") || value.startsWith("-")){ diff --git a/src/main/scala/service/SystemSettingsService.scala b/src/main/scala/service/SystemSettingsService.scala index 0d63f6e0d..6837f70ad 100644 --- a/src/main/scala/service/SystemSettingsService.scala +++ b/src/main/scala/service/SystemSettingsService.scala @@ -11,11 +11,13 @@ trait SystemSettingsService { props.setProperty(Gravatar, settings.gravatar.toString) props.setProperty(Notification, settings.notification.toString) if(settings.notification) { - props.setProperty(SmtpHost, settings.smtp.host) - settings.smtp.port.foreach(x => props.setProperty(SmtpPort, x.toString)) - settings.smtp.user.foreach(props.setProperty(SmtpUser, _)) - settings.smtp.password.foreach(props.setProperty(SmtpPassword, _)) - settings.smtp.ssl.foreach(x => props.setProperty(SmtpSsl, x.toString)) + settings.smtp.foreach { smtp => + props.setProperty(SmtpHost, smtp.host) + smtp.port.foreach(x => props.setProperty(SmtpPort, x.toString)) + smtp.user.foreach(props.setProperty(SmtpUser, _)) + smtp.password.foreach(props.setProperty(SmtpPassword, _)) + smtp.ssl.foreach(x => props.setProperty(SmtpSsl, x.toString)) + } } props.store(new java.io.FileOutputStream(GitBucketConf), null) } @@ -30,13 +32,17 @@ trait SystemSettingsService { getValue(props, AllowAccountRegistration, false), getValue(props, Gravatar, true), getValue(props, Notification, false), - Smtp( - getValue(props, SmtpHost, ""), - getOptionValue(props, SmtpPort, Some(25)), - getOptionValue(props, SmtpUser, None), - getOptionValue(props, SmtpPassword, None), - getOptionValue[Boolean](props, SmtpSsl, None) - )) + if(getValue(props, Notification, false)){ + Some(Smtp( + getValue(props, SmtpHost, ""), + getOptionValue(props, SmtpPort, Some(25)), + getOptionValue(props, SmtpUser, None), + getOptionValue(props, SmtpPassword, None), + getOptionValue[Boolean](props, SmtpSsl, None))) + } else { + None + } + ) } } @@ -48,7 +54,7 @@ object SystemSettingsService { allowAccountRegistration: Boolean, gravatar: Boolean, notification: Boolean, - smtp: Smtp + smtp: Option[Smtp] ) case class Smtp( host: String, diff --git a/src/main/scala/util/Validations.scala b/src/main/scala/util/Validations.scala index dd383e311..cb92c0d5f 100644 --- a/src/main/scala/util/Validations.scala +++ b/src/main/scala/util/Validations.scala @@ -8,7 +8,7 @@ trait Validations { * Constraint for the identifier such as user name, repository name or page name. */ def identifier: Constraint = new Constraint(){ - def validate(name: String, value: String): Option[String] = + override def validate(name: String, value: String): Option[String] = if(!value.matches("^[a-zA-Z0-9\\-_]+$")){ Some(s"${name} contains invalid character.") } else if(value.startsWith("_") || value.startsWith("-")){ diff --git a/src/main/twirl/admin/system.scala.html b/src/main/twirl/admin/system.scala.html index b2a91caa2..9d8c9b6ff 100644 --- a/src/main/twirl/admin/system.scala.html +++ b/src/main/twirl/admin/system.scala.html @@ -39,33 +39,33 @@