mail/src/js/controller/app/contacts.js

90 lines
2.4 KiB
JavaScript
Raw Normal View History

2014-10-02 16:05:44 -04:00
'use strict';
2014-10-02 16:05:44 -04:00
//
// Controller
//
2014-12-17 12:18:26 -05:00
var ContactsCtrl = function($scope, $q, keychain, pgp, dialog) {
//
// scope state
//
2014-10-02 16:05:44 -04:00
$scope.state.contacts = {
toggle: function(to) {
$scope.state.lightbox = (to) ? 'contacts' : undefined;
2014-12-17 12:18:26 -05:00
return $scope.listKeys();
2014-10-02 16:05:44 -04:00
}
};
2014-10-02 16:05:44 -04:00
//
// scope functions
//
2014-10-02 16:05:44 -04:00
$scope.listKeys = function() {
2014-12-17 12:18:26 -05:00
return $q(function(resolve) {
resolve();
2014-12-17 12:18:26 -05:00
}).then(function() {
return keychain.listLocalPublicKeys();
2014-12-17 12:18:26 -05:00
}).then(function(keys) {
// add params to key objects
keys.forEach(function(key) {
2014-10-02 16:05:44 -04:00
var params = pgp.getKeyParams(key.publicKey);
_.extend(key, params);
2014-12-17 12:18:26 -05:00
});
$scope.keys = keys;
}).catch(dialog.error);
2014-10-02 16:05:44 -04:00
};
2014-10-02 16:05:44 -04:00
$scope.getFingerprint = function(key) {
var fpr = key.fingerprint;
var formatted = fpr.slice(0, 4) + ' ' + fpr.slice(4, 8) + ' ' + fpr.slice(8, 12) + ' ' + fpr.slice(12, 16) + ' ' + fpr.slice(16, 20) + ' ... ' + fpr.slice(20, 24) + ' ' + fpr.slice(24, 28) + ' ' + fpr.slice(28, 32) + ' ' + fpr.slice(32, 36) + ' ' + fpr.slice(36);
2014-10-02 16:05:44 -04:00
$scope.fingerprint = formatted;
};
2014-10-02 16:05:44 -04:00
$scope.importKey = function(publicKeyArmored) {
var keyParams, pubkey;
2014-10-02 16:05:44 -04:00
// verifiy public key string
if (publicKeyArmored.indexOf('-----BEGIN PGP PUBLIC KEY BLOCK-----') < 0) {
dialog.error({
2014-10-02 16:05:44 -04:00
showBugReporter: false,
message: 'Invalid public key!'
});
2014-10-02 16:05:44 -04:00
return;
}
try {
keyParams = pgp.getKeyParams(publicKeyArmored);
} catch (e) {
dialog.error(new Error('Error reading public key params!'));
2014-10-02 16:05:44 -04:00
return;
}
pubkey = {
_id: keyParams._id,
userId: keyParams.userId,
userIds: keyParams.userIds,
publicKey: publicKeyArmored,
imported: true // mark manually imported keys
};
2014-12-17 12:18:26 -05:00
return keychain.saveLocalPublicKey(pubkey).then(function() {
2014-10-02 16:05:44 -04:00
// update displayed keys
2014-12-17 12:18:26 -05:00
return $scope.listKeys();
}).catch(dialog.error);
};
2014-10-02 16:05:44 -04:00
$scope.removeKey = function(key) {
2014-12-17 12:18:26 -05:00
return keychain.removeLocalPublicKey(key._id).then(function() {
2014-10-02 16:05:44 -04:00
// update displayed keys
2014-12-17 12:18:26 -05:00
return $scope.listKeys();
}).catch(dialog.error);
2014-10-02 16:05:44 -04:00
};
};
2014-10-08 06:34:34 -04:00
module.exports = ContactsCtrl;