mirror of
https://github.com/spacebarchat/server.git
synced 2026-05-12 03:44:51 +00:00
Fix attachments
This commit is contained in:
@@ -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 }))
|
||||
|
||||
@@ -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,
|
||||
|
||||
+21
-12
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user