full
This commit is contained in:
@@ -1,4 +1,8 @@
|
||||
const { validateUsername, USERNAME_MAX_LENGTH } = require('./usernameValidation')
|
||||
const {
|
||||
validateUsername,
|
||||
USERNAME_MIN_LENGTH,
|
||||
USERNAME_MAX_LENGTH,
|
||||
} = require('./usernameValidation')
|
||||
|
||||
const escapeRegex = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
|
||||
|
||||
@@ -12,18 +16,27 @@ const isUsernameTaken = async (UserModel, userName, excludeUserId) => {
|
||||
return true
|
||||
}
|
||||
|
||||
const padBase = (base) => {
|
||||
let value = base.replace(/[^a-zA-Z0-9._-]/g, '')
|
||||
if (!/^[a-zA-Z0-9]/.test(value)) value = `u${value}`
|
||||
while (value.length < USERNAME_MIN_LENGTH - 2) {
|
||||
value = `${value}0`
|
||||
}
|
||||
return value.slice(0, Math.max(USERNAME_MIN_LENGTH - 2, 1))
|
||||
}
|
||||
|
||||
const buildCandidates = (base, attempt) => {
|
||||
const random2 = () => String(Math.floor(Math.random() * 90 + 10))
|
||||
const random3 = () => String(Math.floor(Math.random() * 900 + 100))
|
||||
const random4 = () => String(Math.floor(Math.random() * 9000 + 1000))
|
||||
const stem = padBase(base)
|
||||
|
||||
const builders = [
|
||||
() => `${base}_${random2()}`,
|
||||
() => `${base}.${random2()}`,
|
||||
() => `${base}${random3()}`,
|
||||
() => `${base}-${random2()}`,
|
||||
() => `${base}_${random3()}`,
|
||||
() => `${base}${random4()}`,
|
||||
() => `${stem}${random2()}`,
|
||||
() => `${stem}_${random2()}`,
|
||||
() => `${stem}.${random2()}`,
|
||||
() => `${stem}-${random2()}`,
|
||||
() => `${stem}${random3()}`,
|
||||
() => `${stem.slice(0, Math.max(USERNAME_MIN_LENGTH - 3, 1))}${random3()}`,
|
||||
]
|
||||
|
||||
return builders[attempt % builders.length]()
|
||||
@@ -37,7 +50,7 @@ const generateUsernameSuggestions = async (UserModel, baseUserName, excludeUserI
|
||||
const suggestions = []
|
||||
let attempt = 0
|
||||
|
||||
while (suggestions.length < 3 && attempt < 30) {
|
||||
while (suggestions.length < 3 && attempt < 40) {
|
||||
const candidate = trimToMax(buildCandidates(base, attempt))
|
||||
attempt += 1
|
||||
|
||||
|
||||
Reference in New Issue
Block a user