From e7e8f938ed483bf092590c5dca781a2e8dc6cfc3 Mon Sep 17 00:00:00 2001 From: Stefan Zermatten Date: Tue, 7 Jun 2022 23:21:48 +0200 Subject: [PATCH] Improved archive storage calculations and errors --- .../creature/archive/ArchiveCreatureFiles.js | 14 +++++--------- .../archive/methods/archiveCreatureToFile.js | 6 ++---- app/imports/ui/pages/Files.vue | 18 +++++++++++++++--- 3 files changed, 22 insertions(+), 16 deletions(-) diff --git a/app/imports/api/creature/archive/ArchiveCreatureFiles.js b/app/imports/api/creature/archive/ArchiveCreatureFiles.js index 22d5080e..1b699c0b 100644 --- a/app/imports/api/creature/archive/ArchiveCreatureFiles.js +++ b/app/imports/api/creature/archive/ArchiveCreatureFiles.js @@ -1,6 +1,8 @@ import { createS3FilesCollection } from '/imports/api/files/s3FileStorage.js'; import SimpleSchema from 'simpl-schema'; import { incrementFileStorageUsed } from '/imports/api/users/methods/updateFileStorageUsed.js'; +import { CreaturePropertySchema } from '/imports/api/creature/creatureProperties/CreatureProperties.js'; +import { CreatureSchema } from '/imports/api/creature/creatures/Creatures.js'; const ArchiveCreatureFiles = createS3FilesCollection({ collectionName: 'archiveCreatureFiles', @@ -16,7 +18,7 @@ const ArchiveCreatureFiles = createS3FilesCollection({ return true; }, onAfterUpload(file) { - incrementFileStorageUsed(file.userId, file.size); + if (Meteor.isServer) incrementFileStorageUsed(file.userId, file.size); } }); @@ -25,17 +27,11 @@ let archiveSchema = new SimpleSchema({ type: Object, blackbox: true, }, - creature: { - type: Object, - blackbox: true, - }, + creature: CreatureSchema, properties: { type: Array, }, - 'properties.$': { - type: Object, - blackbox: true, - }, + 'properties.$': CreaturePropertySchema, experiences: { type: Array, }, diff --git a/app/imports/api/creature/archive/methods/archiveCreatureToFile.js b/app/imports/api/creature/archive/methods/archiveCreatureToFile.js index 308eaccb..92b6f3bd 100644 --- a/app/imports/api/creature/archive/methods/archiveCreatureToFile.js +++ b/app/imports/api/creature/archive/methods/archiveCreatureToFile.js @@ -9,7 +9,6 @@ import CreatureLogs from '/imports/api/creature/log/CreatureLogs.js'; import Experiences from '/imports/api/creature/experience/Experiences.js'; import { removeCreatureWork } from '/imports/api/creature/creatures/methods/removeCreature.js'; import ArchiveCreatureFiles from '/imports/api/creature/archive/ArchiveCreatureFiles.js'; -import { incrementFileStorageUsed } from '/imports/api/users/methods/updateFileStorageUsed.js'; export function getArchiveObj(creatureId){ // Build the archive document @@ -32,7 +31,7 @@ export function getArchiveObj(creatureId){ return archiveCreature; } -export function archiveCreature(creatureId, userId){ +export function archiveCreature(creatureId){ const archive = getArchiveObj(creatureId); const buffer = Buffer.from(JSON.stringify(archive, null, 2)); ArchiveCreatureFiles.write(buffer, { @@ -44,12 +43,11 @@ export function archiveCreature(creatureId, userId){ creatureId: archive.creature._id, creatureName: archive.creature.name, }, - }, (error, file) => { + }, (error) => { if (error){ throw error; } else { removeCreatureWork(creatureId); - incrementFileStorageUsed(userId, file.size); } }, true); } diff --git a/app/imports/ui/pages/Files.vue b/app/imports/ui/pages/Files.vue index cfe449f5..b30856e7 100644 --- a/app/imports/ui/pages/Files.vue +++ b/app/imports/ui/pages/Files.vue @@ -42,6 +42,7 @@ @@ -183,12 +184,16 @@ export default { data = JSON.parse(fr.result); } catch (e){ self.archiveFileError = 'File could not be parsed'; + console.error(e); + return; } - console.log(data); + try { - archiveSchema.validate(data); + archiveSchema.validate(archiveSchema.clean(data)); } catch (e){ - self.archiveFileError = e.reason || e.message || e.toString(); + self.archiveFileError = 'File failed validation: ' + (e.reason || e.message || e.toString()); + console.error(e); + return; } let uploadInstance = ArchiveCreatureFiles.insert({ @@ -245,3 +250,10 @@ export default { }, } + +