aboutsummaryrefslogtreecommitdiff
path: root/src/api
diff options
context:
space:
mode:
authorPitu <[email protected]>2020-12-27 04:27:56 +0900
committerPitu <[email protected]>2020-12-27 04:27:56 +0900
commite97fee48441717f3b508ac855339d0fb8210be53 (patch)
treee7a2b9617736dc239d43e22e0b6dfc3c31e83d78 /src/api
parentSquashed commit of the following: (diff)
downloadhost.fuwn.me-e97fee48441717f3b508ac855339d0fb8210be53.tar.xz
host.fuwn.me-e97fee48441717f3b508ac855339d0fb8210be53.zip
Fixes chunked uploads not being saved to albums or thumbnails
Diffstat (limited to 'src/api')
-rw-r--r--src/api/routes/uploads/chunksPOST.js21
-rw-r--r--src/api/routes/uploads/uploadPOST.js61
-rw-r--r--src/api/utils/Util.js54
3 files changed, 70 insertions, 66 deletions
diff --git a/src/api/routes/uploads/chunksPOST.js b/src/api/routes/uploads/chunksPOST.js
index 061cfb0..ee95227 100644
--- a/src/api/routes/uploads/chunksPOST.js
+++ b/src/api/routes/uploads/chunksPOST.js
@@ -12,7 +12,10 @@ class uploadPOST extends Route {
});
}
- async run(req, res) {
+ async run(req, res, db) {
+ const user = await Util.isAuthorized(req);
+ if (!user && process.env.PUBLIC_MODE === 'false') return res.status(401).json({ message: 'Not authorized to use this resource' });
+
const filename = Util.getUniqueFilename(randomstring.generate(32));
// console.log('Files', req.body.files);
const info = {
@@ -40,6 +43,7 @@ class uploadPOST extends Route {
// Save some data
info.name = `${filename}${ext || ''}`;
info.url += `${filename}${ext || ''}`;
+ info.data = chunk;
for (let i = 0; i < chunkDir.length; i++) {
const dir = path.join(__dirname,
@@ -54,15 +58,18 @@ class uploadPOST extends Route {
await jetpack.removeAsync(chunkOutput);
}
+ Util.generateThumbnails(info.name);
+ const insertedId = await Util.saveFileToDatabase(req, res, user, db, info, {
+ originalname: info.data.original, mimetype: info.data.type
+ });
+ if (!insertedId) return res.status(500).json({ message: 'There was an error saving the file.' });
+ info.deleteUrl = `${process.env.DOMAIN}/api/file/${insertedId[0]}`;
+ Util.saveFileToAlbum(db, req.headers.albumid, insertedId);
+ delete info.chunk;
+
return res.status(201).send({
message: 'Sucessfully merged the chunk(s).',
...info
- /*
- name: `${filename}${ext || ''}`,
- size: exists.size,
- url: `${process.env.DOMAIN}/${exists.name}`,
- deleteUrl: `${process.env.DOMAIN}/api/file/${exists.id}`
- */
});
}
}
diff --git a/src/api/routes/uploads/uploadPOST.js b/src/api/routes/uploads/uploadPOST.js
index 5458d48..5d04da1 100644
--- a/src/api/routes/uploads/uploadPOST.js
+++ b/src/api/routes/uploads/uploadPOST.js
@@ -106,7 +106,7 @@ class uploadPOST extends Route {
if (!remappedKeys || !remappedKeys.uuid) {
Util.generateThumbnails(uploadedFile.name);
- insertedId = await this.saveFileToDatabase(req, res, user, db, uploadedFile, file);
+ insertedId = await Util.saveFileToDatabase(req, res, user, db, uploadedFile, file);
if (!insertedId) return res.status(500).json({ message: 'There was an error saving the file.' });
uploadedFile.deleteUrl = `${process.env.DOMAIN}/api/file/${insertedId[0]}`;
@@ -114,7 +114,7 @@ class uploadPOST extends Route {
If the upload had an album specified we make sure to create the relation
and update the according timestamps..
*/
- this.saveFileToAlbum(db, albumId, insertedId);
+ Util.saveFileToAlbum(db, albumId, insertedId);
}
uploadedFile = Util.constructFilePublicLink(uploadedFile);
@@ -151,62 +151,6 @@ class uploadPOST extends Route {
return exists;
}
- async saveFileToAlbum(db, albumId, insertedId) {
- if (!albumId) return;
-
- const now = moment.utc().toDate();
- try {
- await db.table('albumsFiles').insert({ albumId, fileId: insertedId[0] });
- await db.table('albums').where('id', albumId).update('editedAt', now);
- } catch (error) {
- console.error(error);
- }
- }
-
- async saveFileToDatabase(req, res, user, db, file, originalFile) {
- /*
- Save the upload information to the database
- */
- const now = moment.utc().toDate();
- let insertedId = null;
- try {
- /*
- This is so fucking dumb
- */
- if (process.env.DB_CLIENT === 'sqlite3') {
- insertedId = await db.table('files').insert({
- userId: user ? user.id : null,
- name: file.name,
- original: originalFile.originalname,
- type: originalFile.mimetype || '',
- size: file.size,
- hash: file.hash,
- ip: req.ip,
- createdAt: now,
- editedAt: now
- });
- } else {
- insertedId = await db.table('files').insert({
- userId: user ? user.id : null,
- name: file.name,
- original: originalFile.originalname,
- type: originalFile.mimetype || '',
- size: file.size,
- hash: file.hash,
- ip: req.ip,
- createdAt: now,
- editedAt: now
- }, 'id');
- }
- return insertedId;
- } catch (error) {
- console.error('There was an error saving the file to the database');
- console.error(error);
- return null;
- // return res.status(500).json({ message: 'There was an error uploading the file.' });
- }
- }
-
_remapKeys(body) {
const keys = Object.keys(body);
if (keys.length) {
@@ -217,7 +161,6 @@ class uploadPOST extends Route {
}
return body;
}
- return keys;
}
}
diff --git a/src/api/utils/Util.js b/src/api/utils/Util.js
index 35d726e..905f217 100644
--- a/src/api/utils/Util.js
+++ b/src/api/utils/Util.js
@@ -226,6 +226,60 @@ class Util {
}
static generateThumbnails = ThumbUtil.generateThumbnails;
+ static async saveFileToDatabase(req, res, user, db, file, originalFile) {
+ /*
+ Save the upload information to the database
+ */
+ const now = moment.utc().toDate();
+ let insertedId = null;
+ try {
+ /*
+ This is so fucking dumb
+ */
+ if (process.env.DB_CLIENT === 'sqlite3') {
+ insertedId = await db.table('files').insert({
+ userId: user ? user.id : null,
+ name: file.name,
+ original: originalFile.originalname,
+ type: originalFile.mimetype || '',
+ size: file.size,
+ hash: file.hash,
+ ip: req.ip,
+ createdAt: now,
+ editedAt: now
+ });
+ } else {
+ insertedId = await db.table('files').insert({
+ userId: user ? user.id : null,
+ name: file.name,
+ original: originalFile.originalname,
+ type: originalFile.mimetype || '',
+ size: file.size,
+ hash: file.hash,
+ ip: req.ip,
+ createdAt: now,
+ editedAt: now
+ }, 'id');
+ }
+ return insertedId;
+ } catch (error) {
+ console.error('There was an error saving the file to the database');
+ console.error(error);
+ return null;
+ }
+ }
+
+ static async saveFileToAlbum(db, albumId, insertedId) {
+ if (!albumId) return;
+
+ const now = moment.utc().toDate();
+ try {
+ await db.table('albumsFiles').insert({ albumId, fileId: insertedId[0] });
+ await db.table('albums').where('id', albumId).update('editedAt', now);
+ } catch (error) {
+ console.error(error);
+ }
+ }
}
module.exports = Util;