|
|
@ -46,7 +46,7 @@ function SafeChat() { |
|
|
|
|
|
|
|
|
|
|
|
/// @class Crypto cryptographic functions
|
|
|
|
/// @class Crypto cryptographic functions
|
|
|
|
/** @param view is of class SafeChat.View */ |
|
|
|
/** @param view is of class SafeChat.View */ |
|
|
|
function Crypto(view) { |
|
|
|
function Crypto(controller) { |
|
|
|
|
|
|
|
|
|
|
|
/// cache client's key from local strorage
|
|
|
|
/// cache client's key from local strorage
|
|
|
|
var k = null |
|
|
|
var k = null |
|
|
@ -72,18 +72,18 @@ function SafeChat() { |
|
|
|
|
|
|
|
|
|
|
|
/// create New User
|
|
|
|
/// create New User
|
|
|
|
function createuser(user, email, pwd) { |
|
|
|
function createuser(user, email, pwd) { |
|
|
|
view.notice("generating keys") |
|
|
|
controller.notice("generating keys") |
|
|
|
openpgp.generateKey({ |
|
|
|
openpgp.generateKey({ |
|
|
|
numBits: 4096, |
|
|
|
numBits: 4096, |
|
|
|
userIds: [{name: user, email: email}], |
|
|
|
userIds: [{name: user, email: email}], |
|
|
|
passphrase: pwd |
|
|
|
passphrase: pwd |
|
|
|
}).then(function(keyPair) { |
|
|
|
}).then(function(keyPair) { |
|
|
|
view.success("keys generated") |
|
|
|
controller.success("keys generated") |
|
|
|
localStorage.key = keyPair.privateKeyArmored |
|
|
|
localStorage.key = keyPair.privateKeyArmored |
|
|
|
k = keyPair.key |
|
|
|
k = keyPair.key |
|
|
|
}).catch(function(e) { |
|
|
|
}).catch(function(e) { |
|
|
|
console.log(e) |
|
|
|
console.log(e) |
|
|
|
view.fatal("generating key pairs failed") |
|
|
|
controller.fatal("generating key pairs failed") |
|
|
|
}) |
|
|
|
}) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -409,9 +409,23 @@ function SafeChat() { |
|
|
|
function Controller(view) { |
|
|
|
function Controller(view) { |
|
|
|
|
|
|
|
|
|
|
|
var db = new Database() |
|
|
|
var db = new Database() |
|
|
|
|
|
|
|
var crypto = new Crypto(this) |
|
|
|
var communication = new Communication(this) |
|
|
|
var communication = new Communication(this) |
|
|
|
var users = new Users() |
|
|
|
var users = new Users() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// @name error handling
|
|
|
|
|
|
|
|
/// @{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this.fatal = view.fatal |
|
|
|
|
|
|
|
this.error = view.error |
|
|
|
|
|
|
|
this.warning = view.warning |
|
|
|
|
|
|
|
this.notice = view.notice |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// @}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// @name signals from server
|
|
|
|
|
|
|
|
/// @{
|
|
|
|
|
|
|
|
|
|
|
|
function fail(msg) { |
|
|
|
function fail(msg) { |
|
|
|
console.log('rcv-> fail('+msg+')') |
|
|
|
console.log('rcv-> fail('+msg+')') |
|
|
|
error(msg) |
|
|
|
error(msg) |
|
|
@ -445,12 +459,7 @@ function SafeChat() { |
|
|
|
this.disconnect = view.disconnected |
|
|
|
this.disconnect = view.disconnected |
|
|
|
this.error = view.disconnected |
|
|
|
this.error = view.disconnected |
|
|
|
|
|
|
|
|
|
|
|
function login() { |
|
|
|
// @}
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function user(usr) { |
|
|
|
|
|
|
|
if (usr.exists) db.adduser |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function initBrowser() { |
|
|
|
function initBrowser() { |
|
|
|
window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB |
|
|
|
window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB |
|
|
@ -460,7 +469,17 @@ function SafeChat() { |
|
|
|
return window.indexedDB && window.crypto.getRandomValues && Storage |
|
|
|
return window.indexedDB && window.crypto.getRandomValues && Storage |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function register() { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function login() { |
|
|
|
|
|
|
|
if (!crypto.key()) register() |
|
|
|
|
|
|
|
else password() |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function run() { |
|
|
|
function run() { |
|
|
|
|
|
|
|
login() |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function start() { |
|
|
|
function start() { |
|
|
|