mirror of
https://github.com/moparisthebest/mail
synced 2024-11-23 01:12:19 -05:00
[WO-297] setting a passphrase is optional
This commit is contained in:
parent
b7e0236af8
commit
1c877634d1
@ -15,6 +15,23 @@ define(function(require) {
|
|||||||
$scope.buttonEnabled = true;
|
$scope.buttonEnabled = true;
|
||||||
$scope.incorrect = false;
|
$scope.incorrect = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Try unlocking without passphrase
|
||||||
|
//
|
||||||
|
|
||||||
|
unlockCrypto(function(err) {
|
||||||
|
if (err) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$location.path('/desktop');
|
||||||
|
$scope.$apply();
|
||||||
|
});
|
||||||
|
|
||||||
|
//
|
||||||
|
// Unlock using passphrase
|
||||||
|
//
|
||||||
|
|
||||||
$scope.change = function() {
|
$scope.change = function() {
|
||||||
$scope.incorrect = false;
|
$scope.incorrect = false;
|
||||||
};
|
};
|
||||||
@ -27,10 +44,10 @@ define(function(require) {
|
|||||||
// disable button once loggin has started
|
// disable button once loggin has started
|
||||||
$scope.buttonEnabled = false;
|
$scope.buttonEnabled = false;
|
||||||
$scope.incorrect = false;
|
$scope.incorrect = false;
|
||||||
unlockCrypto();
|
unlockCrypto(onUnlock);
|
||||||
};
|
};
|
||||||
|
|
||||||
function unlockCrypto() {
|
function unlockCrypto(callback) {
|
||||||
var userId = emailDao._account.emailAddress;
|
var userId = emailDao._account.emailAddress;
|
||||||
appController._emailDao._keychain.getUserKeyPair(userId, function(err, keypair) {
|
appController._emailDao._keychain.getUserKeyPair(userId, function(err, keypair) {
|
||||||
if (err) {
|
if (err) {
|
||||||
@ -41,7 +58,7 @@ define(function(require) {
|
|||||||
emailDao.unlock({
|
emailDao.unlock({
|
||||||
keypair: keypair,
|
keypair: keypair,
|
||||||
passphrase: $scope.passphrase
|
passphrase: $scope.passphrase
|
||||||
}, onUnlock);
|
}, callback);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,12 +53,13 @@ define(function(require) {
|
|||||||
return str.substring(0, 1).toLowerCase() + str.substring(1);
|
return str.substring(0, 1).toLowerCase() + str.substring(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!passphrase || passphrase.length < 10) {
|
if (!passphrase) {
|
||||||
$scope.passphraseMsg = 'Too short';
|
// no rating for empty passphrase
|
||||||
|
$scope.passphraseMsg = '';
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SAME.test(passphrase)) {
|
if (passphrase.length < 8 || SAME.test(passphrase)) {
|
||||||
$scope.passphraseMsg = 'Very weak';
|
$scope.passphraseMsg = 'Very weak';
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -85,14 +86,14 @@ define(function(require) {
|
|||||||
var passphrase = $scope.state.passphrase,
|
var passphrase = $scope.state.passphrase,
|
||||||
confirmation = $scope.state.confirmation;
|
confirmation = $scope.state.confirmation;
|
||||||
|
|
||||||
if (!passphrase || passphrase !== confirmation) {
|
if (passphrase !== confirmation) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$scope.setState(states.PROCESSING);
|
$scope.setState(states.PROCESSING);
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
emailDao.unlock({
|
emailDao.unlock({
|
||||||
passphrase: passphrase
|
passphrase: (passphrase) ? passphrase : undefined
|
||||||
}, function(err) {
|
}, function(err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
$scope.setState(states.IDLE);
|
$scope.setState(states.IDLE);
|
||||||
|
@ -17,11 +17,6 @@ define(function(require) {
|
|||||||
$scope.incorrect = false;
|
$scope.incorrect = false;
|
||||||
|
|
||||||
$scope.confirmPassphrase = function() {
|
$scope.confirmPassphrase = function() {
|
||||||
if (!$scope.passphrase) {
|
|
||||||
$scope.incorrect = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$scope.incorrect = false;
|
$scope.incorrect = false;
|
||||||
unlockCrypto();
|
unlockCrypto();
|
||||||
};
|
};
|
||||||
|
@ -119,7 +119,7 @@ define(function(require) {
|
|||||||
var pubKeyId, privKeyId, self = this;
|
var pubKeyId, privKeyId, self = this;
|
||||||
|
|
||||||
// check options
|
// check options
|
||||||
if (typeof options.passphrase !== 'string' || !options.privateKeyArmored || !options.publicKeyArmored) {
|
if (!options.privateKeyArmored || !options.publicKeyArmored) {
|
||||||
callback({
|
callback({
|
||||||
errMsg: 'Importing keys failed. Not all options set!'
|
errMsg: 'Importing keys failed. Not all options set!'
|
||||||
});
|
});
|
||||||
|
@ -6,22 +6,22 @@
|
|||||||
<div class="content" ng-switch on="state.ui">
|
<div class="content" ng-switch on="state.ui">
|
||||||
|
|
||||||
<div ng-switch-when="1">
|
<div ng-switch-when="1">
|
||||||
<p><b>Generate PGP key.</b> Choose a passphrase to protect your new key. If you forget it at a later time you will not be able to read past messages.</p><p>Alternatively you can also <a href="#" ng-click="$event.preventDefault(); importKey()">import an existing PGP key</a>.</p>
|
<p><b>Generate PGP key.</b> You can set a passphrase to protect your key on disk. But you will have to enter it everytime you open the app. If not just press continue.</p><p>Alternatively you can also <a href="#" ng-click="$event.preventDefault(); importKey()">import an existing PGP key</a>.</p>
|
||||||
<form>
|
<form>
|
||||||
<div>
|
<div>
|
||||||
<label class="input-error-message" ng-class="{'passphrase-label-ok': passphraseRating >= 2}">{{passphraseMsg}}</label><br>
|
<label class="input-error-message" ng-class="{'passphrase-label-ok': passphraseRating >= 2}">{{passphraseMsg}}</label><br>
|
||||||
<input class="input-text" ng-class="{'input-text-error': passphraseRating < 2}" type="password" ng-model="state.passphrase" ng-change="checkPassphraseQuality()" placeholder="Enter passphrase" tabindex="1" focus-me="true">
|
<input class="input-text" type="password" ng-model="state.passphrase" ng-change="checkPassphraseQuality()" placeholder="Enter passphrase" tabindex="1" focus-me="true">
|
||||||
<input class="input-text" type="password" ng-model="state.confirmation" ng-class="{'input-text-error': state.confirmation && state.confirmation !== state.passphrase}" placeholder="Confirm passphrase" tabindex="2">
|
<input class="input-text" type="password" ng-model="state.confirmation" ng-class="{'input-text-error': (state.confirmation || state.passphrase) && state.confirmation !== state.passphrase}" placeholder="Confirm passphrase" tabindex="2">
|
||||||
<span class="popover-info" data-icon-append="" popover="#passphrase-info"></span>
|
<span class="popover-info" data-icon-append="" popover="#passphrase-info"></span>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<button type="submit" ng-click="confirmPassphrase()" class="btn" ng-disabled="!state.passphrase || passphraseRating < 2 || state.passphrase !== state.confirmation" tabindex="3">Generate keypair</button>
|
<button type="submit" ng-click="confirmPassphrase()" class="btn" ng-disabled="(state.confirmation || state.passphrase) && state.confirmation !== state.passphrase" tabindex="3">Continue</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div ng-switch-when="2">
|
<div ng-switch-when="2">
|
||||||
<p><b>Generating keypair.</b> Please stand by. This can take a while...</p>
|
<p><b>Generating key.</b> Please stand by. This can take a while...</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div ng-switch-when="4">
|
<div ng-switch-when="4">
|
||||||
@ -43,9 +43,8 @@
|
|||||||
<div class="arrow"></div>
|
<div class="arrow"></div>
|
||||||
<div class="popover-title"><b>What is this?</b></div>
|
<div class="popover-title"><b>What is this?</b></div>
|
||||||
<div class="popover-content">
|
<div class="popover-content">
|
||||||
<p>A passphrase is like a password but longer.</p>
|
<p>A passphrase is like a password that protects your PGP key.</p>
|
||||||
<p>If your device is lost or stolen the passphrase protects the contents of your mailbox.</p>
|
<p>If your device is lost or stolen the passphrase protects the contents of your mailbox.</p>
|
||||||
<p>It must be at least 10 characters long and contain one special character or digit.</p>
|
|
||||||
<p>You cannot change your passphrase at a later time.</p>
|
<p>You cannot change your passphrase at a later time.</p>
|
||||||
</div>
|
</div>
|
||||||
</div><!--/.popover-->
|
</div><!--/.popover-->
|
Loading…
Reference in New Issue
Block a user