community-relations/src/api/cr.ins/routes/root.ts

33 lines
1.2 KiB
TypeScript

import { LocalStorage, Route, Server } from '../../../class';
export default class Root extends Route {
constructor(server: Server) {
super(server);
this.conf = {
path: '/',
};
}
public bind() {
this.router.get('/m/:id', async (req, res) => {
try {
const id = req.params.id.split('.')[0];
const file = await this.server.client.db.File.findOne({ identifier: id });
if (!file) return res.status(404).json({ code: this.constants.codes.NOT_FOUND, message: this.constants.messages.NOT_FOUND });
if (file.downloaded >= file.maxDownloads) return res.status(404).json({ code: this.constants.codes.NOT_FOUND, message: this.constants.messages.NOT_FOUND });
if (req.query.d === '1') {
res.contentType('text/html');
const decomp = await LocalStorage.decompress(file.data);
res.status(200).send(decomp);
} else {
res.contentType(file.mimeType);
res.status(200).send(file.data);
}
return await file.updateOne({ $inc: { downloaded: 1 } });
} catch (err) {
return this.handleError(err, res);
}
});
}
}