From 34547f7bb6d09a7f6fd421f683e801d0b3a07a16 Mon Sep 17 00:00:00 2001 From: Felix Hammerl Date: Mon, 21 Oct 2013 17:10:45 +0200 Subject: [PATCH] [WO-52] export encrypted key file --- src/js/app.js | 4 ++- src/js/controller/account.js | 52 +++++++++++++++++++++++++++++++++ src/js/controller/navigation.js | 5 ++++ src/tpl/account.html | 10 +++++++ src/tpl/desktop.html | 6 +++- src/tpl/navigation.html | 2 +- 6 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 src/js/controller/account.js create mode 100644 src/tpl/account.html diff --git a/src/js/app.js b/src/js/app.js index b76a10f..4623896 100644 --- a/src/js/app.js +++ b/src/js/app.js @@ -3,6 +3,7 @@ window.name = 'NG_DEFER_BOOTSTRAP!'; require([ 'angular', + 'js/controller/account', 'js/controller/login', 'js/controller/login-initial', 'js/controller/login-new-device', @@ -13,7 +14,7 @@ require([ 'js/controller/navigation', 'angularRoute', 'angularTouch' -], function(angular, LoginCtrl, LoginInitialCtrl, LoginNewDeviceCtrl, LoginExistingCtrl, MailListCtrl, ReadCtrl, WriteCtrl, NavigationCtrl) { +], function(angular, AccountCtrl, LoginCtrl, LoginInitialCtrl, LoginNewDeviceCtrl, LoginExistingCtrl, MailListCtrl, ReadCtrl, WriteCtrl, NavigationCtrl) { 'use strict'; var app = angular.module('mail', ['ngRoute', 'ngTouch', 'navigation', 'mail-list', 'write', 'read']); @@ -49,6 +50,7 @@ require([ app.controller('ReadCtrl', ReadCtrl); app.controller('WriteCtrl', WriteCtrl); app.controller('MailListCtrl', MailListCtrl); + app.controller('AccountCtrl', AccountCtrl); // manually bootstrap angular due to require.js angular.element().ready(function() { diff --git a/src/js/controller/account.js b/src/js/controller/account.js new file mode 100644 index 0000000..d155ad2 --- /dev/null +++ b/src/js/controller/account.js @@ -0,0 +1,52 @@ +define(function(require) { + 'use strict'; + + var appController = require('js/app-controller'), + emailDao; + + // + // Controller + // + + var AccountCtrl = function($scope) { + emailDao = appController._emailDao; + + // + // scope functions + // + + $scope.hideAccountView = function() { + $scope.$parent.$parent.accountOpen = false; + }; + + $scope.exportKeyFile = function() { + var userId = emailDao._account.emailAddress; + emailDao._keychain.getUserKeyPair(userId, function(err, keypair) { + if (err) { + console.error(err); + return; + } + + download(keypair.privateKey.encryptedKey, 'key_' + userId + '.asc', 'text/plain'); + }); + }; + + // + // helper functions + // + + function download(content, filename, contentType) { + contentType = contentType || 'application/octet-stream'; + var a = document.createElement('a'); + var blob = new Blob([content], { + 'type': contentType + }); + a.href = window.URL.createObjectURL(blob); + a.download = filename; + a.click(); + } + + }; + + return AccountCtrl; +}); \ No newline at end of file diff --git a/src/js/controller/navigation.js b/src/js/controller/navigation.js index 71d0e05..c38f91e 100644 --- a/src/js/controller/navigation.js +++ b/src/js/controller/navigation.js @@ -13,6 +13,7 @@ define(function(require) { var NavigationCtrl = function($scope) { $scope.navOpen = false; $scope.writerOpen = false; + $scope.accountOpen = false; emailDao = appController._emailDao; @@ -42,6 +43,10 @@ define(function(require) { $scope.closeNav(); }; + $scope.showAccountView = function() { + $scope.accountOpen = true; + }; + $scope.remove = function(email) { var trashFolder = _.findWhere($scope.folders, { type: 'Trash' diff --git a/src/tpl/account.html b/src/tpl/account.html new file mode 100644 index 0000000..6ed4d88 --- /dev/null +++ b/src/tpl/account.html @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/src/tpl/desktop.html b/src/tpl/desktop.html index 02e4a2a..c0292df 100644 --- a/src/tpl/desktop.html +++ b/src/tpl/desktop.html @@ -21,4 +21,8 @@ \ No newline at end of file + + + \ No newline at end of file diff --git a/src/tpl/navigation.html b/src/tpl/navigation.html index 4fc557c..1b7ca5b 100644 --- a/src/tpl/navigation.html +++ b/src/tpl/navigation.html @@ -13,7 +13,7 @@