').appendTo($table);
- $('').text(Messages.upload_name).appendTo($thead);
- $(' | ').text(Messages.upload_size).appendTo($thead);
- $(' | ').text(Messages.upload_progress).appendTo($thead);
- $(' | ').text(Messages.cancel).appendTo($thead);
-
- var createTableContainer = function ($body) {
- File.$container = $('', { id: 'uploadStatusContainer' }).append($table).appendTo($body);
- return File.$container;
- };
-
- var getData = function (file, href) {
- var data = {};
-
- data.name = file.metadata.name;
- data.url = href;
- if (file.metadata.type.slice(0,6) === 'image/') {
- data.mediatag = true;
- }
-
- return data;
- };
-
- var upload = function (file) {
- var blob = file.blob; // This is not a blob but an array buffer
- var u8 = new Uint8Array(blob);
- var metadata = file.metadata;
- var id = file.id;
- if (queue.inProgress) { return; }
- queue.inProgress = true;
-
- var $row = $table.find('tr[id="'+id+'"]');
-
- $row.find('.upCancel').html('-');
- var $pv = $row.find('.progressValue');
- var $pb = $row.find('.progressContainer');
- var $pc = $row.find('.upProgress');
- var $link = $row.find('.upLink');
-
- var updateProgress = function (progressValue) {
- $pv.text(Math.round(progressValue*100)/100 + '%');
- $pb.css({
- width: (progressValue/100)*$pc.width()+'px'
- });
- };
-
- var onComplete = function (href) {
- $link.attr('href', href)
- .click(function (e) {
- e.preventDefault();
- window.open($link.attr('href'), '_blank');
- });
- var title = metadata.name;
- common.log(Messages._getKey('upload_success', [title]));
- common.prepareFeedback('upload')();
-
- if (config.onUploaded) {
- var data = getData(file, href);
- config.onUploaded(file.dropEvent, data);
- }
-
- queue.inProgress = false;
- queue.next();
- };
-
- var onError = function (e) {
- queue.inProgress = false;
- queue.next();
- if (e === 'TOO_LARGE') {
- // TODO update table to say too big?
- return void common.alert(Messages.upload_tooLarge);
- }
- if (e === 'NOT_ENOUGH_SPACE') {
- // TODO update table to say not enough space?
- return void common.alert(Messages.upload_notEnoughSpace);
- }
- console.error(e);
- return void common.alert(Messages.upload_serverError);
- };
-
- var onPending = function (cb) {
- common.confirm(Messages.upload_uploadPending, function (yes) {
- if (!yes) { return; }
- cb();
- });
- };
-
- file.blob = u8;
- module.upload(file, config.noStore, common, updateProgress, onComplete, onError, onPending);
- };
-
- var prettySize = function (bytes) {
- var kB = common.bytesToKilobytes(bytes);
- if (kB < 1024) { return kB + Messages.KB; }
- var mB = common.bytesToMegabytes(bytes);
- return mB + Messages.MB;
- };
-
- queue.next = function () {
- if (queue.queue.length === 0) {
- queue.to = window.setTimeout(function () {
- if (config.keepTable) { return; }
- File.$container.fadeOut();
- }, 3000);
- return;
- }
- if (queue.inProgress) { return; }
- File.$container.show();
- var file = queue.queue.shift();
- upload(file);
- };
- queue.push = function (obj) {
- var id = uid();
- obj.id = id;
- queue.queue.push(obj);
-
- $table.show();
- var estimate = FileCrypto.computeEncryptedSize(obj.blob.byteLength, obj.metadata);
-
- var $progressBar = $(' ', {'class':'progressContainer'});
- var $progressValue = $(' ', {'class':'progressValue'}).text(Messages.upload_pending);
-
- var $tr = $('', {id: id}).appendTo($table);
-
- var $cancel = $('', {'class': 'cancel fa fa-times'}).click(function () {
- queue.queue = queue.queue.filter(function (el) { return el.id !== id; });
- $cancel.remove();
- $tr.find('.upCancel').text('-');
- $tr.find('.progressValue').text(Messages.upload_cancelled);
- });
-
- var $link = $('', {
- 'class': 'upLink',
- 'rel': 'noopener noreferrer'
- }).text(obj.metadata.name);
-
- $('').append($link).appendTo($tr);
- $(' | ').text(prettySize(estimate)).appendTo($tr);
- $(' | ', {'class': 'upProgress'}).append($progressBar).append($progressValue).appendTo($tr);
- $(' | ', {'class': 'upCancel'}).append($cancel).appendTo($tr);
-
- queue.next();
- };
-
- var handleFile = File.handleFile = function (file, e, thumbnail) {
- var thumb;
- var file_arraybuffer;
- var finish = function () {
- var metadata = {
- name: file.name,
- type: file.type,
- };
- if (thumb) { metadata.thumbnail = thumb; }
- queue.push({
- blob: file_arraybuffer,
- metadata: metadata,
- dropEvent: e
- });
- };
-
- blobToArrayBuffer(file, function (e, buffer) {
- if (e) { console.error(e); }
- file_arraybuffer = buffer;
- if (thumbnail) { // there is already a thumbnail
- return blobToArrayBuffer(thumbnail, function (e, buffer) {
- if (e) { console.error(e); }
- thumb = arrayBufferToString(buffer);
- finish();
- });
- }
-
- if (!Thumb.isSupportedType(file.type)) { return finish(); }
- // make a resized thumbnail from the image..
- Thumb.fromBlob(file, function (e, thumb64) {
- if (e) { console.error(e); }
- if (!thumb64) { return finish(); }
- thumb = thumb64;
- finish();
- });
- });
- };
-
- var onFileDrop = File.onFileDrop = function (file, e) {
- if (!common.isLoggedIn()) {
- return common.alert(common.Messages.upload_mustLogin);
- }
-
- Array.prototype.slice.call(file).forEach(function (d) {
- handleFile(d, e);
- });
- };
-
- var createAreaHandlers = File.createDropArea = function ($area, $hoverArea) {
- var counter = 0;
- if (!$hoverArea) { $hoverArea = $area; }
- if (!$area) { return; }
- $hoverArea
- .on('dragenter', function (e) {
- e.preventDefault();
- e.stopPropagation();
- counter++;
- $hoverArea.addClass('hovering');
- })
- .on('dragleave', function (e) {
- e.preventDefault();
- e.stopPropagation();
- counter--;
- if (counter <= 0) {
- $hoverArea.removeClass('hovering');
- }
- });
-
- $area
- .on('drag dragstart dragend dragover drop dragenter dragleave', function (e) {
- e.preventDefault();
- e.stopPropagation();
- })
- .on('drop', function (e) {
- e.stopPropagation();
-
- var dropped = e.originalEvent.dataTransfer.files;
- counter = 0;
- $hoverArea.removeClass('hovering');
- onFileDrop(dropped, e);
- });
- };
-
- var createUploader = function ($area, $hover, $body) {
- if (!config.noHandlers) {
- createAreaHandlers($area, null);
- }
- createTableContainer($body);
- };
-
- createUploader(config.dropArea, config.hoverArea, config.body);
-
- return File;
- };
-
- return module;
-});
diff --git a/www/common/common-hash.js b/www/common/common-hash.js
index 2aa2155bf..c40919aa1 100644
--- a/www/common/common-hash.js
+++ b/www/common/common-hash.js
@@ -1,9 +1,8 @@
define([
'/common/common-util.js',
- '/common/common-interface.js',
'/bower_components/chainpad-crypto/crypto.js',
'/bower_components/tweetnacl/nacl-fast.min.js'
-], function (Util, UI, Crypto) {
+], function (Util, Crypto) {
var Nacl = window.nacl;
var Hash = {};
@@ -211,14 +210,12 @@ Version 1
secret.keys = Crypto.createEditCryptor(parsed.key);
secret.key = secret.keys.editKeyStr;
if (secret.channel.length !== 32 || secret.key.length !== 24) {
- UI.alert("The channel key and/or the encryption key is invalid");
throw new Error("The channel key and/or the encryption key is invalid");
}
}
else if (parsed.mode === 'view') {
secret.keys = Crypto.createViewCryptor(parsed.key);
if (secret.channel.length !== 32) {
- UI.alert("The channel key is invalid");
throw new Error("The channel key is invalid");
}
}
diff --git a/www/common/common-history.js b/www/common/common-history.js
deleted file mode 100644
index 6dea29ab7..000000000
--- a/www/common/common-history.js
+++ /dev/null
@@ -1,268 +0,0 @@
-define([
- 'jquery',
- '/bower_components/chainpad-json-validator/json-ot.js',
- '/bower_components/chainpad-crypto/crypto.js',
- '/bower_components/chainpad/chainpad.dist.js',
-], function ($, JsonOT, Crypto) {
- var ChainPad = window.ChainPad;
- var History = {};
-
- var getStates = function (rt) {
- var states = [];
- var b = rt.getAuthBlock();
- if (b) { states.unshift(b); }
- while (b.getParent()) {
- b = b.getParent();
- states.unshift(b);
- }
- return states;
- };
-
- var loadHistory = function (config, common, cb) {
- var network = common.getNetwork();
- var hkn = network.historyKeeper;
-
- var wcId = common.hrefToHexChannelId(config.href || window.location.href);
-
- var createRealtime = function () {
- return ChainPad.create({
- userName: 'history',
- initialState: '',
- transformFunction: JsonOT.validate,
- logLevel: 0,
- noPrune: true
- });
- };
- var realtime = createRealtime();
-
- var parsed = config.href ? common.parsePadUrl(config.href) : {};
- var secret = common.getSecrets(parsed.type, parsed.hash);
-
- History.readOnly = 0;
- if (!secret.keys) {
- secret.keys = secret.key;
- History.readOnly = 0;
- }
- else if (!secret.keys.validateKey) {
- History.readOnly = 1;
- }
-
- var crypto = Crypto.createEncryptor(secret.keys);
-
- var to = window.setTimeout(function () {
- cb('[GET_FULL_HISTORY_TIMEOUT]');
- }, 30000);
-
- var parse = function (msg) {
- try {
- return JSON.parse(msg);
- } catch (e) {
- return null;
- }
- };
- var onMsg = function (msg) {
- var parsed = parse(msg);
- if (parsed[0] === 'FULL_HISTORY_END') {
- console.log('END');
- window.clearTimeout(to);
- cb(null, realtime);
- return;
- }
- if (parsed[0] !== 'FULL_HISTORY') { return; }
- if (parsed[1] && parsed[1].validateKey) { // First message
- secret.keys.validateKey = parsed[1].validateKey;
- return;
- }
- msg = parsed[1][4];
- if (msg) {
- msg = msg.replace(/^cp\|/, '');
- var decryptedMsg = crypto.decrypt(msg, secret.keys.validateKey);
- realtime.message(decryptedMsg);
- }
- };
-
- network.on('message', function (msg) {
- onMsg(msg);
- });
-
- network.sendto(hkn, JSON.stringify(['GET_FULL_HISTORY', wcId, secret.keys.validateKey]));
- };
-
- History.create = function (common, config) {
- if (!config.$toolbar) { return void console.error("config.$toolbar is undefined");}
- if (History.loading) { return void console.error("History is already being loaded..."); }
- History.loading = true;
- var $toolbar = config.$toolbar;
-
- if (!config.applyVal || !config.setHistory || !config.onLocal || !config.onRemote) {
- throw new Error("Missing config element: applyVal, onLocal, onRemote, setHistory");
- }
-
- // config.setHistory(bool, bool)
- // - bool1: history value
- // - bool2: reset old content?
- var render = function (val) {
- if (typeof val === "undefined") { return; }
- try {
- config.applyVal(val);
- } catch (e) {
- // Probably a parse error
- console.error(e);
- }
- };
- var onClose = function () { config.setHistory(false, true); };
- var onRevert = function () {
- config.setHistory(false, false);
- config.onLocal();
- config.onRemote();
- };
- var onReady = function () {
- config.setHistory(true);
- };
-
- var Messages = common.Messages;
-
- var realtime;
-
- var states = [];
- var c = states.length - 1;
-
- var $hist = $toolbar.find('.cryptpad-toolbar-history');
- var $left = $toolbar.find('.cryptpad-toolbar-leftside');
- var $right = $toolbar.find('.cryptpad-toolbar-rightside');
- var $cke = $toolbar.find('.cke_toolbox_main');
-
- $hist.html('').show();
- $left.hide();
- $right.hide();
- $cke.hide();
-
- common.spinner($hist).get().show();
-
- var onUpdate;
-
- var update = function () {
- if (!realtime) { return []; }
- states = getStates(realtime);
- if (typeof onUpdate === "function") { onUpdate(); }
- return states;
- };
-
- // Get the content of the selected version, and change the version number
- var get = function (i) {
- i = parseInt(i);
- if (isNaN(i)) { return; }
- if (i < 0) { i = 0; }
- if (i > states.length - 1) { i = states.length - 1; }
- var val = states[i].getContent().doc;
- c = i;
- if (typeof onUpdate === "function") { onUpdate(); }
- $hist.find('.next, .previous').css('visibility', '');
- if (c === states.length - 1) { $hist.find('.next').css('visibility', 'hidden'); }
- if (c === 0) { $hist.find('.previous').css('visibility', 'hidden'); }
- return val || '';
- };
-
- var getNext = function (step) {
- return typeof step === "number" ? get(c + step) : get(c + 1);
- };
- var getPrevious = function (step) {
- return typeof step === "number" ? get(c - step) : get(c - 1);
- };
-
- // Create the history toolbar
- var display = function () {
- $hist.html('');
- var $prev =$(' | |