From 90612bc5baee20dcc92c6906afaef00a1ee092ea Mon Sep 17 00:00:00 2001 From: Gustavo H M Silva Date: Mon, 3 Apr 2017 18:43:30 -0300 Subject: [PATCH 1/3] Update messages.pt-br.js --- customize.dist/translations/messages.pt-br.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/customize.dist/translations/messages.pt-br.js b/customize.dist/translations/messages.pt-br.js index a2aaec567..1014e362b 100644 --- a/customize.dist/translations/messages.pt-br.js +++ b/customize.dist/translations/messages.pt-br.js @@ -5,7 +5,7 @@ // Translation to brazilian portuguese done by Gustavo Henrique Machado da Silva (www.linkedin.com/in/gustavohmsilva) // Even though this software may not share the same licenses, the translation produced by me is protected under // Creative commons, Attribution-ShareAlike 4.0 International -// You can contact me over email on gustavohmsilva@member.fsf.orgs +// You can contact me over email on gustavohmsilva@member.fsf.org define(function () { var out = {}; From 182dbfc8745d6b442cfc1ec9defa31e5286f4a63 Mon Sep 17 00:00:00 2001 From: ansuz Date: Tue, 4 Apr 2017 12:13:31 +0200 Subject: [PATCH 2/3] implement pinning logic in pinpad.js --- www/common/pinpad.js | 120 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 102 insertions(+), 18 deletions(-) diff --git a/www/common/pinpad.js b/www/common/pinpad.js index dce9f328c..65d40407d 100644 --- a/www/common/pinpad.js +++ b/www/common/pinpad.js @@ -4,25 +4,80 @@ define([ '/bower_components/tweetnacl/nacl-fast.min.js' ], function (Cryptpad, Rpc) { - var Nacl = window.nacl; - var create = function (network, ed) { - var exp = {}; - var rpc = Rpc.create(network, ed); + var localChannelsHash = function (fileList) { + fileList = fileList || Cryptpad.getUserChannelList(); + + var channelIdList = []; + fileList.forEach(function (href) { + var parsedHref = Cryptpad.parsePadUrl(href); + if (!parsedHref || !parsedHref.hash) { return; } + var parsedHash = Cryptpad.parseHash(parsedHref.hash); + if (!parsedHash || !parsedHash.channel) { return; } + channelIdList.push(Cryptpad.base64ToHex(parsedHash.channel)); + }); + var uniqueList = Cryptpad.deduplicateString(channelIdList).sort(); + + var hash = Nacl.util.encodeBase64(Nacl + .hash(Nacl.util.decodeUTF8( JSON.stringify(uniqueList) ))); + + return hash; + }; + + // TODO move this into pinpad + false && (function () { + // compute what you think the hash should be - var checkHash = exp.checkHash = function (fileList) { - fileList = fileList || Cryptpad.getUserChannelList(); + // then ask the server if what it has matches your records + rpc.send('GET_HASH', edPublic, function (e, hash) { + if (e) { return void console.error(e); } + + console.log("user pins hash is [%s]", hash); + // if it does, awesome! + // you should be able to pin and unpin things easily + + // if it doesn't, send a reset, and start re-pinning + }); + }()); + + getServerHash = function (rpc, edPublic, cb) { + rpc.send('GET_HASH', edPublic, cb); + }; + + var getFileSize = function (rpc, file, cb) { + rpc.send('GET_FILE_SIZE', file, cb); + }; - var channelIdList = []; - fileList.forEach(function (href) { - var parsedHref = Cryptpad.parsePadUrl(href); - if (!parsedHref || !parsedHref.hash) { return; } - var parsedHash = Cryptpad.parseHash(parsedHref.hash); - if (!parsedHash || !parsedHash.channel) { return; } - channelIdList.push(Cryptpad.base64ToHex(parsedHash.channel)); + var getFileListSize = function (rpc, list, cb) { + var bytes = 0; + + var left = list.length; + + list.forEach(function (chan) { + getFileSize(rpc, chan, function (e, msg) { + if (e) { + if (e === 'ENOENT') { + + // these channels no longer exists on the server + console.log(e, chan); + } else { + console.error(e); + } + } else if (msg && msg[0] && typeof(msg[0]) === 'number') { + bytes += msg[0]; + //console.log(bytes); + } else { + console.log("returned message was not a number: ", msg); + } + + --left; + if (left === 0) { + cb(void 0, bytes); + } }); - var uniqueList = Cryptpad.deduplicateString(channelIdList).sort(); + }); + }; /* 1. every time you want to pin or unpid a pad you send a message to the server @@ -34,12 +89,41 @@ define([ UNPIN all, send all */ - var hash = Nacl.util.encodeBase64(Nacl.hash(Nacl.util.decodeUTF8( JSON.stringify(uniqueList) ))); - return hash; - }; + // Don't use create until Cryptpad is ready + // (use Cryptpad.ready) + var create = function (cb) { + // you will need to communicate with the server + // use an already established + var network = Cryptpad.getNetwork(); + + // your user proxy contains credentials you will need to make RPC calls + var proxy = Cryptpad.getStore().getProxy().proxy; + + var edPrivate = proxy.edPrivate; + var edPublic = proxy.edPublic; + + if (!(edPrivate && edPublic)) { return void cb('INVALID_KEYS'); } + + Rpc.create(network, edPrivate, edPublic, function (e, rpc) { + if (e) { return void cb(e); } + + var exp = {}; + exp.publicKey = edPublic; + exp.send = rpc.send; + + exp.getFileSize = function (file, cb) { + getFileSize(rpc, file, cb); + }; + exp.getFileListSize = function (list, cb) { + getFileListSize(rpc, list, cb); + }; + exp.getServerHash = function (cb) { + getServerHash(rpc, edPublic, cb); + }; - return exp; + cb(e, exp); + }); }; return { create: create }; From 31b178a306feb7324940cd937f31baed3e395af4 Mon Sep 17 00:00:00 2001 From: ansuz Date: Tue, 4 Apr 2017 12:25:34 +0200 Subject: [PATCH 3/3] use pinpad api --- www/examples/pin/index.html | 13 +++++++++ www/examples/pin/inner.html | 8 +++++ www/examples/pin/main.js | 58 +++++++++++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+) create mode 100644 www/examples/pin/index.html create mode 100644 www/examples/pin/inner.html create mode 100644 www/examples/pin/main.js diff --git a/www/examples/pin/index.html b/www/examples/pin/index.html new file mode 100644 index 000000000..e17a68143 --- /dev/null +++ b/www/examples/pin/index.html @@ -0,0 +1,13 @@ + + + + CryptPad + + + + +
+ +
+ + diff --git a/www/examples/pin/inner.html b/www/examples/pin/inner.html new file mode 100644 index 000000000..9680685b7 --- /dev/null +++ b/www/examples/pin/inner.html @@ -0,0 +1,8 @@ + + + + + + + +

PEWPEW diff --git a/www/examples/pin/main.js b/www/examples/pin/main.js new file mode 100644 index 000000000..9a4ad1f08 --- /dev/null +++ b/www/examples/pin/main.js @@ -0,0 +1,58 @@ +require.config({ paths: { 'json.sortify': '/bower_components/json.sortify/dist/JSON.sortify' } }); +define([ + '/common/cryptpad-common.js', + '/common/pinpad.js', + '/bower_components/jquery/dist/jquery.min.js', +], function (Cryptpad, Pinpad) { + var $ = window.jQuery; + var APP = window.APP = { + Cryptpad: Cryptpad, + }; + + var then = function (call) { + call.getFileSize('26f014b2ab959418605ea37a6785f317', function (e, msg) { + if (e) { + if (e === 'ENOENT') { return; } + return void console.error(e); + } + console.error("EXPECTED ENOENT"); + console.log(msg); + }); + + call.getFileSize('pewpew', function (e, msg) { + if (e) { + if (e === 'INVALID_CHAN') { return; } + return void console.error(e); + } + console.log(msg); + }); +/* + var list = Cryptpad.getUserChannelList(); + if (list.length) { + call.getFileSize(list[0], function (e, msg) { + if (e) { + return void console.error(e); + } + console.log(msg); + }); + } + call.getFileListSize(list, function (e, bytes) { + if (e) { return void console.error(e); } + console.log("%s total bytes used", bytes); + }); +*/ + call.getServerHash(function (e, hash) { + if (e) { return void console.error(e); } + console.log("the server believes your user hash is [%s]", hash); + }); + }; + + $(function () { + Cryptpad.ready(function (err, env) { + Pinpad.create(function (e, call) { + if (e) { return void console.error(e); } + then(call); + }); + }); + }); +});