Allow leading @ in Compose/Find by username
This commit is contained in:
@@ -15,8 +15,14 @@ describe('Username', () => {
|
||||
});
|
||||
|
||||
it('matches partial username searches without discriminator', () => {
|
||||
assert.strictEqual(getUsernameFromSearch('use'), 'use');
|
||||
assert.strictEqual(getUsernameFromSearch('use.'), 'use.');
|
||||
assert.strictEqual(getUsernameFromSearch('use'), 'use.01');
|
||||
assert.strictEqual(getUsernameFromSearch('use.'), 'use.01');
|
||||
});
|
||||
|
||||
it('matches and strips leading @', () => {
|
||||
assert.strictEqual(getUsernameFromSearch('@user'), 'user.01');
|
||||
assert.strictEqual(getUsernameFromSearch('@user.'), 'user.01');
|
||||
assert.strictEqual(getUsernameFromSearch('@user.01'), 'user.01');
|
||||
});
|
||||
|
||||
it('matches valid username searches', () => {
|
||||
|
@@ -24,17 +24,21 @@ export function getUsernameFromSearch(searchTerm: string): string | undefined {
|
||||
}
|
||||
|
||||
let modifiedTerm = searchTerm;
|
||||
if (searchTerm.endsWith('.')) {
|
||||
|
||||
if (modifiedTerm.startsWith('@')) {
|
||||
modifiedTerm = modifiedTerm.slice(1);
|
||||
}
|
||||
if (modifiedTerm.endsWith('.')) {
|
||||
// Allow nicknames without full discriminator
|
||||
modifiedTerm = `${searchTerm}01`;
|
||||
} else if (!/\.\d*$/.test(searchTerm)) {
|
||||
modifiedTerm = `${modifiedTerm}01`;
|
||||
} else if (!/\.\d*$/.test(modifiedTerm)) {
|
||||
// Allow nicknames without discriminator
|
||||
modifiedTerm = `${searchTerm}.01`;
|
||||
modifiedTerm = `${modifiedTerm}.01`;
|
||||
}
|
||||
|
||||
try {
|
||||
usernames.hash(modifiedTerm);
|
||||
return searchTerm;
|
||||
return modifiedTerm;
|
||||
} catch {
|
||||
return undefined;
|
||||
}
|
||||
|
@@ -142,8 +142,13 @@ export async function checkForUsername(
|
||||
username: string
|
||||
): Promise<FoundUsernameType | undefined> {
|
||||
let hash: Buffer;
|
||||
let fixedUsername = username;
|
||||
if (fixedUsername.startsWith('@')) {
|
||||
fixedUsername = fixedUsername.slice(1);
|
||||
}
|
||||
|
||||
try {
|
||||
hash = usernames.hash(username);
|
||||
hash = usernames.hash(fixedUsername);
|
||||
} catch (error) {
|
||||
log.error('checkForUsername: invalid username', Errors.toLogFormat(error));
|
||||
return undefined;
|
||||
@@ -166,7 +171,7 @@ export async function checkForUsername(
|
||||
|
||||
return {
|
||||
aci: account.uuid,
|
||||
username,
|
||||
username: fixedUsername,
|
||||
};
|
||||
} catch (error) {
|
||||
if (error instanceof HTTPError) {
|
||||
|
Reference in New Issue
Block a user