forked from lichess-org/lila
-
Notifications
You must be signed in to change notification settings - Fork 0
/
DataForm.scala
43 lines (34 loc) · 1.07 KB
/
DataForm.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package lila.security
import lila.user.tube.userTube
import lila.db.api.$count
import play.api.data._
import play.api.data.Forms._
import play.api.data.validation.Constraints
final class DataForm(val captcher: lila.hub.ActorLazyRef) extends lila.hub.CaptchedForm {
import DataForm._
val signup = Form(mapping(
"username" -> nonEmptyText.verifying(
Constraints minLength 2,
Constraints maxLength 20,
Constraints.pattern(
regex = """^[\w-]+$""".r,
error = "Invalid username. Please use only letters, numbers and dash")
),
"password" -> text(minLength = 4),
"gameId" -> nonEmptyText,
"move" -> nonEmptyText
)(SignupData.apply)(_ ⇒ None)
.verifying("This user already exists", d ⇒ !userExists(d).await)
.verifying(captchaFailMessage, validateCaptcha _)
)
def signupWithCaptcha = withCaptcha(signup)
private def userExists(data: SignupData) =
$count.exists(data.username.toLowerCase)
}
object DataForm {
case class SignupData(
username: String,
password: String,
gameId: String,
move: String)
}