diff --git a/www/common/cryptpad-common.js b/www/common/cryptpad-common.js index d6e962d9c..a4b949629 100644 --- a/www/common/cryptpad-common.js +++ b/www/common/cryptpad-common.js @@ -4,8 +4,11 @@ define([ '/bower_components/chainpad-crypto/crypto.js', '/bower_components/alertifyjs/dist/js/alertify.js', '/bower_components/spin.js/spin.min.js', + + '/customize/user.js', + '/bower_components/jquery/dist/jquery.min.js', -], function (Messages, Store, Crypto, Alertify, Spinner) { +], function (Messages, Store, Crypto, Alertify, Spinner, User) { /* This file exposes functionality which is specific to Cryptpad, but not to any particular pad type. This includes functions for committing metadata about pads to your local storage for future use and improved usability. @@ -14,13 +17,32 @@ define([ */ var $ = window.jQuery; + var common = {}; var store; + var userProxy; + var userStore; + + var getStore = common.getStore = function (legacy) { + if (!legacy && userStore) { return userStore; } + if (store) { return store; } + throw new Error("Store is not ready!"); + }; - var getStore = function () { - if (!store) { - throw new Error("Store is not ready!"); + /* + * cb(err, proxy); + */ + var authorize = common.authorize = function (cb) { + console.log("Authorizing"); + var secret = User.session(); + if (!secret) { + // user is not authenticated + cb('user is not authenticated', void 0); } - return store; + + // for now we assume that things always work + User.connect(secret, function (err, proxy) { + cb(void 0, proxy); + }); }; Store.ready(function (err, Store) { @@ -31,7 +53,6 @@ define([ store = Store; }); - var common = {}; var isArray = function (o) { return Object.prototype.toString.call(o) === '[object Array]'; }; @@ -83,6 +104,9 @@ define([ var storageKey = common.storageKey = 'CryptPad_RECENTPADS'; + /* + * localStorage formatting + */ /* the first time this gets called, your local storage will migrate to a new format. No more indices for values, everything is named now. @@ -129,21 +153,52 @@ define([ return window.location.hash.slice(1); }; - var setPadAttribute = common.setPadAttribute = function (attr, value, cb) { - getStore().set([getHash(), attr].join('.'), value, function (err, data) { + var parsePadUrl = common.parsePadUrl = function (href) { + var patt = /^https*:\/\/([^\/]*)\/(.*?)\/#(.*)$/i; + + var ret = {}; + href.replace(patt, function (a, domain, type, hash) { + ret.domain = domain; + ret.type = type; + ret.hash = hash; + return ''; + }); + return ret; + }; + + var makePad = function (href, title) { + var now = ''+new Date(); + return { + href: href, + atime: now, + ctime: now, + title: title || window.location.hash.slice(1, 9), + }; + }; + + /* Sort pads according to how recently they were accessed */ + var mostRecent = common.mostRecent = function (a, b) { + return new Date(b.atime).getTime() - new Date(a.atime).getTime(); + }; + + // STORAGE + var setPadAttribute = common.setPadAttribute = function (attr, value, cb, legacy) { + getStore(legacy).set([getHash(), attr].join('.'), value, function (err, data) { cb(err, data); }); }; - var getPadAttribute = common.getPadAttribute = function (attr, cb) { - getStore().get([getHash(), attr].join('.'), function (err, data) { + // STORAGE + var getPadAttribute = common.getPadAttribute = function (attr, cb, legacy) { + getStore(legacy).get([getHash(), attr].join('.'), function (err, data) { cb(err, data); }); }; + // STORAGE /* fetch and migrate your pad history from localStorage */ - var getRecentPads = common.getRecentPads = function (cb) { - getStore().get(storageKey, function (err, recentPads) { + var getRecentPads = common.getRecentPads = function (cb, legacy) { + getStore(legacy).get(storageKey, function (err, recentPads) { if (isArray(recentPads)) { cb(void 0, migrateRecentPads(recentPads)); return; @@ -152,32 +207,16 @@ define([ }); }; + // STORAGE /* commit a list of pads to localStorage */ - var setRecentPads = common.setRecentPads = function (pads, cb) { - getStore().set(storageKey, pads, function (err, data) { + var setRecentPads = common.setRecentPads = function (pads, cb, legacy) { + getStore(legacy).set(storageKey, pads, function (err, data) { cb(err, data); }); }; - /* Sort pads according to how recently they were accessed */ - var mostRecent = common.mostRecent = function (a, b) { - return new Date(b.atime).getTime() - new Date(a.atime).getTime(); - }; - - var parsePadUrl = common.parsePadUrl = function (href) { - var patt = /^https*:\/\/([^\/]*)\/(.*?)\/#(.*)$/i; - - var ret = {}; - href.replace(patt, function (a, domain, type, hash) { - ret.domain = domain; - ret.type = type; - ret.hash = hash; - return ''; - }); - return ret; - }; - - var forgetPad = common.forgetPad = function (href, cb) { + // STORAGE + var forgetPad = common.forgetPad = function (href, cb, legacy) { var parsed = parsePadUrl(href); getRecentPads(function (err, recentPads) { @@ -195,7 +234,7 @@ define([ return; } - getStore().keys(function (err, keys) { + getStore(legacy).keys(function (err, keys) { if (err) { cb(err); return; @@ -208,24 +247,15 @@ define([ cb(); return; } - getStore().removeBatch(toRemove, function (err, data) { + getStore(legacy).removeBatch(toRemove, function (err, data) { cb(err, data); }); }); - }); - }); - }; - - var makePad = function (href, title) { - var now = ''+new Date(); - return { - href: href, - atime: now, - ctime: now, - title: title || window.location.hash.slice(1, 9), - }; + }, legacy); + }, legacy); }; + // STORAGE var rememberPad = common.rememberPad = window.rememberPad = function (title, cb) { // bail out early if (!/#/.test(window.location.hash)) { return; } @@ -265,6 +295,7 @@ define([ }); }; + // STORAGE var setPadTitle = common.setPadTitle = function (name, cb) { var href = window.location.href; var parsed = parsePadUrl(href); @@ -301,6 +332,7 @@ define([ }); }; + // STORAGE var getPadTitle = common.getPadTitle = function (cb) { var href = window.location.href; var parsed = parsePadUrl(window.location.href); @@ -324,6 +356,7 @@ define([ }); }; + // STORAGE var causesNamingConflict = common.causesNamingConflict = function (title, cb) { var href = window.location.href; @@ -364,13 +397,30 @@ define([ } }; - state++; + state = 2; Store.ready(function (err, store) { - env.store = store; + common.store = env.store = store; + cb(); + }); + + // HERE + authorize(function (err, proxy) { + if (err) { + // not logged in + } + if (!proxy) { + cb(); + return; + } + userProxy = env.proxy = proxy; + userStore = env.userStore = User.prepareStore(proxy); cb(); }); }; + /* + * Saving files + */ var fixFileName = common.fixFileName = function (filename) { return filename.replace(/ /g, '-').replace(/[\/\?]/g, '_') .replace(/_+/g, '_'); @@ -388,6 +438,9 @@ define([ }; }; + /* + * Alertifyjs + */ var styleAlerts = common.styleAlerts = function (href) { var $link = $('link[href="/customize/alertify.css"]'); if ($link.length) { return; } @@ -492,6 +545,9 @@ define([ Alertify.error(msg); }; + /* + * spinner + */ common.spinner = function (parent) { var $target = $('
', { //