123 lines
3.5 KiB
JavaScript
123 lines
3.5 KiB
JavaScript
|
define([
|
||
|
'/api/config?cb=' + Math.random().toString(16).substring(2),
|
||
|
'/bower_components/chainpad-listmap/chainpad-listmap.js',
|
||
|
'/bower_components/chainpad-crypto/crypto.js',
|
||
|
'/common/cryptpad-common.js',
|
||
|
'/bower_components/scrypt-async/scrypt-async.min.js',
|
||
|
'/bower_components/jquery/dist/jquery.min.js',
|
||
|
], function (Config, Listmap, Crypto, Cryptpad) {
|
||
|
var $ = window.jQuery;
|
||
|
var Scrypt = window.scrypt;
|
||
|
|
||
|
Cryptpad.styleAlerts();
|
||
|
|
||
|
var secret = {};
|
||
|
|
||
|
var module = window.APP = {
|
||
|
Cryptpad: Cryptpad,
|
||
|
};
|
||
|
|
||
|
var print = function (S, t) {
|
||
|
$('body').append($('<' + (t || 'p') + '>').text(S));
|
||
|
};
|
||
|
|
||
|
var getInputs = function (cb) {
|
||
|
Cryptpad.prompt("What is your username?", "", function (name) {
|
||
|
if (!name || typeof(name) !== 'string') { return cb('no name'); }
|
||
|
setTimeout(function () {
|
||
|
Cryptpad.prompt("What is your password?", "", function (pw) {
|
||
|
if (!pw || typeof(pw) !== 'string') { return cb('no password'); }
|
||
|
cb(void 0, {
|
||
|
password: pw,
|
||
|
salt: name,
|
||
|
});
|
||
|
}, {
|
||
|
sensitive: true,
|
||
|
});
|
||
|
}, 1000);
|
||
|
});
|
||
|
};
|
||
|
|
||
|
var login = function (cb) {
|
||
|
getInputs(function (err, input) {
|
||
|
if (err) {
|
||
|
Cryptpad.alert(err);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var time = +new Date();
|
||
|
Scrypt(input.password,
|
||
|
input.salt,
|
||
|
8, // memoryCost (n)
|
||
|
1024, // block size parameter (r)
|
||
|
48, // dkLen
|
||
|
undefined && 200, // interruptStep
|
||
|
function (S) {
|
||
|
print("Login took " + ((+new Date()) -time )+ "ms");
|
||
|
cb(S);
|
||
|
},
|
||
|
'base64');
|
||
|
});
|
||
|
};
|
||
|
|
||
|
var read = function (proxy) {
|
||
|
console.log("Proxy ready!");
|
||
|
var atime = proxy.atime = ('' + new Date());
|
||
|
proxy.ctime = proxy.ctime || atime;
|
||
|
proxy.schema = proxy.schema || 'login_data';
|
||
|
print(JSON.stringify(proxy, null, 2), 'pre');
|
||
|
};
|
||
|
|
||
|
var change = function (o, n, p) {
|
||
|
console.log("change at [%s] %s => %s", p.join(","), o, n);
|
||
|
};
|
||
|
|
||
|
var remove = function (o, p, root) {
|
||
|
console.log("removal at [%s]", p.join(','));
|
||
|
};
|
||
|
|
||
|
var ready = function (proxy, next) {
|
||
|
//console.log("umm");
|
||
|
proxy.on('ready', function (info) {
|
||
|
read(proxy);
|
||
|
|
||
|
proxy.on('change', [], change)
|
||
|
.on('remove', [], remove);
|
||
|
next();
|
||
|
})
|
||
|
.on('disconnect', function (info) {
|
||
|
|
||
|
});
|
||
|
};
|
||
|
|
||
|
var authenticated = function (password, next) {
|
||
|
console.log("Authenticated!");
|
||
|
var secret = {};
|
||
|
secret.channel = password.slice(0, 32);
|
||
|
secret.key = password.slice(32);
|
||
|
|
||
|
var config = {
|
||
|
websocketURL: Config.websocketURL,
|
||
|
channel: secret.channel,
|
||
|
data: {},
|
||
|
crypto: Crypto.createEncryptor(secret.key),
|
||
|
loglevel: 0,
|
||
|
};
|
||
|
|
||
|
console.log("creating proxy!");
|
||
|
var rt = module.rt = Listmap.create(config);
|
||
|
|
||
|
next(rt.proxy, function () {
|
||
|
Cryptpad.log("Ready!");
|
||
|
});
|
||
|
};
|
||
|
|
||
|
$('#login').click(function () {
|
||
|
login(function (hash) {
|
||
|
print('Your Key', 'h1');
|
||
|
print(hash, 'pre');
|
||
|
authenticated(hash, ready);
|
||
|
});
|
||
|
});
|
||
|
});
|