* Update parser.ts * Update user.ts * Update search.ts * Update parser.ts * Update parser.ts * Update parser.ts * Update parser.ts * Update parser.ts * Update parser.ts * Update mfm.ts * Update parser.ts * Merge branch 'develop' into 3440-mk2 * Fix typo * Update parser.ts * Update mfm.ts * Update mfm.ts
This commit is contained in:
parent
82d721d60b
commit
3bcb344ecb
@ -275,7 +275,7 @@ const mfm = P.createLanguage({
|
|||||||
mention: r =>
|
mention: r =>
|
||||||
P((input, i) => {
|
P((input, i) => {
|
||||||
const text = input.substr(i);
|
const text = input.substr(i);
|
||||||
const match = text.match(/^@[a-z0-9_]+(?:@[a-z0-9\.\-]+[a-z0-9])?/i);
|
const match = text.match(/^@\w([\w-]*\w)?(?:@[\w\.\-]+\w)?/);
|
||||||
if (!match) return P.makeFailure(i, 'not a mention');
|
if (!match) return P.makeFailure(i, 'not a mention');
|
||||||
if (input[i - 1] != null && input[i - 1].match(/[a-z0-9]/i)) return P.makeFailure(i, 'not a mention');
|
if (input[i - 1] != null && input[i - 1].match(/[a-z0-9]/i)) return P.makeFailure(i, 'not a mention');
|
||||||
return P.makeSuccess(i + match[0].length, match[0]);
|
return P.makeSuccess(i + match[0].length, match[0]);
|
||||||
|
@ -155,7 +155,7 @@ export const isRemoteUser = (user: any): user is IRemoteUser =>
|
|||||||
|
|
||||||
//#region Validators
|
//#region Validators
|
||||||
export function validateUsername(username: string, remote?: boolean): boolean {
|
export function validateUsername(username: string, remote?: boolean): boolean {
|
||||||
return typeof username == 'string' && (remote ? /^\w+([\w\.-]+\w+)?$/ : /^[a-zA-Z0-9_]{1,20}$/).test(username);
|
return typeof username == 'string' && (remote ? /^\w([\w-]*\w)?$/ : /^\w{1,20}$/).test(username);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function validatePassword(password: string): boolean {
|
export function validatePassword(password: string): boolean {
|
||||||
|
@ -53,7 +53,7 @@ export const meta = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export default define(meta, (ps, me) => new Promise(async (res, rej) => {
|
export default define(meta, (ps, me) => new Promise(async (res, rej) => {
|
||||||
const isUsername = validateUsername(ps.query.replace('@', ''), true);
|
const isUsername = validateUsername(ps.query.replace('@', ''), !ps.localOnly);
|
||||||
|
|
||||||
let users: IUser[] = [];
|
let users: IUser[] = [];
|
||||||
|
|
||||||
|
16
test/mfm.ts
16
test/mfm.ts
@ -168,6 +168,22 @@ describe('Text', () => {
|
|||||||
]),
|
]),
|
||||||
node('mention', { acct: '@a', canonical: '@a', username: 'a', host: null })
|
node('mention', { acct: '@a', canonical: '@a', username: 'a', host: null })
|
||||||
], tokens3);
|
], tokens3);
|
||||||
|
|
||||||
|
const tokens4 = analyze('@\n@v\n@veryverylongusername' /* \n@toolongtobeasamention */ );
|
||||||
|
assert.deepEqual([
|
||||||
|
text('@\n'),
|
||||||
|
node('mention', { acct: '@v', canonical: '@v', username: 'v', host: null }),
|
||||||
|
text('\n'),
|
||||||
|
node('mention', { acct: '@veryverylongusername', canonical: '@veryverylongusername', username: 'veryverylongusername', host: null }),
|
||||||
|
// text('\n@toolongtobeasamention')
|
||||||
|
], tokens4);
|
||||||
|
/*
|
||||||
|
const tokens5 = analyze('@domain_is@valid.example.com\n@domain_is@.invalid\n@domain_is@invali.d\n@domain_is@invali.d\n@domain_is@-invalid.com\n@domain_is@invalid-.com');
|
||||||
|
assert.deepEqual([
|
||||||
|
node('mention', { acct: '@domain_is@valid.example.com', canonical: '@domain_is@valid.example.com', username: 'domain_is', host: 'valid.example.com' }),
|
||||||
|
text('\n@domain_is@.invalid\n@domain_is@invali.d\n@domain_is@invali.d\n@domain_is@-invalid.com\n@domain_is@invalid-.com')
|
||||||
|
], tokens5);
|
||||||
|
*/
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user