diff --git a/src/util/entities/Member.ts b/src/util/entities/Member.ts
index 2cabd858..404d2ce7 100644
--- a/src/util/entities/Member.ts
+++ b/src/util/entities/Member.ts
@@ -44,6 +44,12 @@ export const MemberPrivateProjection: (keyof Member)[] = [
"roles",
"settings",
"user",
+ "avatar",
+ "banner",
+ "bio",
+ "theme_colors",
+ "pronouns",
+ "communication_disabled_until",
];
@Entity({
diff --git a/src/util/util/Token.ts b/src/util/util/Token.ts
index 3de05aa2..57634953 100644
--- a/src/util/util/Token.ts
+++ b/src/util/util/Token.ts
@@ -147,8 +147,31 @@ export async function generateToken(id: string) {
});
}
+let lastFsCheck: number;
+let cachedKeypair: {
+ privateKey: crypto.KeyObject;
+ publicKey: crypto.KeyObject;
+ fingerprint: string;
+}
+
// Get ECDSA keypair from file or generate it
export async function loadOrGenerateKeypair() {
+ if (cachedKeypair) {
+ // check for file deletion every minute
+ if (Date.now() - lastFsCheck > 60000) {
+ if (!existsSync("jwt.key") || !existsSync("jwt.key.pub")) {
+ console.log("[JWT] Keypair files disappeared... Saving them again.");
+ await Promise.all([
+ fs.writeFile("jwt.key", cachedKeypair.privateKey.export({ format: "pem", type: "sec1" })),
+ fs.writeFile("jwt.key.pub", cachedKeypair.publicKey.export({ format: "pem", type: "spki" })),
+ ]);
+ }
+ lastFsCheck = Date.now();
+ }
+
+ return cachedKeypair;
+ }
+
let privateKey: crypto.KeyObject;
let publicKey: crypto.KeyObject;
@@ -185,5 +208,6 @@ export async function loadOrGenerateKeypair() {
.update(publicKey.export({ format: "pem", type: "spki" }))
.digest("hex");
- return { privateKey, publicKey, fingerprint };
+ lastFsCheck = Date.now();
+ return cachedKeypair = { privateKey, publicKey, fingerprint };
}
|