From 889535574d032816deb6d3716c5f50b74d2fa819 Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Wed, 23 Aug 2017 12:19:00 -0500 Subject: [PATCH] historically, usernames can start with a number. Let them login. --- modules/security/src/main/DataForm.scala | 2 +- modules/user/src/main/User.scala | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/modules/security/src/main/DataForm.scala b/modules/security/src/main/DataForm.scala index 11c5525196..c2c9673b48 100644 --- a/modules/security/src/main/DataForm.scala +++ b/modules/security/src/main/DataForm.scala @@ -35,7 +35,7 @@ final class DataForm( Constraints minLength 2, Constraints maxLength 20, Constraints.pattern( - regex = User.usernameRegex, + regex = User.newUsernameRegex, error = "usernameInvalid" ) ).verifying("usernameUnacceptable", u => !LameName.username(u)) diff --git a/modules/user/src/main/User.scala b/modules/user/src/main/User.scala index b8a7da0600..f97e59d985 100644 --- a/modules/user/src/main/User.scala +++ b/modules/user/src/main/User.scala @@ -140,8 +140,12 @@ object User { // No: contact@lichess.org, @1, http://example.com/@happy0 val atUsernameRegex = """(?<=\s|^)@(?>([a-zA-Z_-][\w-]{1,19}))(?![\w-])""".r - val usernameRegex = """(?i)[a-z][\w-]*[a-z0-9]""".r - def couldBeUsername(str: String) = usernameRegex.pattern.matcher(str).matches + // what existing usernames are like + val historicalUsernameRegex = """(?i)[\w-]*[a-z0-9]""".r + // what new usernames should be like + val newUsernameRegex = """(?i)[a-z][\w-]*[a-z0-9]""".r + + def couldBeUsername(str: String) = historicalUsernameRegex.pattern.matcher(str).matches def normalize(username: String) = username.toLowerCase