From 94fbc2dca4b9c3d0c2885c36e99ad5fb67b9f82e Mon Sep 17 00:00:00 2001 From: ansuz Date: Tue, 6 Dec 2016 17:34:24 +0100 Subject: [PATCH] prototype cryptographic login --- www/use/index.html | 62 ++++++++++++++++++++++++ www/use/main.js | 116 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 178 insertions(+) create mode 100644 www/use/index.html create mode 100644 www/use/main.js diff --git a/www/use/index.html b/www/use/index.html new file mode 100644 index 000000000..15013ec13 --- /dev/null +++ b/www/use/index.html @@ -0,0 +1,62 @@ + + + + + + + + Cryptpad/user/ + + + + + + + +
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/www/use/main.js b/www/use/main.js new file mode 100644 index 000000000..76f4419d2 --- /dev/null +++ b/www/use/main.js @@ -0,0 +1,116 @@ +define([ + '/api/config?cb=' + Math.random().toString(16).slice(2), + '/customize/messages.js', + '/common/cryptpad-common.js', + '/bower_components/chainpad-crypto/crypto.js', + +], function (Config, Messages, Cryptpad, Crypto) { + var $ = window.jQuery; + + + var APP = window.APP = { + Cryptpad: Cryptpad, + spinner: Cryptpad.spinner(document.body), + }; + + var login = function (uname, passwd, cb) { + Cryptpad.User.genSecret(uname, passwd, function (err, secret) { + if (err) { + console.error(err); + } + Cryptpad.User.session(secret, function (err, data) { + if (err) { + console.log(err); + } + cb(err, secret); + }); + }); + }; + + var $uname = $('#uname'); + var $passwd = $('#password'); + var $login = $('#login'); + + var lockInputs = function (bool) { + [$uname, $passwd].forEach(function ($e) { + $e.attr('disabled', bool); + }); + }; + + var ready = function (loggedIn) { + APP.loggedIn = loggedIn; + + $login + .text(loggedIn?'log out': 'log in') + .click(function () { + if (APP.loggedIn) { + Cryptpad.User.session(null, function (err) { + $login.text('log in'); + }); + return; + } + + var uname = $uname.val(); + var passwd = $passwd.val(); + + if (!uname) { + console.log("expected a username"); + return; + } + if (!passwd) { + console.log("expected a password"); + return; + } + + login(uname, passwd, function (err, secret) { + console.log(secret); + if (secret) { + $login.text('log out'); + APP.loggedIn = true; + lockInputs(true); + } + }); + }); + + lockInputs(loggedIn); + [$uname, $passwd] + .forEach(function ($e, i) { + $e.on('keyup', function (e) { + if (!(e.which === 13 && $e.val())) { return; } + if (i === 0) { + $passwd.focus(); + return; + } + $login.click(); + }); + }); + + var change = Cryptpad.find(Cryptpad, ['store','change']); + if (typeof(change) === 'function') { + change(function (data) { + if (data.key === Cryptpad.User.localKey) { + // HERE + console.log("Login data modified"); + + } + }); + } + }; + + Cryptpad.ready(function (err, env) { + console.log("Cryptpad is ready!"); + console.log(env); + + if (err) { + console.error(err); + } + + if (env.userStore) { + console.log("You're logged in!"); + ready(true); + } else { + ready(false); + console.log("Not logged in"); + } + }); +});