3
0
Fork 0
mirror of https://github.com/ZeppelinBot/Zeppelin.git synced 2025-05-10 12:25:02 +00:00

feat: download data exports directly from the server without a JS download step

This commit is contained in:
Dragory 2021-11-03 01:14:41 +02:00
parent fc4f106afb
commit 9c1568b911
No known key found for this signature in database
GPG key ID: 5F387BA66DF8AAC1
7 changed files with 320 additions and 42 deletions

View file

@ -81,7 +81,7 @@ export function initAuth(app: express.Express) {
passport.use(
"api-token",
new CustomStrategy(async (req, cb) => {
const apiKey = req.header("X-Api-Key");
const apiKey = req.header("X-Api-Key") || req.body?.["X-Api-Key"];
if (!apiKey) return cb("API key missing");
const userId = await apiLogins.getUserIdByApiKey(apiKey);

View file

@ -7,6 +7,7 @@ import { z } from "zod";
import { Case } from "../../data/entities/Case";
import { rateLimit } from "../rateLimits";
import { MINUTES } from "../../utils";
import moment from "moment-timezone";
const caseHandlingModeSchema = z.union([
z.literal("replace"),
@ -167,7 +168,13 @@ export function initGuildsImportExportAPI(guildRouter: express.Router) {
}
} while (cases.length === exportBatchSize);
res.json(data);
const filename = `export_${req.params.guildId}_${moment().format("YYYY-MM-DD_HH-mm-ss")}.json`;
const serialized = JSON.stringify(data, null, 2);
res.setHeader("Content-Disposition", `attachment; filename=${filename}`);
res.setHeader("Content-Type", "application/octet-stream");
res.setHeader("Content-Length", serialized.length);
res.send(serialized);
},
);

View file

@ -7,6 +7,7 @@ import { initDocs } from "./docs";
import { initGuildsAPI } from "./guilds/index";
import { clientError, error, notFound } from "./responses";
import { startBackgroundTasks } from "./tasks";
import multer from "multer";
const app = express();
@ -20,6 +21,7 @@ app.use(
limit: "10mb",
}),
);
app.use(multer().none());
initAuth(app);
initGuildsAPI(app);