summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--util/src/entities/Guild.ts2
-rw-r--r--util/src/entities/Message.ts4
-rw-r--r--util/src/entities/RateLimit.ts8
-rw-r--r--util/src/entities/Role.ts1
-rw-r--r--util/src/entities/User.ts38
-rw-r--r--util/src/entities/index.ts1
-rw-r--r--util/src/interfaces/Event.ts2
-rw-r--r--util/src/util/Config.ts4
-rw-r--r--util/src/util/Database.ts12
-rw-r--r--util/src/util/checkToken.ts3
10 files changed, 39 insertions, 36 deletions
diff --git a/util/src/entities/Guild.ts b/util/src/entities/Guild.ts
index 9ca4b1e4..e6a93824 100644
--- a/util/src/entities/Guild.ts
+++ b/util/src/entities/Guild.ts
@@ -158,7 +158,7 @@ export class Guild extends BaseClass {
 	vanity_url_code?: string;
 
 	@JoinColumn({ name: "vanity_url_code" })
-	@OneToOne(() => Invite, (invite: Invite) => invite.code)
+	@ManyToOne(() => Invite)
 	vanity_url?: Invite;
 
 	@Column({ nullable: true })
diff --git a/util/src/entities/Message.ts b/util/src/entities/Message.ts
index 0c41a2eb..43d0f9d0 100644
--- a/util/src/entities/Message.ts
+++ b/util/src/entities/Message.ts
@@ -148,8 +148,8 @@ export class Message extends BaseClass {
 		party_id: string;
 	};
 
-	@Column({ type: "bigint", nullable: true })
-	flags?: bigint;
+	@Column({ nullable: true })
+	flags?: string;
 
 	@RelationId((message: Message) => message.stickers)
 	sticker_ids: string[];
diff --git a/util/src/entities/RateLimit.ts b/util/src/entities/RateLimit.ts
index 3ac35df3..49af0416 100644
--- a/util/src/entities/RateLimit.ts
+++ b/util/src/entities/RateLimit.ts
@@ -7,12 +7,8 @@ export class RateLimit extends BaseClass {
 	@Column()
 	id: "global" | "error" | string; // channel_239842397 | guild_238927349823 | webhook_238923423498
 
-	@RelationId((rate_limit: RateLimit) => rate_limit.user)
-	user_id: string;
-
-	@JoinColumn({ name: "user_id" })
-	@ManyToOne(() => User, (user) => user.id)
-	user: User;
+	@Column() // no relation as it also
+	executor_id: string;
 
 	@Column()
 	hits: number;
diff --git a/util/src/entities/Role.ts b/util/src/entities/Role.ts
index 7c6ce64e..ddae7e40 100644
--- a/util/src/entities/Role.ts
+++ b/util/src/entities/Role.ts
@@ -1,4 +1,5 @@
 import { Column, Entity, JoinColumn, ManyToOne, RelationId } from "typeorm";
+
 import { BaseClass } from "./BaseClass";
 import { Guild } from "./Guild";
 
diff --git a/util/src/entities/User.ts b/util/src/entities/User.ts
index c5f870fa..73afba67 100644
--- a/util/src/entities/User.ts
+++ b/util/src/entities/User.ts
@@ -49,7 +49,7 @@ export class User extends BaseClass {
 	avatar?: string; // hash of the user avatar
 
 	@Column({ nullable: true })
-	accent_color?: number = 0; // banner color of user
+	accent_color?: number; // banner color of user
 
 	@Column({ nullable: true })
 	banner?: string; // hash of the user banner
@@ -58,52 +58,52 @@ export class User extends BaseClass {
 	phone?: string; // phone number of the user
 
 	@Column()
-	desktop: boolean = false; // if the user has desktop app installed
+	desktop: boolean; // if the user has desktop app installed
 
 	@Column()
-	mobile: boolean = false; // if the user has mobile app installed
+	mobile: boolean; // if the user has mobile app installed
 
 	@Column()
-	premium: boolean = false; // if user bought nitro
+	premium: boolean; // if user bought nitro
 
 	@Column()
-	premium_type: number = 0; // nitro level
+	premium_type: number; // nitro level
 
 	@Column()
-	bot: boolean = false; // if user is bot
+	bot: boolean; // if user is bot
 
 	@Column()
-	bio: string = ""; // short description of the user (max 190 chars -> should be configurable)
+	bio: string; // short description of the user (max 190 chars -> should be configurable)
 
 	@Column()
-	system: boolean = false; // shouldn't be used, the api sents this field type true, if the generated message comes from a system generated author
+	system: boolean; // shouldn't be used, the api sents this field type true, if the generated message comes from a system generated author
 
 	@Column()
-	nsfw_allowed: boolean = false; // if the user is older than 18 (resp. Config)
+	nsfw_allowed: boolean; // if the user is older than 18 (resp. Config)
 
 	@Column()
-	mfa_enabled: boolean = false; // if multi factor authentication is enabled
+	mfa_enabled: boolean; // if multi factor authentication is enabled
 
 	@Column()
 	created_at: Date = new Date(); // registration date
 
 	@Column()
-	verified: boolean = false; // if the user is offically verified
+	verified: boolean; // if the user is offically verified
 
 	@Column()
-	disabled: boolean = false; // if the account is disabled
+	disabled: boolean; // if the account is disabled
 
 	@Column()
-	deleted: boolean = false; // if the user was deleted
+	deleted: boolean; // if the user was deleted
 
 	@Column({ nullable: true })
 	email?: string; // email of the user
 
-	@Column({ type: "bigint" })
-	flags: bigint = BigInt(0); // UserFlags
+	@Column()
+	flags: string; // UserFlags
 
-	@Column({ type: "bigint" })
-	public_flags: bigint = BigInt(0);
+	@Column()
+	public_flags: string;
 
 	@RelationId((user: User) => user.relationships)
 	relationship_ids: string[]; // array of guild ids the user is part of
@@ -123,13 +123,13 @@ export class User extends BaseClass {
 	data: {
 		valid_tokens_since: Date; // all tokens with a previous issue date are invalid
 		hash?: string; // hash of the password, salt is saved in password (bcrypt)
-	} = { valid_tokens_since: new Date() };
+	};
 
 	@Column({ type: "simple-array" })
 	fingerprints: string[] = []; // array of fingerprints -> used to prevent multiple accounts
 
 	@Column({ type: "simple-json" })
-	settings: UserSettings = defaultSettings;
+	settings: UserSettings;
 
 	static async getPublicUser(user_id: string, opts?: FindOneOptions<User>) {
 		const user = await User.findOne(user_id, {
diff --git a/util/src/entities/index.ts b/util/src/entities/index.ts
index b9e361c1..e0246a10 100644
--- a/util/src/entities/index.ts
+++ b/util/src/entities/index.ts
@@ -14,6 +14,7 @@ export * from "./RateLimit";
 export * from "./ReadState";
 export * from "./Relationship";
 export * from "./Role";
+export * from "./Sticker";
 export * from "./Team";
 export * from "./TeamMember";
 export * from "./Template";
diff --git a/util/src/interfaces/Event.ts b/util/src/interfaces/Event.ts
index bab6f4dc..e855095c 100644
--- a/util/src/interfaces/Event.ts
+++ b/util/src/interfaces/Event.ts
@@ -515,4 +515,4 @@ export type EVENT =
 	| "RELATIONSHIP_REMOVE"
 	| CUSTOMEVENTS;
 
-export type CUSTOMEVENTS = "INVALIDATED";
+export type CUSTOMEVENTS = "INVALIDATED" | "RATELIMIT";
diff --git a/util/src/util/Config.ts b/util/src/util/Config.ts
index f8574f38..f16921bd 100644
--- a/util/src/util/Config.ts
+++ b/util/src/util/Config.ts
@@ -6,6 +6,7 @@ var config: ConfigEntity;
 
 export const Config = {
 	init: async function init() {
+		if (config) return config;
 		config = new ConfigEntity({}, { id: "0" });
 		return this.set((config.value || {}).merge(DefaultConfigOptions));
 	},
@@ -13,7 +14,8 @@ export const Config = {
 		return config.value as ConfigValue;
 	},
 	set: function set(val: any) {
-		config.value = val.merge(config.value);
+		if (!config) return;
+		config.value = val.merge(config?.value || {});
 		return config.save();
 	},
 };
diff --git a/util/src/util/Database.ts b/util/src/util/Database.ts
index f49fb04c..c22d8abd 100644
--- a/util/src/util/Database.ts
+++ b/util/src/util/Database.ts
@@ -1,5 +1,5 @@
 import "reflect-metadata";
-import { Connection, createConnection } from "typeorm";
+import { Connection, createConnection, ValueTransformer } from "typeorm";
 import * as Models from "../entities";
 
 // UUID extension option is only supported with postgres
@@ -14,10 +14,10 @@ export function initDatabase() {
 	console.log("[Database] connecting ...");
 	// @ts-ignore
 	promise = createConnection({
-		// type: "sqlite",
-		// database: "database.db",
-		type: "postgres",
-		url: "postgres://fosscord:wb94SmuURM2Syv&@localhost/fosscord",
+		type: "sqlite",
+		database: "database.db",
+		// type: "postgres",
+		// url: "postgres://fosscord:wb94SmuURM2Syv&@localhost/fosscord",
 		//
 		entities: Object.values(Models).filter((x) => x.constructor.name !== "Object"),
 		synchronize: true,
@@ -25,6 +25,8 @@ export function initDatabase() {
 		cache: {
 			duration: 1000 * 3, // cache all find queries for 3 seconds
 		},
+		bigNumberStrings: false,
+		supportBigNumbers: true,
 	});
 
 	promise.then((connection) => {
diff --git a/util/src/util/checkToken.ts b/util/src/util/checkToken.ts
index 1e203006..8415e8c0 100644
--- a/util/src/util/checkToken.ts
+++ b/util/src/util/checkToken.ts
@@ -12,7 +12,8 @@ export function checkToken(token: string, jwtSecret: string): Promise<any> {
 			const user = await User.findOne({ id: decoded.id }, { select: ["data", "bot", "disabled", "deleted"] });
 			if (!user) return rej("Invalid Token");
 			// we need to round it to seconds as it saved as seconds in jwt iat and valid_tokens_since is stored in milliseconds
-			if (decoded.iat * 1000 < user.data.valid_tokens_since.setSeconds(0, 0)) return rej("Invalid Token");
+			if (decoded.iat * 1000 < new Date(user.data.valid_tokens_since).setSeconds(0, 0))
+				return rej("Invalid Token");
 			if (user.disabled) return rej("User disabled");
 			if (user.deleted) return rej("User not found");