summary refs log tree commit diff
path: root/src/util/entities/User.ts
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/util/entities/User.ts (renamed from util/src/entities/User.ts)59
1 files changed, 26 insertions, 33 deletions
diff --git a/util/src/entities/User.ts b/src/util/entities/User.ts

index 35aeea52..84a8a674 100644 --- a/util/src/entities/User.ts +++ b/src/util/entities/User.ts
@@ -1,4 +1,4 @@ -import { Column, Entity, FindOneOptions, JoinColumn, OneToMany } from "typeorm"; +import { BeforeInsert, BeforeUpdate, Column, Entity, FindOneOptions, JoinColumn, OneToMany } from "typeorm"; import { BaseClass } from "./BaseClass"; import { BitField } from "../util/BitField"; import { Relationship } from "./Relationship"; @@ -59,23 +59,9 @@ 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 - setDiscriminator(val: string) { - const number = Number(val); - if (val.length > 4) throw new Error("invalid discriminator"); - if (isNaN(number)) throw new Error("invalid discriminator"); - if (number <= 0 || number >= 10000) throw new Error("discriminator must be between 1 and 9999"); - val = Number(val).toString(); - this.discriminator = val.toString().padStart(4, "0"); - } - @Column({ nullable: true }) avatar?: string; // hash of the user avatar @@ -139,13 +125,6 @@ export class User extends BaseClass { @Column({ nullable: true, select: false }) email?: string; // email of the user - setEmail(val?: string) { - val = adjustEmail(val); - if (!val) throw FieldErrors({ email: { message: "Invalid email", code: "EMAIL_INVALID" } }); - if (!val.match(/([a-z\d.-]{3,})@([a-z\d.-]+).([a-z]{2,})/g)) throw FieldErrors({ email: { message: "Invalid email", code: "EMAIL_INVALID" } }); - this.email = val; - } - @Column() flags: string; // UserFlags @@ -194,6 +173,22 @@ export class User extends BaseClass { @Column({ type: "simple-json", select: false }) extended_settings: string; + @BeforeUpdate() + @BeforeInsert() + validate() { + this.email = adjustEmail(this.email); + if (!this.email) throw FieldErrors({ email: { message: "Invalid email", code: "EMAIL_INVALID" } }); + if (!this.email.match(/([a-z\d.-]{3,})@([a-z\d.-]+).([a-z]{2,})/g)) throw FieldErrors({ email: { message: "Invalid email", code: "EMAIL_INVALID" } }); + + const discrim = Number(this.discriminator); + if (this.discriminator.length > 4) throw FieldErrors({ email: { message: "Discriminator cannot be more than 4 digits.", code: "DISCRIMINATOR_INVALID" } }); + if (isNaN(discrim)) throw FieldErrors({ email: { message: "Discriminator must be a number.", code: "DISCRIMINATOR_INVALID" } }); + if (discrim <= 0 || discrim >= 10000) throw FieldErrors({ email: { message: "Discriminator must be a number.", code: "DISCRIMINATOR_INVALID" } }); + this.discriminator = discrim.toString().padStart(4, "0"); + + if (BannedWords.find(this.username)) throw FieldErrors({ username: { message: "Bad username", code: "INVALID_USERNAME" } }); + } + toPublicUser() { const user: any = {}; PublicUserProjection.forEach((x) => { @@ -203,13 +198,12 @@ export class User extends BaseClass { } static async getPublicUser(user_id: string, opts?: FindOneOptions<User>) { - return await User.findOneOrFail( - { id: user_id }, - { - ...opts, - select: [...PublicUserProjection, ...(opts?.select || [])], - } - ); + return await User.findOneOrFail({ + where: { id: user_id }, + ...opts, + //@ts-ignore + select: [...PublicUserProjection, ...(opts?.select || [])], // TODO: fix + }); } private static async generateDiscriminator(username: string): Promise<string | undefined> { @@ -273,7 +267,7 @@ export class User extends BaseClass { // if nsfw_allowed is null/undefined it'll require date_of_birth to set it to true/false const language = req.language === "en" ? "en-US" : req.language || "en-US"; - const user = new User({ + const user = User.create({ created_at: new Date(), username: username, discriminator, @@ -293,7 +287,7 @@ export class User extends BaseClass { email: email, rights: Config.get().security.defaultRights, nsfw_allowed: true, // TODO: depending on age - public_flags: "0", + public_flags: 0, flags: "0", // TODO: generate data: { hash: password, @@ -302,9 +296,8 @@ export class User extends BaseClass { settings: { ...defaultSettings, locale: language }, purchased_flags: 5, // TODO: idk what the values for this are premium_usage_flags: 2, // TODO: idk what the values for this are - extended_settings: {}, + extended_settings: "", // TODO: was {} fingerprints: [], - notes: {}, }); await user.save();