diff --git a/src/main/scala/gitbucket/core/controller/AccountController.scala b/src/main/scala/gitbucket/core/controller/AccountController.scala index 93d3a99..6223eb5 100644 --- a/src/main/scala/gitbucket/core/controller/AccountController.scala +++ b/src/main/scala/gitbucket/core/controller/AccountController.scala @@ -715,7 +715,7 @@ private def existsAccount: Constraint = new Constraint() { override def validate(name: String, value: String, messages: Messages): Option[String] = - if (getAccountByUserName(value).isEmpty) Some("User or group does not exist.") else None + if (getAccountByUserNameIgnoreCase(value).isEmpty) Some("User or group does not exist.") else None } private def uniqueRepository: Constraint = new Constraint() { @@ -727,7 +727,7 @@ ): Option[String] = { for { userName <- params.optionValue("owner") - _ <- getRepositoryNamesOfUser(userName).find(_ == value) + _ <- getRepositoryNamesOfUser(userName).find(_.equalsIgnoreCase(value)) } yield { "Repository already exists." } diff --git a/src/main/scala/gitbucket/core/controller/ControllerBase.scala b/src/main/scala/gitbucket/core/controller/ControllerBase.scala index ecb3d13..7c4c00b 100644 --- a/src/main/scala/gitbucket/core/controller/ControllerBase.scala +++ b/src/main/scala/gitbucket/core/controller/ControllerBase.scala @@ -349,7 +349,7 @@ protected def uniqueUserName: Constraint = new Constraint() { override def validate(name: String, value: String, messages: Messages): Option[String] = - getAccountByUserName(value, true).map { _ => + getAccountByUserNameIgnoreCase(value, true).map { _ => "User already exists." } } @@ -386,9 +386,10 @@ "groups", "new" ) + protected def reservedNames(): Constraint = new Constraint() { override def validate(name: String, value: String, messages: Messages): Option[String] = - if (allReservedNames.contains(value)) { + if (allReservedNames.contains(value.toLowerCase)) { Some(s"${value} is reserved") } else { None diff --git a/src/main/scala/gitbucket/core/controller/IndexController.scala b/src/main/scala/gitbucket/core/controller/IndexController.scala index e6f8311..528aebf 100644 --- a/src/main/scala/gitbucket/core/controller/IndexController.scala +++ b/src/main/scala/gitbucket/core/controller/IndexController.scala @@ -222,7 +222,7 @@ * Returns a single string which is any of "group", "user" or "". */ post("/_user/existence")(usersOnly { - getAccountByUserName(params("userName")).map { account => + getAccountByUserNameIgnoreCase(params("userName")).map { account => if (account.isGroupAccount) "group" else "user" } getOrElse "" }) diff --git a/src/main/scala/gitbucket/core/service/AccountService.scala b/src/main/scala/gitbucket/core/service/AccountService.scala index 543f743..65c7ae0 100644 --- a/src/main/scala/gitbucket/core/service/AccountService.scala +++ b/src/main/scala/gitbucket/core/service/AccountService.scala @@ -95,6 +95,13 @@ def getAccountByUserName(userName: String, includeRemoved: Boolean = false)(implicit s: Session): Option[Account] = Accounts filter (t => (t.userName === userName.bind) && (t.removed === false.bind, !includeRemoved)) firstOption + def getAccountByUserNameIgnoreCase(userName: String, includeRemoved: Boolean = false)( + implicit s: Session + ): Option[Account] = + Accounts filter ( + t => (t.userName.toLowerCase === userName.toLowerCase.bind) && (t.removed === false.bind, !includeRemoved) + ) firstOption + def getAccountsByUserNames(userNames: Set[String], knowns: Set[Account], includeRemoved: Boolean = false)( implicit s: Session ): Map[String, Account] = { diff --git a/src/main/twirl/gitbucket/core/account/newrepo.scala.html b/src/main/twirl/gitbucket/core/account/newrepo.scala.html index 52ad759..fa0f307 100644 --- a/src/main/twirl/gitbucket/core/account/newrepo.scala.html +++ b/src/main/twirl/gitbucket/core/account/newrepo.scala.html @@ -32,7 +32,7 @@