summary refs log tree commit diff
path: root/util/src/entities/User.ts
diff options
context:
space:
mode:
authorMadeline <46743919+MaddyUnderStars@users.noreply.github.com>2022-09-11 23:19:55 +1000
committerMadeline <46743919+MaddyUnderStars@users.noreply.github.com>2022-09-12 00:12:45 +1000
commitb504edae92542003a4137c1ecaab8a9a66b995cb (patch)
tree4aa9e4881d0345f7c016cdcf2cc869f0110c867f /util/src/entities/User.ts
parentTrash ip logging for rate limits (diff)
downloadserver-b504edae92542003a4137c1ecaab8a9a66b995cb.tar.xz
Primitive banned words blocking
Diffstat (limited to 'util/src/entities/User.ts')
-rw-r--r--util/src/entities/User.ts22
1 files changed, 13 insertions, 9 deletions
diff --git a/util/src/entities/User.ts b/util/src/entities/User.ts
index cac2784a..230d6d82 100644
--- a/util/src/entities/User.ts
+++ b/util/src/entities/User.ts
@@ -3,9 +3,8 @@ import { BaseClass } from "./BaseClass";
 import { BitField } from "../util/BitField";
 import { Relationship } from "./Relationship";
 import { ConnectedAccount } from "./ConnectedAccount";
-import { Config, FieldErrors, Snowflake, trimSpecial } from "..";
+import { Config, FieldErrors, Snowflake, trimSpecial, BannedWords } from "..";
 import { Member, Session } from ".";
-import { Note } from "./Note";
 
 export enum PublicUserEnum {
 	username,
@@ -49,7 +48,7 @@ export const PrivateUserProjection = [
 // Private user data that should never get sent to the client
 export type PublicUser = Pick<User, PublicUserKeys>;
 
-export interface UserPublic extends Pick<User, PublicUserKeys> {}
+export interface UserPublic extends Pick<User, PublicUserKeys> { }
 
 export interface UserPrivate extends Pick<User, PrivateUserKeys> {
 	locale: string;
@@ -60,6 +59,11 @@ export class User extends BaseClass {
 	@Column()
 	username: string; // username max length 32, min 2 (should be configurable)
 
+	setUsername(val: string) {
+		if (BannedWords.find(val)) throw FieldErrors({ username: { message: "Bad username", code: "INVALID_USERNAME" } });
+		this.username = val;
+	}
+
 	@Column()
 	discriminator: string; // opaque string: 4 digits on discord.com
 
@@ -90,7 +94,7 @@ export class User extends BaseClass {
 
 	@Column()
 	premium: boolean; // if user bought individual premium
-	
+
 	@Column()
 	premium_type: number; // individual premium level
 
@@ -105,7 +109,7 @@ export class User extends BaseClass {
 
 	@Column({ select: false })
 	nsfw_allowed: boolean; // if the user can do age-restricted actions (NSFW channels/guilds/commands)
-	
+
 	@Column({ select: false })
 	mfa_enabled: boolean; // if multi factor authentication is enabled
 
@@ -176,7 +180,7 @@ export class User extends BaseClass {
 
 	@Column({ type: "simple-json", select: false })
 	settings: UserSettings;
-		
+
 	// workaround to prevent fossord-unaware clients from deleting settings not used by them
 	@Column({ type: "simple-json", select: false })
 	extended_settings: string;
@@ -202,7 +206,7 @@ export class User extends BaseClass {
 	private static async generateDiscriminator(username: string): Promise<string | undefined> {
 		if (Config.get().register.incrementingDiscriminators) {
 			// discriminator will be incrementally generated
-			
+
 			// First we need to figure out the currently highest discrimnator for the given username and then increment it
 			const users = await User.find({ where: { username }, select: ["discriminator"] });
 			const highestDiscriminator = Math.max(0, ...users.map((u) => Number(u.discriminator)));
@@ -299,7 +303,7 @@ export class User extends BaseClass {
 		setImmediate(async () => {
 			if (Config.get().guild.autoJoin.enabled) {
 				for (const guild of Config.get().guild.autoJoin.guilds || []) {
-					await Member.addToGuild(user.id, guild).catch((e) => {});
+					await Member.addToGuild(user.id, guild).catch((e) => { });
 				}
 			}
 		});
@@ -366,7 +370,7 @@ export interface UserSettings {
 	disable_games_tab: boolean;
 	enable_tts_command: boolean;
 	explicit_content_filter: number;
-	friend_source_flags: { all: boolean };
+	friend_source_flags: { all: boolean; };
 	gateway_connected: boolean;
 	gif_auto_play: boolean;
 	// every top guild is displayed as a "folder"