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 0000000..ced430a --- /dev/null +++ b/lib/scalatra-forms_2.10-0.0.2.jar Binary files differ diff --git a/project/build.scala b/project/build.scala index cc8251e..4f0d9df 100644 --- a/project/build.scala +++ b/project/build.scala @@ -32,7 +32,7 @@ "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 c359ff2..ffbf7c2 100644 --- a/src/main/scala/app/ControllerBase.scala +++ b/src/main/scala/app/ControllerBase.scala @@ -167,12 +167,12 @@ } 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 5180bb7..0a9ebe7 100644 --- a/src/main/scala/app/CreateRepositoryController.scala +++ b/src/main/scala/app/CreateRepositoryController.scala @@ -180,7 +180,7 @@ } 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 @@ * 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 e666d67..1366c4c 100644 --- a/src/main/scala/app/LabelsController.scala +++ b/src/main/scala/app/LabelsController.scala @@ -51,7 +51,7 @@ * 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 14c4f91..a647930 100644 --- a/src/main/scala/app/RepositorySettingsController.scala +++ b/src/main/scala/app/RepositorySettingsController.scala @@ -112,7 +112,7 @@ * 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 a8f87e9..0e824c4 100644 --- a/src/main/scala/app/SystemSettingsController.scala +++ b/src/main/scala/app/SystemSettingsController.scala @@ -16,16 +16,13 @@ "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 c1c1feb..c18c473 100644 --- a/src/main/scala/app/WikiController.scala +++ b/src/main/scala/app/WikiController.scala @@ -136,12 +136,12 @@ }) 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 0d63f6e..6837f70 100644 --- a/src/main/scala/service/SystemSettingsService.scala +++ b/src/main/scala/service/SystemSettingsService.scala @@ -11,11 +11,13 @@ 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 @@ 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 @@ 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 dd383e3..cb92c0d 100644 --- a/src/main/scala/util/Validations.scala +++ b/src/main/scala/util/Validations.scala @@ -8,7 +8,7 @@ * 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 b2a91ca..9d8c9b6 100644 --- a/src/main/twirl/admin/system.scala.html +++ b/src/main/twirl/admin/system.scala.html @@ -39,33 +39,33 @@
- - + +
- - + +
- +
- +
diff --git a/src/main/webapp/assets/common/js/validation.js b/src/main/webapp/assets/common/js/validation.js index fc9875c..2840677 100644 --- a/src/main/webapp/assets/common/js/validation.js +++ b/src/main/webapp/assets/common/js/validation.js @@ -34,6 +34,6 @@ function displayErrors(data){ $.each(data, function(key, value){ - $('#error-' + key).text(value); + $('#error-' + key.split('.').join('_')).text(value); }); } \ No newline at end of file