Add ability to set custom username discriminators.

This commit is contained in:
Alex Hart
2024-01-09 11:37:39 -04:00
committed by GitHub
parent fb75440769
commit 17a6fcafa1
12 changed files with 952 additions and 75 deletions

View File

@@ -6,9 +6,11 @@ import java.util.regex.Pattern
object UsernameUtil {
private val TAG = Log.tag(UsernameUtil::class.java)
const val MIN_LENGTH = 3
const val MAX_LENGTH = 32
private val FULL_PATTERN = Pattern.compile(String.format(Locale.US, "^[a-zA-Z_][a-zA-Z0-9_]{%d,%d}$", MIN_LENGTH - 1, MAX_LENGTH - 1), Pattern.CASE_INSENSITIVE)
const val MIN_NICKNAME_LENGTH = 3
const val MAX_NICKNAME_LENGTH = 32
const val MIN_DISCRIMINATOR_LENGTH = 2
const val MAX_DISCRIMINATOR_LENGTH = 10
private val FULL_PATTERN = Pattern.compile(String.format(Locale.US, "^[a-zA-Z_][a-zA-Z0-9_]{%d,%d}$", MIN_NICKNAME_LENGTH - 1, MAX_NICKNAME_LENGTH - 1), Pattern.CASE_INSENSITIVE)
private val DIGIT_START_PATTERN = Pattern.compile("^[0-9].*$")
private const val BASE_URL_SCHEMELESS = "signal.me/#eu/"
private const val BASE_URL = "https://$BASE_URL_SCHEMELESS"
@@ -17,8 +19,8 @@ object UsernameUtil {
String.format(
Locale.US,
"^@?[a-zA-Z_][a-zA-Z0-9_]{%d,%d}(.[0-9]+)?$",
MIN_LENGTH - 1,
MAX_LENGTH - 1,
MIN_NICKNAME_LENGTH - 1,
MAX_NICKNAME_LENGTH - 1,
Pattern.CASE_INSENSITIVE
)
)
@@ -39,10 +41,10 @@ object UsernameUtil {
value == null -> {
InvalidReason.TOO_SHORT
}
value.length < MIN_LENGTH -> {
value.length < MIN_NICKNAME_LENGTH -> {
InvalidReason.TOO_SHORT
}
value.length > MAX_LENGTH -> {
value.length > MAX_NICKNAME_LENGTH -> {
InvalidReason.TOO_LONG
}
DIGIT_START_PATTERN.matcher(value).matches() -> {
@@ -57,6 +59,26 @@ object UsernameUtil {
}
}
fun checkDiscriminator(value: String?): InvalidReason? {
return when {
value == null -> {
null
}
value.length < MIN_DISCRIMINATOR_LENGTH -> {
InvalidReason.TOO_SHORT
}
value.length > MAX_DISCRIMINATOR_LENGTH -> {
InvalidReason.TOO_LONG
}
value.toIntOrNull() == null -> {
InvalidReason.INVALID_CHARACTERS
}
else -> {
null
}
}
}
enum class InvalidReason {
TOO_SHORT,
TOO_LONG,