summary refs log tree commit diff
path: root/src/util
diff options
context:
space:
mode:
Diffstat (limited to 'src/util')
-rw-r--r--src/util/entities/Attachment.ts17
-rw-r--r--src/util/entities/Message.ts2
-rw-r--r--src/util/util/Config.ts33
3 files changed, 32 insertions, 20 deletions
diff --git a/src/util/entities/Attachment.ts b/src/util/entities/Attachment.ts

index ab001cbe..ff9643fc 100644 --- a/src/util/entities/Attachment.ts +++ b/src/util/entities/Attachment.ts
@@ -20,6 +20,7 @@ import { BeforeRemove, Column, Entity, JoinColumn, ManyToOne, RelationId } from import { Config, deleteFile } from "../util"; import { BaseClass } from "./BaseClass"; import { getUrlSignature, NewUrlUserSignatureData, NewUrlSignatureData } from "../Signing"; +import { PublicAttachment } from "../../schemas/api/messages/Attachments"; @Entity({ name: "attachments", @@ -45,7 +46,7 @@ export class Attachment extends BaseClass { message_id: string; @Column({ nullable: true }) - @RelationId((attachment: Attachment) => attachment.message) + @RelationId((attachment: Attachment) => attachment.channel) channel_id: string; @JoinColumn({ name: "message_id" }) @@ -55,25 +56,27 @@ export class Attachment extends BaseClass { message: import("./Message").Message; @JoinColumn({ name: "channel_id" }) - @ManyToOne(() => require("./Channel").Channel, (message: import("./Message").Message) => message.attachments, { + @ManyToOne(() => require("./Channel").Channel, { onDelete: "CASCADE", }) channel: import("./Channel").Channel; @BeforeRemove() onDelete() { - return deleteFile(new URL(this.url).pathname); + return deleteFile(new URL(this.toJSON().url).pathname); } toJSON() { + const channelId = this.channel_id ?? this.channel?.id ?? this.message?.channel_id; + const messageId = this.message_id ?? this.message?.id; return { ...this, - url: `${Config.get().cdn.endpointPublic}/attachments/${this.channel_id}/${this.message_id}/${this.filename}`, - proxy_url: `${Config.get().cdn.endpointPublic}/attachments/${this.channel_id}/${this.message_id}/${this.filename}`, + url: `${Config.get().cdn.endpointPublic}/attachments/${channelId}/${messageId}/${this.filename}`, + proxy_url: `${Config.get().cdn.endpointPublic}/attachments/${channelId}/${messageId}/${this.filename}`, }; } - signUrls(data: NewUrlUserSignatureData): Attachment { - const att = this.toJSON(); + signUrls(data: NewUrlUserSignatureData): PublicAttachment { + const att = Attachment.prototype.toJSON.apply(this); return { ...att, url: getUrlSignature(new NewUrlSignatureData({ ...data, url: att.url })) diff --git a/src/util/entities/Message.ts b/src/util/entities/Message.ts
index 23e699b5..7c5d6b6d 100644 --- a/src/util/entities/Message.ts +++ b/src/util/entities/Message.ts
@@ -284,7 +284,7 @@ export class Message extends BaseClass { mention_roles: this.mention_roles?.map((role) => role.id) ?? [], mention_channels: this.mention_channels?.map((ch) => ch.toJSON()) ?? [], - attachments: this.attachments ?? [], + attachments: this.attachments?.map((att) => att.toJSON()) ?? [], nonce: this.nonce ?? undefined, tts: this.tts ?? false, diff --git a/src/util/util/Config.ts b/src/util/util/Config.ts
index 27f0b450..42bb0744 100644 --- a/src/util/util/Config.ts +++ b/src/util/util/Config.ts
@@ -54,24 +54,33 @@ export class Config { config = OrmUtils.mergeDeep({}, { ...new ConfigValue() }, config); // TODO: factor this out someday - if (process.env.CDN_SIGNATURE_PATH) config.security.cdnSignatureKey = (await fs.readFile(process.env.CDN_SIGNATURE_PATH, "utf-8")).trim(); - if (process.env.LEGACY_JWT_SECRET_PATH) config.security.jwtSecret = (await fs.readFile(process.env.LEGACY_JWT_SECRET_PATH, "utf-8")).trim(); - if (process.env.MAILJET_API_KEY_PATH) config.email.mailjet.apiKey = (await fs.readFile(process.env.MAILJET_API_KEY_PATH, "utf-8")).trim(); - if (process.env.MAILJET_API_SECRET_PATH) config.email.mailjet.apiSecret = (await fs.readFile(process.env.MAILJET_API_SECRET_PATH, "utf-8")).trim(); - if (process.env.SMTP_PASSWORD_PATH) config.email.smtp.password = (await fs.readFile(process.env.SMTP_PASSWORD_PATH, "utf-8")).trim(); - if (process.env.GIF_API_KEY_PATH) config.gif.apiKey = (await fs.readFile(process.env.GIF_API_KEY_PATH, "utf-8")).trim(); + if (process.env.CDN_SIGNATURE_PATH) config.security.cdnSignatureKey = await Config.readSecret("CDN_SIGNATURE_PATH"); + if (process.env.LEGACY_JWT_SECRET_PATH) config.security.jwtSecret = await Config.readSecret("LEGACY_JWT_SECRET_PATH"); + if (process.env.MAILJET_API_KEY_PATH) config.email.mailjet.apiKey = await Config.readSecret("MAILJET_API_KEY_PATH"); + if (process.env.MAILJET_API_SECRET_PATH) config.email.mailjet.apiSecret = await Config.readSecret("MAILJET_API_SECRET_PATH"); + if (process.env.SMTP_PASSWORD_PATH) config.email.smtp.password = await Config.readSecret("SMTP_PASSWORD_PATH"); + if (process.env.GIF_API_KEY_PATH) config.gif.apiKey = await Config.readSecret("GIF_API_KEY_PATH"); if (process.env.RABBITMQ_HOST) config.rabbitmq.host = process.env.RABBITMQ_HOST.trim(); - if (process.env.RABBITMQ_HOST_PATH) config.rabbitmq.host = (await fs.readFile(process.env.RABBITMQ_HOST_PATH, "utf-8")).trim(); - if (process.env.ABUSEIPDB_API_KEY_PATH) config.security.abuseIpDbApiKey = (await fs.readFile(process.env.ABUSEIPDB_API_KEY_PATH, "utf-8")).trim(); - if (process.env.CAPTCHA_SECRET_KEY_PATH) config.security.captcha.secret = (await fs.readFile(process.env.CAPTCHA_SECRET_KEY_PATH, "utf-8")).trim(); - if (process.env.CAPTCHA_SITE_KEY_PATH) config.security.captcha.sitekey = (await fs.readFile(process.env.CAPTCHA_SITE_KEY_PATH, "utf-8")).trim(); - if (process.env.IPDATA_API_KEY_PATH) config.security.ipdataApiKey = (await fs.readFile(process.env.IPDATA_API_KEY_PATH, "utf-8")).trim(); - if (process.env.REQUEST_SIGNATURE_PATH) config.security.requestSignature = (await fs.readFile(process.env.REQUEST_SIGNATURE_PATH, "utf-8")).trim(); + if (process.env.RABBITMQ_HOST_PATH) config.rabbitmq.host = await Config.readSecret("RABBITMQ_HOST_PATH"); + if (process.env.ABUSEIPDB_API_KEY_PATH) config.security.abuseIpDbApiKey = await Config.readSecret("ABUSEIPDB_API_KEY_PATH"); + if (process.env.CAPTCHA_SECRET_KEY_PATH) config.security.captcha.secret = await Config.readSecret("CAPTCHA_SECRET_KEY_PATH"); + if (process.env.CAPTCHA_SITE_KEY_PATH) config.security.captcha.sitekey = await Config.readSecret("CAPTCHA_SITE_KEY_PATH"); + if (process.env.IPDATA_API_KEY_PATH) config.security.ipdataApiKey = await Config.readSecret("IPDATA_API_KEY_PATH"); + if (process.env.REQUEST_SIGNATURE_PATH) config.security.requestSignature = await Config.readSecret("REQUEST_SIGNATURE_PATH"); await this.set(config); validateFinalConfig(config); return config; } + + private static async readSecret(name: string) { + process.stdout.write(`[Config] Reading secret ${name}...`); + const res = (await fs.readFile(process.env[name]!, "utf-8")).trim(); + if (process.env.LOG_SECRET_VALUES) process.stdout.write(" " + res); + else process.stdout.write(" Done!"); + process.stdout.write("\n"); + return res; + } public static get() { if (!config) { // If we haven't initialised the config yet, return default config.