1
0
mirror of https://github.com/bitwarden/browser.git synced 2024-11-24 12:06:15 +01:00

update key and verify email notification

This commit is contained in:
Kyle Spearrin 2017-07-01 22:44:10 -04:00
parent 7ff79a0fdd
commit 5d81ed6a96
7 changed files with 146 additions and 8 deletions

View File

@ -1,7 +1,8 @@
angular
.module('bit.global')
.controller('mainController', function ($scope, $state, authService, appSettings, toastr, $window, $document) {
.controller('mainController', function ($scope, $state, authService, appSettings, toastr, $window, $document,
cryptoService, $uibModal) {
var vm = this;
vm.bodyClass = '';
vm.usingControlSidebar = vm.openControlSidebar = false;
@ -30,6 +31,7 @@ angular
});
$scope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState, fromParams) {
vm.usingEncKey = !!cryptoService.getEncKey();
vm.searchVaultText = null;
if (toState.data.bodyClass) {
@ -68,6 +70,18 @@ angular
$scope.$broadcast('organizationGroupsAdd');
};
$scope.updateKey = function () {
$uibModal.open({
animation: true,
templateUrl: 'app/settings/views/settingsUpdateKey.html',
controller: 'settingsUpdateKeyController'
});
};
$scope.verifyEmail = function () {
// TODO: send email api
};
// Append dropdown menu somewhere else
var bodyScrollbarWidth,
appendedDropdownMenu,

View File

@ -119,11 +119,12 @@ angular
return _setDeferred.promise;
}
var decodedToken = jwtHelper.decodeToken(token);
apiService.accounts.getProfile({}, function (profile) {
_userProfile = {
id: decodedToken.name,
email: decodedToken.email,
id: profile.Id,
email: profile.Email,
emailVerified: profile.EmailVerified,
premium: profile.Premium,
extended: {
name: profile.Name,
twoFactorEnabled: profile.TwoFactorEnabled,

View File

@ -0,0 +1,37 @@
angular
.module('bit.settings')
.controller('settingsUpdateKeyController', function ($scope, $state, apiService, $uibModalInstance,
cryptoService, authService, cipherService, validationService, toastr, $analytics) {
$analytics.eventTrack('settingsUpdateKeyController', { category: 'Modal' });
$scope.save = function (form) {
var encKey = cryptoService.getEncKey();
if (encKey) {
validationService.addError(form, 'MasterPasswordHash',
'You do not need to update. You are already using the new encryption key.', true);
return;
}
$scope.processing = true;
var mpHash = cryptoService.hashPassword($scope.masterPassword);
$scope.savePromise = cipherService.updateKey(mpHash, function () {
$uibModalInstance.dismiss('cancel');
authService.logOut();
$analytics.eventTrack('Key Updated');
return $state.go('frontend.login.info');
}).then(function () {
toastr.success('Please log back in. If you are using other bitwarden applications, ' +
'log out and back in to those as well.', 'Key Updated', { timeOut: 10000 });
}, processError);
};
function processError() {
$uibModalInstance.dismiss('cancel');
toastr.error('Something went wrong.', 'Oh No!');
}
$scope.close = function () {
$uibModalInstance.dismiss('cancel');
};
});

View File

@ -0,0 +1,53 @@
<div class="modal-header">
<button type="button" class="close" ng-click="close()" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title"><i class="fa fa-key"></i> Update Encryption Key</h4>
</div>
<form name="form" ng-submit="form.$valid && save(form)" api-form="savePromise" ng-show="!processing">
<div class="modal-body">
<p>
This is <b>NOT</b> a security notification indicating that anything is wrong or has been compromised on your
account. If interested, you can <a href="https://help.bitwarden.com" target="_blank">read more details here</a>.
</p>
<hr />
<p>
You are currently using an outdated encryption scheme. We've moved to larger encryption keys
that provide better security and access to newer features.
</p>
<p>
Updating your encryption key is quick and easy. Just type your master password below and you're done!
This update will eventually become mandatory.
</p>
<hr />
<div class="callout callout-warning">
<h4><i class="fa fa-warning"></i> Warning</h4>
After updating your encryption key, you are required to log out and back in to all bitwarden applications that you
are currently using (such as the mobile app or browser extensions). Failure to log out and back
in (which downloads your new encryption key) may result in data corruption. We will attempt to log you out
automatically, however it may be delayed.
</div>
<div class="callout callout-danger validation-errors" ng-show="form.$errors">
<h4>Errors have occurred</h4>
<ul>
<li ng-repeat="e in form.$errors">{{e}}</li>
</ul>
</div>
<div class="form-group" show-errors>
<label for="masterPassword">Master Password</label>
<input type="password" id="masterPassword" name="MasterPasswordHash" ng-model="masterPassword" class="form-control"
required api-field />
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary btn-flat">
Update Key
</button>
<button type="button" class="btn btn-default btn-flat" ng-click="close()">Close</button>
</div>
</form>
<div ng-show="processing" class="modal-body text-center">
<p><i class="fa fa-cog fa-spin fa-3x"></i></p>
<p>
Please wait. We are now generating a new encryption key and reencrypting all of your data. Do not close this window.
You will be automatically logged out when this process has finished.
</p>
</div>

View File

@ -64,10 +64,10 @@
<i class="fa fa-share-alt fa-fw"></i> <span>Shared</span>
</a>
</li>
<li class="treeview" ng-class="{active: $state.is('backend.user.tools') ||
<li class="treeview" ng-class="{active: $state.is('backend.user.tools') ||
$state.is('backend.user.reportsBreach')}">
<a ui-sref="backend.user.tools"><i class="fa fa-wrench fa-fw"></i> <span>Tools</span></a>
<ul class="treeview-menu" ng-class="{'menu-open': $state.is('backend.user.tools') ||
<ul class="treeview-menu" ng-class="{'menu-open': $state.is('backend.user.tools') ||
$state.is('backend.user.reportsBreach')}">
<li ng-class="{active: $state.is('backend.user.reportsBreach')}">
<a ui-sref="backend.user.reportsBreach">
@ -135,5 +135,17 @@
</section>
</aside>
<div class="content-wrapper" ui-view>
</div>
<div class="content-wrapper">
<div class="alert alert-warning alert-notification" ng-click="updateKey()" ng-if="!main.usingEncKey">
<h4><i class="fa fa-key fa-fw"></i> Update Your Encryption Key</h4>
You are currently using an outdated encryption scheme.
<a href="#" stop-click>Learn more and update now</a>.
</div>
<div class="alert alert-warning alert-notification" ng-click="verifyEmail()"
ng-if="main.usingEncKey && main.userProfile && !main.userProfile.emailVerified">
<h4><i class="fa fa-envelope fa-fw"></i> Verify Your Email</h4>
Verify your account's email address to unlock access to all features.
<a href="#" stop-click>Send verification email now</a>.
</div>
<div ui-view></div>
</div>

View File

@ -206,6 +206,7 @@
<script src="app/settings/settingsAddEditEquivalentDomainController.js"></script>
<script src="app/settings/settingsDeleteController.js"></script>
<script src="app/settings/settingsCreateOrganizationController.js"></script>
<script src="app/settings/settingsUpdateKeyController.js"></script>
<script src="app/tools/toolsModule.js"></script>
<script src="app/tools/toolsController.js"></script>

View File

@ -370,7 +370,9 @@ form .btn .loading-icon {
display: none;
}
}
/* Callouts */
.callout.callout-default {
background-color: #fff;
border-color: darken(@gray, 10%);
@ -402,7 +404,19 @@ form .btn .loading-icon {
color: @btn-default-color;
}
}
/* Alerts */
.alert-notification {
border-radius: 0;
border-left: none;
border-right: none;
margin-bottom: 0;
cursor: pointer;
}
/* Boxes */
.box > .list-group {
margin-bottom: 0;
}
@ -459,7 +473,9 @@ form .btn .loading-icon {
}
}
}
/* Toastr */
#toast-container {
position: absolute;
@ -531,11 +547,15 @@ form .btn .loading-icon {
}
}
}
/* Typography */
h1, h2, h3, h4, h5, h6 {
margin-top: 0;
}
/* Misc */
.strike {
text-decoration: line-through;
color: @text-muted;