diff --git a/customize.dist/main.js b/customize.dist/main.js index e6b388c6c..ac378e185 100644 --- a/customize.dist/main.js +++ b/customize.dist/main.js @@ -82,36 +82,78 @@ define([ $block.find('button').addClass('btn').addClass('btn-primary'); $block.appendTo($parent); }; - var addButtonHandlers = function () { - $('button.login').click(function (e) { - var username = $('#name').val(); - var passwd = $('#password').val(); - var remember = $('#rememberme').is(':checked'); - sessionStorage.login_user = username; - sessionStorage.login_pass = passwd; - sessionStorage.login_rmb = remember; - sessionStorage.login = 1; - document.location.href = '/user/'; + + + /* Log in UI */ + var Login; + // deferred execution to avoid unnecessary asset loading + var loginReady = function (cb) { + if (Login) { + if (typeof(cb) === 'function') { cb(); } + return; + } + require([ + '/common/login.js', + ], function (_Login) { + Login = Login || _Login; + if (typeof(cb) === 'function') { cb(); } }); + }; + + var $uname = $('#name').on('focus', loginReady); + + var $passwd = $('#password') + // background loading of login assets + .on('focus', loginReady) + // enter key while on password field clicks signup + .on('keyup', function (e) { + if (e.which !== 13) { return; } // enter + $('button.login').click(); + }); + + $('button.login').click(function (e) { + loginReady(function () { + var uname = $uname.val(); + var passwd = $passwd.val(); + + Login.loginOrRegister(uname, passwd, false, function (err, result) { + if (!err) { + // successful validation and user already exists + // set user hash in localStorage and redirect to drive + localStorage.User_hash = result.userHash; + document.location.href = '/drive/'; + + return; + } + switch (err) { + case 'NO_SUCH_USER': + Cryptpad.alert('Invalid username or password. Try again, or sign up'); // XXX + break; + case 'INVAL_USER': + Cryptpad.alert('Username required'); // XXX + break; + case 'INVAL_PASS': + Cryptpad.alert('Password required'); // XXX + break; + default: // UNHANDLED ERROR + } + }); + }); + }); + /* End Log in UI */ + + var addButtonHandlers = function () { $('button.register').click(function (e) { var username = $('#name').val(); var passwd = $('#password').val(); var remember = $('#rememberme').is(':checked'); sessionStorage.login_user = username; sessionStorage.login_pass = passwd; - sessionStorage.login_rmb = remember; - sessionStorage.register = 1; - document.location.href = '/user/'; + document.location.href = '/register/'; }); $('button.gotodrive').click(function (e) { document.location.href = '/drive/'; }); - - var $passwd = $('#password'); - $passwd.on('keyup', function (e) { - if (e.which !== 13) { return; } // enter - $('button.login').click(); - }); }; displayCreateButtons(); diff --git a/www/register/main.js b/www/register/main.js index 5c42872bf..703e3c99e 100644 --- a/www/register/main.js +++ b/www/register/main.js @@ -1,15 +1,30 @@ define([ '/common/login.js', + '/common/cryptpad-common.js', '/common/credential.js', '/bower_components/jquery/dist/jquery.min.js', -], function (Login) { +], function (Login, Cryptpad) { var $ = window.jQuery; + var APP = window.APP = { + Login: Login, + }; + // text and password input fields var $uname = $('#username'); var $passwd = $('#password'); var $confirm = $('#password-confirm'); + if (sessionStorage.login_user) { + $uname.val(sessionStorage.login_user); + } + if (sessionStorage.login_pass) { + $passwd.val(sessionStorage.login_pass); + } + + [ $uname, $passwd, $confirm] + .some(function ($el) { if (!$el.val()) { return ($el.focus(), true); } }); + // checkboxes var $checkImport = $('#import-recent'); var $checkAcceptTerms = $('#accept-terms'); @@ -17,6 +32,18 @@ define([ var $register = $('button#register'); + var proxyIsSynced = function (realtime, cb) { + realtime.sync(); + var interval = 300; + var check = function () { + if (realtime.getAuthDoc() !== realtime.getUserDoc()) { + return window.setTimeout(check, interval); + } + cb(); + }; + window.setTimeout(check, interval); + }; + $register.click(function () { var uname = $uname.val(); var passwd = $passwd.val(); @@ -27,17 +54,35 @@ define([ var doesPromise = $checkPromise[0].checked; /* basic validation */ - - // do their passwords match? - - if (passwd !== confirmPassword) { - alert('invalid password'); - return; + if (passwd !== confirmPassword) { // do their passwords match? + return void Cryptpad.alert('passwords do not match!'); // XXX } - Login.loginOrRegister(uname, passwd, true, function (err, out) { - if (err) { alert(err); } - console.log(out); - }) + if (!doesAccept) { // do they accept the terms of service? + return void Cryptpad.alert('you must accept the terms of service'); // XXX + } + + if (!doesPromise) { // do they promise to remember their password? + return void Cryptpad.alert("We cannot reset your password if you forget it. It's very important that you remember it!"); // XXX + } + + Login.loginOrRegister(uname, passwd, true, function (err, result) { + if (err) { return void Cryptpad.alert(err); } + console.log(result); + var proxy = result.proxy; + + localStorage.User_hash = result.userHash; + + Cryptpad.eraseTempSessionValues(); + if (shouldImport) { + sessionStorage.migrateAnonDrive = 1; + } + + proxy.login_name = uname; + + proxyIsSynced(result.realtime, function () { + document.location.href = '/drive/'; + }); + }); }); });