mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-06 21:45:50 +01:00
(refs #19)Add unique checking for mail address.
This commit is contained in:
@@ -16,15 +16,15 @@ trait AccountControllerBase extends ControllerBase {
|
|||||||
case class AccountEditForm(password: Option[String], mailAddress: String, url: Option[String])
|
case class AccountEditForm(password: Option[String], mailAddress: String, url: Option[String])
|
||||||
|
|
||||||
val newForm = mapping(
|
val newForm = mapping(
|
||||||
"userName" -> trim(label("User name" , text(required, maxlength(100), identifier, unique))),
|
"userName" -> trim(label("User name" , text(required, maxlength(100), identifier, uniqueUserName))),
|
||||||
"password" -> trim(label("Password" , text(required, maxlength(20)))),
|
"password" -> trim(label("Password" , text(required, maxlength(20)))),
|
||||||
"mailAddress" -> trim(label("Mail Address" , text(required, maxlength(100)))),
|
"mailAddress" -> trim(label("Mail Address" , text(required, maxlength(100), uniqueMailAddress()))),
|
||||||
"url" -> trim(label("URL" , optional(text(maxlength(200)))))
|
"url" -> trim(label("URL" , optional(text(maxlength(200)))))
|
||||||
)(AccountNewForm.apply)
|
)(AccountNewForm.apply)
|
||||||
|
|
||||||
val editForm = mapping(
|
val editForm = mapping(
|
||||||
"password" -> trim(label("Password" , optional(text(maxlength(20))))),
|
"password" -> trim(label("Password" , optional(text(maxlength(20))))),
|
||||||
"mailAddress" -> trim(label("Mail Address" , text(required, maxlength(100)))),
|
"mailAddress" -> trim(label("Mail Address" , text(required, maxlength(100), uniqueMailAddress("userName")))),
|
||||||
"url" -> trim(label("URL" , optional(text(maxlength(200)))))
|
"url" -> trim(label("URL" , optional(text(maxlength(200)))))
|
||||||
)(AccountEditForm.apply)
|
)(AccountEditForm.apply)
|
||||||
|
|
||||||
@@ -67,9 +67,18 @@ trait AccountControllerBase extends ControllerBase {
|
|||||||
} else NotFound
|
} else NotFound
|
||||||
}
|
}
|
||||||
|
|
||||||
private def unique: Constraint = new Constraint(){
|
// TODO Merge with UserManagementController
|
||||||
|
private def uniqueUserName: Constraint = new Constraint(){
|
||||||
def validate(name: String, value: String): Option[String] =
|
def validate(name: String, value: String): Option[String] =
|
||||||
getAccountByUserName(value).map { _ => "User already exists." }
|
getAccountByUserName(value).map { _ => "User already exists." }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO Merge with UserManagementController
|
||||||
|
private def uniqueMailAddress(paramName: String = ""): Constraint = new Constraint(){
|
||||||
|
def validate(name: String, value: String): Option[String] =
|
||||||
|
getAccountByMailAddress(value)
|
||||||
|
.filter { x => if(paramName.isEmpty) true else Some(x.userName) != params.get(paramName) }
|
||||||
|
.map { _ => "Mail address is already registered." }
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,9 +13,9 @@ trait UserManagementControllerBase extends ControllerBase { self: AccountService
|
|||||||
case class UserEditForm(userName: String, password: Option[String], mailAddress: String, isAdmin: Boolean, url: Option[String])
|
case class UserEditForm(userName: String, password: Option[String], mailAddress: String, isAdmin: Boolean, url: Option[String])
|
||||||
|
|
||||||
val newForm = mapping(
|
val newForm = mapping(
|
||||||
"userName" -> trim(label("Username" , text(required, maxlength(100), identifier, unique))),
|
"userName" -> trim(label("Username" , text(required, maxlength(100), identifier, uniqueUserName))),
|
||||||
"password" -> trim(label("Password" , text(required, maxlength(20)))),
|
"password" -> trim(label("Password" , text(required, maxlength(20)))),
|
||||||
"mailAddress" -> trim(label("Mail Address" , text(required, maxlength(100)))),
|
"mailAddress" -> trim(label("Mail Address" , text(required, maxlength(100), uniqueMailAddress()))),
|
||||||
"isAdmin" -> trim(label("User Type" , boolean())),
|
"isAdmin" -> trim(label("User Type" , boolean())),
|
||||||
"url" -> trim(label("URL" , optional(text(maxlength(200)))))
|
"url" -> trim(label("URL" , optional(text(maxlength(200)))))
|
||||||
)(UserNewForm.apply)
|
)(UserNewForm.apply)
|
||||||
@@ -23,7 +23,7 @@ trait UserManagementControllerBase extends ControllerBase { self: AccountService
|
|||||||
val editForm = mapping(
|
val editForm = mapping(
|
||||||
"userName" -> trim(label("Username" , text(required, maxlength(100), identifier))),
|
"userName" -> trim(label("Username" , text(required, maxlength(100), identifier))),
|
||||||
"password" -> trim(label("Password" , optional(text(maxlength(20))))),
|
"password" -> trim(label("Password" , optional(text(maxlength(20))))),
|
||||||
"mailAddress" -> trim(label("Mail Address" , text(required, maxlength(100)))),
|
"mailAddress" -> trim(label("Mail Address" , text(required, maxlength(100), uniqueMailAddress("userName")))),
|
||||||
"isAdmin" -> trim(label("User Type" , boolean())),
|
"isAdmin" -> trim(label("User Type" , boolean())),
|
||||||
"url" -> trim(label("URL" , optional(text(maxlength(200)))))
|
"url" -> trim(label("URL" , optional(text(maxlength(200)))))
|
||||||
)(UserEditForm.apply)
|
)(UserEditForm.apply)
|
||||||
@@ -59,9 +59,18 @@ trait UserManagementControllerBase extends ControllerBase { self: AccountService
|
|||||||
} getOrElse NotFound
|
} getOrElse NotFound
|
||||||
})
|
})
|
||||||
|
|
||||||
private def unique: Constraint = new Constraint(){
|
// TODO Merge with AccountController?
|
||||||
|
private def uniqueUserName: Constraint = new Constraint(){
|
||||||
def validate(name: String, value: String): Option[String] =
|
def validate(name: String, value: String): Option[String] =
|
||||||
getAccountByUserName(value).map { _ => "User already exists." }
|
getAccountByUserName(value).map { _ => "User already exists." }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO Merge with AccountController?
|
||||||
|
private def uniqueMailAddress(paramName: String = ""): Constraint = new Constraint(){
|
||||||
|
def validate(name: String, value: String): Option[String] =
|
||||||
|
getAccountByMailAddress(value)
|
||||||
|
.filter { x => if(paramName.isEmpty) true else Some(x.userName) != params.get(paramName) }
|
||||||
|
.map { _ => "Mail address is already registered." }
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -10,6 +10,9 @@ trait AccountService {
|
|||||||
def getAccountByUserName(userName: String): Option[Account] =
|
def getAccountByUserName(userName: String): Option[Account] =
|
||||||
Query(Accounts) filter(_.userName is userName.bind) firstOption
|
Query(Accounts) filter(_.userName is userName.bind) firstOption
|
||||||
|
|
||||||
|
def getAccountByMailAddress(mailAddress: String): Option[Account] =
|
||||||
|
Query(Accounts) filter(_.mailAddress is mailAddress.bind) firstOption
|
||||||
|
|
||||||
def getAllUsers(): List[Account] = Query(Accounts) sortBy(_.userName) list
|
def getAllUsers(): List[Account] = Query(Accounts) sortBy(_.userName) list
|
||||||
|
|
||||||
def createAccount(userName: String, password: String, mailAddress: String, isAdmin: Boolean, url: Option[String]): Unit =
|
def createAccount(userName: String, password: String, mailAddress: String, isAdmin: Boolean, url: Option[String]): Unit =
|
||||||
|
|||||||
Reference in New Issue
Block a user