From e98c7dd89b410e63bfadcce81c8dd13f22537e70 Mon Sep 17 00:00:00 2001 From: shay <43248357+shayypy@users.noreply.github.com> Date: Wed, 5 Jul 2023 20:08:24 -0500 Subject: [PATCH 1/5] Username validation warning --- common/form/validators/isUsername.ts | 13 +++++++++++++ modules/message/state/editorForm.ts | 3 ++- 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 common/form/validators/isUsername.ts diff --git a/common/form/validators/isUsername.ts b/common/form/validators/isUsername.ts new file mode 100644 index 00000000..3db10de1 --- /dev/null +++ b/common/form/validators/isUsername.ts @@ -0,0 +1,13 @@ +export const isUsername = () => {return (value: string): string | false => { + for (const forbidden of ["discord", "```"]) { + if (value.toLowerCase().includes(forbidden)) { + return `Username cannot contain "${forbidden}"`; + } + } + for (const forbidden of ["everyone", "here"]) { + if (value.toLowerCase().includes(forbidden)) { + return `Username cannot be "${forbidden}"`; + } + } + return false +}} diff --git a/modules/message/state/editorForm.ts b/modules/message/state/editorForm.ts index 9662e7bd..9a82e070 100644 --- a/modules/message/state/editorForm.ts +++ b/modules/message/state/editorForm.ts @@ -8,6 +8,7 @@ import { SubForm, } from "mstform" import { isUrl } from "../../../common/form/validators/isUrl" +import { isUsername } from "../../../common/form/validators/isUsername" import { matchesRegex } from "../../../common/form/validators/matchesRegex" import { maxLength } from "../../../common/form/validators/maxLength" import { EditorManager, EditorManagerLike } from "../../editor/EditorManager" @@ -21,7 +22,7 @@ export const editorForm = new Form(EditorManager, { }), username: new Field(converters.string, { controlled: controlled.object, - validators: [maxLength(80)], + validators: [isUsername(), maxLength(80)], }), avatar: new Field(converters.string, { controlled: controlled.object, From c918fbe86ffb17465347928c06b5a9e58e8ba25f Mon Sep 17 00:00:00 2001 From: shay <43248357+shayypy@users.noreply.github.com> Date: Wed, 5 Jul 2023 20:13:05 -0500 Subject: [PATCH 2/5] Username validation in JSON editor --- modules/editor/data/validation/isMessage.ts | 3 ++- modules/editor/data/validation/isUsername.ts | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 modules/editor/data/validation/isUsername.ts diff --git a/modules/editor/data/validation/isMessage.ts b/modules/editor/data/validation/isMessage.ts index 536f5ef7..c947fb62 100644 --- a/modules/editor/data/validation/isMessage.ts +++ b/modules/editor/data/validation/isMessage.ts @@ -5,6 +5,7 @@ import { isNumber } from "./isNumber" import { isShape } from "./isShape" import { isString } from "./isString" import { isUrl } from "./isUrl" +import { isUsername } from "./isUsername" import { length } from "./length" import { noExcessiveKeys } from "./noExcessiveKeys" import { nullable } from "./nullable" @@ -26,7 +27,7 @@ export const isMessage: Validator = first( isShape({ content: optional(nullable(first(isString, length(1, 2000)))), embeds: optional(nullable(first(contains(isEmbed), length(1, 10)))), - username: optional(first(isString, length(1, 256))), + username: optional(first(isUsername, length(1, 80))), avatar_url: optional(isUrl), thread_name: optional(first(isString, length(1, 100))), flags: optional(isNumber), diff --git a/modules/editor/data/validation/isUsername.ts b/modules/editor/data/validation/isUsername.ts new file mode 100644 index 00000000..be6b5f5d --- /dev/null +++ b/modules/editor/data/validation/isUsername.ts @@ -0,0 +1,7 @@ +import { first } from "./first" +import { isString } from "./isString" +import type { Validator } from "./Validator" + +export const isUsername: Validator = first(isString, (value, key) => + !/(^(everyone|here)$)|discord|```/i.test(value as string) ? [] : [`${key}: Cannot be "here" or "everyone", cannot contain "discord" or "\`\`\`"`] +) From 1d0a256e1fe547c33085cfa88501327516905a15 Mon Sep 17 00:00:00 2001 From: shay <43248357+shayypy@users.noreply.github.com> Date: Wed, 5 Jul 2023 20:13:44 -0500 Subject: [PATCH 3/5] Format --- common/form/validators/isUsername.ts | 22 +++++++++++--------- modules/editor/data/validation/isUsername.ts | 6 +++++- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/common/form/validators/isUsername.ts b/common/form/validators/isUsername.ts index 3db10de1..fcaf4d6b 100644 --- a/common/form/validators/isUsername.ts +++ b/common/form/validators/isUsername.ts @@ -1,13 +1,15 @@ -export const isUsername = () => {return (value: string): string | false => { - for (const forbidden of ["discord", "```"]) { - if (value.toLowerCase().includes(forbidden)) { - return `Username cannot contain "${forbidden}"`; +export const isUsername = () => { + return (value: string): string | false => { + for (const forbidden of ["discord", "```"]) { + if (value.toLowerCase().includes(forbidden)) { + return `Username cannot contain "${forbidden}"` + } } - } - for (const forbidden of ["everyone", "here"]) { - if (value.toLowerCase().includes(forbidden)) { - return `Username cannot be "${forbidden}"`; + for (const forbidden of ["everyone", "here"]) { + if (value.toLowerCase().includes(forbidden)) { + return `Username cannot be "${forbidden}"` + } } + return false } - return false -}} +} diff --git a/modules/editor/data/validation/isUsername.ts b/modules/editor/data/validation/isUsername.ts index be6b5f5d..110c0729 100644 --- a/modules/editor/data/validation/isUsername.ts +++ b/modules/editor/data/validation/isUsername.ts @@ -3,5 +3,9 @@ import { isString } from "./isString" import type { Validator } from "./Validator" export const isUsername: Validator = first(isString, (value, key) => - !/(^(everyone|here)$)|discord|```/i.test(value as string) ? [] : [`${key}: Cannot be "here" or "everyone", cannot contain "discord" or "\`\`\`"`] + !/(^(everyone|here)$)|discord|```/i.test(value as string) + ? [] + : [ + `${key}: Cannot be "here" or "everyone", cannot contain "discord" or "\`\`\`"`, + ], ) From eeb17c901faa0ad1d8c53aad958ad47569293d80 Mon Sep 17 00:00:00 2001 From: shay <43248357+shayypy@users.noreply.github.com> Date: Wed, 5 Jul 2023 20:17:03 -0500 Subject: [PATCH 4/5] Cannot equal here/everyone, not include --- common/form/validators/isUsername.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/form/validators/isUsername.ts b/common/form/validators/isUsername.ts index fcaf4d6b..37901abc 100644 --- a/common/form/validators/isUsername.ts +++ b/common/form/validators/isUsername.ts @@ -6,7 +6,7 @@ export const isUsername = () => { } } for (const forbidden of ["everyone", "here"]) { - if (value.toLowerCase().includes(forbidden)) { + if (value.toLowerCase() === forbidden) { return `Username cannot be "${forbidden}"` } } From b7d7811a76e89eb30ca94d4d7453a54f34cf4855 Mon Sep 17 00:00:00 2001 From: shay <43248357+shayypy@users.noreply.github.com> Date: Wed, 5 Jul 2023 20:26:54 -0500 Subject: [PATCH 5/5] Usernames cannot contain "system message" --- common/form/validators/isUsername.ts | 2 +- modules/editor/data/validation/isUsername.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/common/form/validators/isUsername.ts b/common/form/validators/isUsername.ts index 37901abc..0aa33def 100644 --- a/common/form/validators/isUsername.ts +++ b/common/form/validators/isUsername.ts @@ -1,6 +1,6 @@ export const isUsername = () => { return (value: string): string | false => { - for (const forbidden of ["discord", "```"]) { + for (const forbidden of ["discord", "```", "system message"]) { if (value.toLowerCase().includes(forbidden)) { return `Username cannot contain "${forbidden}"` } diff --git a/modules/editor/data/validation/isUsername.ts b/modules/editor/data/validation/isUsername.ts index 110c0729..db23a137 100644 --- a/modules/editor/data/validation/isUsername.ts +++ b/modules/editor/data/validation/isUsername.ts @@ -3,9 +3,9 @@ import { isString } from "./isString" import type { Validator } from "./Validator" export const isUsername: Validator = first(isString, (value, key) => - !/(^(everyone|here)$)|discord|```/i.test(value as string) + !/(^(everyone|here)$)|discord|```|system message/i.test(value as string) ? [] : [ - `${key}: Cannot be "here" or "everyone", cannot contain "discord" or "\`\`\`"`, + `${key}: Cannot contain "discord", "system message", or "\`\`\`", and cannot be "here" or "everyone"`, ], )