diff --git a/project/build.scala b/project/build.scala index 61db306..d9bc7b0 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.5", - "jp.sf.amateras" %% "scalatra-forms" % "0.0.2", + "jp.sf.amateras" %% "scalatra-forms" % "0.0.4", "commons-io" % "commons-io" % "2.4", "org.pegdown" % "pegdown" % "1.4.1", "org.apache.commons" % "commons-compress" % "1.5", diff --git a/src/main/scala/app/ControllerBase.scala b/src/main/scala/app/ControllerBase.scala index a3406cc..bc71e11 100644 --- a/src/main/scala/app/ControllerBase.scala +++ b/src/main/scala/app/ControllerBase.scala @@ -15,12 +15,13 @@ import javax.servlet.http.{HttpServletResponse, HttpSession, HttpServletRequest} import java.text.SimpleDateFormat import javax.servlet.{FilterChain, ServletResponse, ServletRequest} +import org.scalatra.i18n._ /** * Provides generic features for controller implementations. */ abstract class ControllerBase extends ScalatraFilter - with ClientSideValidationFormSupport with JacksonJsonSupport with Validations { + with ClientSideValidationFormSupport with JacksonJsonSupport with I18nSupport with Validations { implicit val jsonFormats = DefaultFormats @@ -169,12 +170,12 @@ } protected def uniqueUserName: Constraint = new Constraint(){ - override def validate(name: String, value: String): Option[String] = + override def validate(name: String, value: String, messages: Messages): Option[String] = getAccountByUserName(value).map { _ => "User already exists." } } protected def uniqueMailAddress(paramName: String = ""): Constraint = new Constraint(){ - override def validate(name: String, value: String, params: Map[String, String]): Option[String] = + override def validate(name: String, value: String, params: Map[String, String], messages: Messages): 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 c596b8c..67083aa 100644 --- a/src/main/scala/app/CreateRepositoryController.scala +++ b/src/main/scala/app/CreateRepositoryController.scala @@ -4,12 +4,11 @@ import util.ControlUtil._ import util._ import service._ -import java.io.File import org.eclipse.jgit.api.Git -import org.apache.commons.io._ import jp.sf.amateras.scalatra.forms._ -import org.eclipse.jgit.lib.{FileMode, Constants, PersonIdent} +import org.eclipse.jgit.lib.{FileMode, Constants} import org.eclipse.jgit.dircache.DirCache +import org.scalatra.i18n.Messages class CreateRepositoryController extends CreateRepositoryControllerBase with RepositoryService with AccountService with WikiService with LabelsService with ActivityService @@ -175,7 +174,7 @@ } private def existsAccount: Constraint = new Constraint(){ - override def validate(name: String, value: String): Option[String] = + override def validate(name: String, value: String, messages: Messages): Option[String] = if(getAccountByUserName(value).isEmpty) Some("User or group does not exist.") else None } @@ -183,7 +182,7 @@ * Duplicate check for the repository name. */ private def unique: Constraint = new Constraint(){ - override def validate(name: String, value: String, params: Map[String, String]): Option[String] = + override def validate(name: String, value: String, params: Map[String, String], messages: Messages): 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 1366c4c..2a222bd 100644 --- a/src/main/scala/app/LabelsController.scala +++ b/src/main/scala/app/LabelsController.scala @@ -3,6 +3,7 @@ import jp.sf.amateras.scalatra.forms._ import service._ import util.CollaboratorsAuthenticator +import org.scalatra.i18n.Messages class LabelsController extends LabelsControllerBase with LabelsService with RepositoryService with AccountService with CollaboratorsAuthenticator @@ -51,7 +52,7 @@ * Constraint for the identifier such as user name, repository name or page name. */ private def labelName: Constraint = new Constraint(){ - override def validate(name: String, value: String): Option[String] = + override def validate(name: String, value: String, messages: Messages): 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 e6c1c91..05987d5 100644 --- a/src/main/scala/app/RepositorySettingsController.scala +++ b/src/main/scala/app/RepositorySettingsController.scala @@ -6,6 +6,7 @@ import jp.sf.amateras.scalatra.forms._ import org.apache.commons.io.FileUtils import org.scalatra.FlashMapSupport +import org.scalatra.i18n.Messages import service.WebHookService.WebHookPayload import util.JGitUtil.CommitInfo import util.ControlUtil._ @@ -179,7 +180,7 @@ * Provides duplication check for web hook url. */ private def webHook: Constraint = new Constraint(){ - override def validate(name: String, value: String): Option[String] = + override def validate(name: String, value: String, messages: Messages): Option[String] = getWebHookURLs(params("owner"), params("repository")).map(_.url).find(_ == value).map(_ => "URL had been registered already.") } @@ -187,7 +188,7 @@ * Provides Constraint to validate the collaborator name. */ private def collaborator: Constraint = new Constraint(){ - override def validate(name: String, value: String): Option[String] = + override def validate(name: String, value: String, messages: Messages): Option[String] = getAccountByUserName(value) match { case None => Some("User does not exist.") case Some(x) if(x.isGroupAccount) diff --git a/src/main/scala/app/WikiController.scala b/src/main/scala/app/WikiController.scala index e7eaf23..aaa88a8 100644 --- a/src/main/scala/app/WikiController.scala +++ b/src/main/scala/app/WikiController.scala @@ -7,8 +7,9 @@ import jp.sf.amateras.scalatra.forms._ import org.eclipse.jgit.api.Git import org.scalatra.FlashMapSupport -import service.WikiService.WikiPageInfo +import org.scalatra.i18n.Messages import scala.Some +import java.util.ResourceBundle class WikiController extends WikiControllerBase with WikiService with RepositoryService with AccountService with ActivityService @@ -170,12 +171,12 @@ }) private def unique: Constraint = new Constraint(){ - override def validate(name: String, value: String, params: Map[String, String]): Option[String] = + override def validate(name: String, value: String, params: Map[String, String], messages: Messages): Option[String] = getWikiPageList(params("owner"), params("repository")).find(_ == value).map(_ => "Page already exists.") } private def pagename: Constraint = new Constraint(){ - override def validate(name: String, value: String): Option[String] = + override def validate(name: String, value: String, messages: Messages): Option[String] = if(value.exists("\\/:*?\"<>|".contains(_))){ Some(s"${name} contains invalid character.") } else if(value.startsWith("_") || value.startsWith("-")){ @@ -186,7 +187,7 @@ } private def conflictForNew: Constraint = new Constraint(){ - override def validate(name: String, value: String): Option[String] = { + override def validate(name: String, value: String, messages: Messages): Option[String] = { optionIf(targetWikiPage.nonEmpty){ Some("Someone has created the wiki since you started. Please reload this page and re-apply your changes.") } @@ -194,7 +195,7 @@ } private def conflictForEdit: Constraint = new Constraint(){ - override def validate(name: String, value: String): Option[String] = { + override def validate(name: String, value: String, messages: Messages): Option[String] = { optionIf(targetWikiPage.map(_.id != params("id")).getOrElse(false)){ Some("Someone has edited the wiki since you started. Please reload this page and re-apply your changes.") } diff --git a/src/main/scala/util/Validations.scala b/src/main/scala/util/Validations.scala index 255689e..ebb0072 100644 --- a/src/main/scala/util/Validations.scala +++ b/src/main/scala/util/Validations.scala @@ -1,6 +1,7 @@ package util import jp.sf.amateras.scalatra.forms._ +import org.scalatra.i18n.Messages trait Validations { @@ -8,7 +9,7 @@ * Constraint for the identifier such as user name, repository name or page name. */ def identifier: Constraint = new Constraint(){ - override def validate(name: String, value: String): Option[String] = + override def validate(name: String, value: String, messages: Messages): Option[String] = if(!value.matches("^[a-zA-Z0-9\\-_.]+$")){ Some(s"${name} contains invalid character.") } else if(value.startsWith("_") || value.startsWith("-")){ @@ -25,7 +26,7 @@ */ def date(constraints: Constraint*): SingleValueType[java.util.Date] = new SingleValueType[java.util.Date]((pattern("\\d{4}-\\d{2}-\\d{2}") +: constraints): _*){ - def convert(value: String): java.util.Date = new java.text.SimpleDateFormat("yyyy-MM-dd").parse(value) + def convert(value: String, messages: Messages): java.util.Date = new java.text.SimpleDateFormat("yyyy-MM-dd").parse(value) } }