/* globals FileUploadBase:true, UploadFS */ /* exported FileUploadBase */ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; import _ from 'underscore'; UploadFS.config.defaultStorePermissions = new UploadFS.StorePermissions({ insert(userId, doc) { if (userId) { return true; } // allow inserts from slackbridge (message_id = slack-timestamp-milli) if (doc && doc.message_id && doc.message_id.indexOf('slack-') === 0) { return true; } // allow inserts to the UserDataFiles store if (doc && doc.store && doc.store.split(':').pop() === 'UserDataFiles') { return true; } if (RocketChat.authz.canAccessRoom(null, null, doc)) { return true; } return false; }, update(userId, doc) { return RocketChat.authz.hasPermission(Meteor.userId(), 'delete-message', doc.rid) || (RocketChat.settings.get('Message_AllowDeleting') && userId === doc.userId); }, remove(userId, doc) { return RocketChat.authz.hasPermission(Meteor.userId(), 'delete-message', doc.rid) || (RocketChat.settings.get('Message_AllowDeleting') && userId === doc.userId); }, }); FileUploadBase = class FileUploadBase { constructor(store, meta, file) { this.id = Random.id(); this.meta = meta; this.file = file; this.store = store; } getProgress() { } getFileName() { return this.meta.name; } start(callback) { this.handler = new UploadFS.Uploader({ store: this.store, data: this.file, file: this.meta, onError: (err) => callback(err), onComplete: (fileData) => { const file = _.pick(fileData, '_id', 'type', 'size', 'name', 'identify', 'description'); file.url = fileData.url.replace(Meteor.absoluteUrl(), '/'); return callback(null, file, this.store.options.name); }, }); this.handler.onProgress = (file, progress) => { this.onProgress(progress); }; return this.handler.start(); } onProgress() {} stop() { return this.handler.stop(); } };