mirror of
https://github.com/bitwarden/browser.git
synced 2024-12-26 17:08:33 +01:00
more login to cipher renames
This commit is contained in:
parent
884bce4ec4
commit
0fc9f498df
@ -134,26 +134,26 @@
|
||||
data: { authorize: true },
|
||||
params: { animation: null, from: 'vault' }
|
||||
})
|
||||
.state('viewLogin', {
|
||||
url: '/view-login?loginId',
|
||||
templateUrl: 'app/vault/views/vaultViewLogin.html',
|
||||
controller: 'vaultViewLoginController',
|
||||
.state('viewCipher', {
|
||||
url: '/view-cipher?cipherId',
|
||||
templateUrl: 'app/vault/views/vaultViewCipher.html',
|
||||
controller: 'vaultViewCipherController',
|
||||
data: { authorize: true },
|
||||
params: { animation: null, from: 'vault' }
|
||||
})
|
||||
.state('addLogin', {
|
||||
url: '/add-login',
|
||||
templateUrl: 'app/vault/views/vaultAddLogin.html',
|
||||
controller: 'vaultAddLoginController',
|
||||
.state('addCipher', {
|
||||
url: '/add-cipher',
|
||||
templateUrl: 'app/vault/views/vaultAddCipher.html',
|
||||
controller: 'vaultAddCipherController',
|
||||
data: { authorize: true },
|
||||
params: { animation: null, name: null, uri: null, folderId: null, login: null, from: 'vault' }
|
||||
params: { animation: null, name: null, uri: null, folderId: null, cipher: null, from: 'vault' }
|
||||
})
|
||||
.state('editLogin', {
|
||||
url: '/edit-login?loginId',
|
||||
templateUrl: 'app/vault/views/vaultEditLogin.html',
|
||||
controller: 'vaultEditLoginController',
|
||||
.state('editCipher', {
|
||||
url: '/edit-cipher?cipherId',
|
||||
templateUrl: 'app/vault/views/vaultEditCipher.html',
|
||||
controller: 'vaultEditCipherController',
|
||||
data: { authorize: true },
|
||||
params: { animation: null, fromView: true, login: null, from: 'vault' }
|
||||
params: { animation: null, fromView: true, cipher: null, from: 'vault' }
|
||||
})
|
||||
.state('attachments', {
|
||||
url: '/attachments?id',
|
||||
|
@ -1,7 +1,7 @@
|
||||
angular
|
||||
.module('bit.current')
|
||||
|
||||
.controller('currentController', function ($scope, loginService, utilsService, toastr, $q, $window, $state, $timeout,
|
||||
.controller('currentController', function ($scope, loginService, utilsService, toastr, $window, $state, $timeout,
|
||||
autofillService, $analytics, i18nService, totpService, tokenService) {
|
||||
$scope.i18n = i18nService;
|
||||
|
||||
@ -10,7 +10,7 @@ angular
|
||||
domain = null,
|
||||
canAutofill = false;
|
||||
|
||||
$scope.logins = [];
|
||||
$scope.ciphers = [];
|
||||
$scope.loaded = false;
|
||||
$scope.searchText = null;
|
||||
$('#search').focus();
|
||||
@ -42,9 +42,9 @@ angular
|
||||
canAutofill = true;
|
||||
});
|
||||
|
||||
$q.when(loginService.getAllDecryptedForDomain(domain)).then(function (logins) {
|
||||
loginService.getAllDecryptedForDomain(domain).then(function (logins) {
|
||||
$scope.loaded = true;
|
||||
$scope.logins = logins;
|
||||
$scope.ciphers = ciphers;
|
||||
});
|
||||
});
|
||||
}
|
||||
@ -59,8 +59,8 @@ angular
|
||||
$analytics.eventTrack('Copied ' + (type === i18nService.username ? 'Username' : 'Password'));
|
||||
};
|
||||
|
||||
$scope.addLogin = function () {
|
||||
$state.go('addLogin', {
|
||||
$scope.addCipher = function () {
|
||||
$state.go('addCipher', {
|
||||
animation: 'in-slide-up',
|
||||
name: domain,
|
||||
uri: url,
|
||||
@ -68,14 +68,14 @@ angular
|
||||
});
|
||||
};
|
||||
|
||||
$scope.fillLogin = function (login) {
|
||||
$scope.fillCipher = function (cipher) {
|
||||
if (!canAutofill) {
|
||||
$analytics.eventTrack('Autofilled Error');
|
||||
toastr.error(i18nService.autofillError);
|
||||
}
|
||||
|
||||
autofillService.doAutoFill({
|
||||
login: login,
|
||||
cipher: cipher,
|
||||
pageDetails: pageDetails,
|
||||
fromBackground: false
|
||||
}).then(function (totpCode) {
|
||||
@ -92,21 +92,21 @@ angular
|
||||
});
|
||||
};
|
||||
|
||||
$scope.viewLogin = function (login) {
|
||||
$state.go('viewLogin', {
|
||||
loginId: login.id,
|
||||
$scope.viewCipher = function (cipher) {
|
||||
$state.go('viewCipher', {
|
||||
cipherId: cipher.id,
|
||||
animation: 'in-slide-up',
|
||||
from: 'current'
|
||||
});
|
||||
};
|
||||
|
||||
$scope.sortUriMatch = function (login) {
|
||||
$scope.sortUriMatch = function (cipher) {
|
||||
// exact matches should sort earlier.
|
||||
return url && url.startsWith(login.uri) ? 0 : 1;
|
||||
return url && url.startsWith(cipher.uri) ? 0 : 1;
|
||||
};
|
||||
|
||||
$scope.sortLastUsed = function (login) {
|
||||
return login.localData && login.localData.lastUsedDate ? -1 * login.localData.lastUsedDate : 0;
|
||||
$scope.sortLastUsed = function (cipher) {
|
||||
return cipher.localData && cipher.localData.lastUsedDate ? -1 * cipher.localData.lastUsedDate : 0;
|
||||
};
|
||||
|
||||
$scope.searchVault = function () {
|
||||
|
@ -10,47 +10,47 @@
|
||||
<i class="fa fa-search"></i>
|
||||
</div>
|
||||
<div class="right">
|
||||
<a href="" ng-click="addLogin()"><i class="fa fa-plus fa-lg"></i></a>
|
||||
<a href="" ng-click="addCipher()"><i class="fa fa-plus fa-lg"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="content content-tabs">
|
||||
<div ng-if="logins.length">
|
||||
<div ng-if="ciphers.length">
|
||||
<div class="list">
|
||||
<div class="list-grouped">
|
||||
<a href="#" stop-click ng-click="fillLogin(login)" class="list-grouped-item condensed"
|
||||
title="{{i18n.autoFill}} {{login.name}}"
|
||||
ng-repeat="login in theLogins = (logins | orderBy: [sortUriMatch, sortLastUsed, 'name', 'username'])
|
||||
<a href="#" stop-click ng-click="fillCipher(cipher)" class="list-grouped-item condensed"
|
||||
title="{{i18n.autoFill}} {{cipher.name}}"
|
||||
ng-repeat="cipher in theCiphers = (ciphers | orderBy: [sortUriMatch, sortLastUsed, 'name', 'subTitle'])
|
||||
track by $index">
|
||||
<span class="btn-list" stop-prop stop-click title="{{i18n.copyPassword}}"
|
||||
ngclipboard ngclipboard-error="clipboardError(e)"
|
||||
ngclipboard-success="clipboardSuccess(e, i18n.password)"
|
||||
data-clipboard-text="{{login.password}}" ng-class="{'disabled': !login.password}">
|
||||
data-clipboard-text="{{cipher.password}}" ng-class="{'disabled': !cipher.password}">
|
||||
<i class="fa fa-lg fa-key"></i>
|
||||
</span>
|
||||
<span class="btn-list" stop-prop stop-click title="{{i18n.copyUsername}}"
|
||||
ngclipboard ngclipboard-error="clipboardError(e)"
|
||||
ngclipboard-success="clipboardSuccess(e, i18n.username)"
|
||||
data-clipboard-text="{{login.username}}" ng-class="{'disabled': !login.username}">
|
||||
data-clipboard-text="{{cipher.username}}" ng-class="{'disabled': !cipher.username}">
|
||||
<i class="fa fa-lg fa-user"></i>
|
||||
</span>
|
||||
<span class="btn-list" ng-click="viewLogin(login)" stop-prop stop-click
|
||||
title="{{i18n.edit}} {{login.name}}">
|
||||
<span class="btn-list" ng-click="viewCipher(cipher)" stop-prop stop-click
|
||||
title="{{i18n.edit}} {{cipher.name}}">
|
||||
<i class="fa fa-lg fa-pencil"></i>
|
||||
</span>
|
||||
<icon uri="login.uri"></icon>
|
||||
<icon uri="cipher.uri"></icon>
|
||||
<span class="text">
|
||||
{{login.name}}
|
||||
<i class="fa fa-share-alt text-muted" ng-if="login.organizationId" title="{{i18n.shared}}"></i>
|
||||
{{cipher.name}}
|
||||
<i class="fa fa-share-alt text-muted" ng-if="cipher.organizationId" title="{{i18n.shared}}"></i>
|
||||
</span>
|
||||
<span class="detail">{{login.username}}</span>
|
||||
<span class="detail">{{cipher.subTitle}}</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="centered-message" ng-if="loaded && !logins.length">
|
||||
<div class="centered-message" ng-if="loaded && !ciphers.length">
|
||||
<p>
|
||||
{{i18n.autoFillInfo}}
|
||||
<button ng-click="addLogin()" style="margin-top: 20px;" class="btn btn-link btn-block">{{i18n.addLogin}}</button>
|
||||
<button ng-click="addCipher()" style="margin-top: 20px;" class="btn btn-link btn-block">{{i18n.addLogin}}</button>
|
||||
</p>
|
||||
</div>
|
||||
<div class="page-loading" ng-if="!loaded">
|
||||
|
@ -1,7 +1,7 @@
|
||||
angular
|
||||
.module('bit.vault')
|
||||
|
||||
.controller('vaultAddLoginController', function ($scope, $state, $stateParams, loginService, folderService,
|
||||
.controller('vaultAddCipherController', function ($scope, $state, $stateParams, loginService, folderService,
|
||||
cryptoService, $q, toastr, utilsService, $analytics, i18nService, constantsService) {
|
||||
$scope.i18n = i18nService;
|
||||
$scope.constants = constantsService;
|
||||
@ -9,17 +9,17 @@
|
||||
var from = $stateParams.from,
|
||||
folderId = $stateParams.folderId;
|
||||
|
||||
$scope.login = {
|
||||
$scope.cipher = {
|
||||
folderId: folderId,
|
||||
name: $stateParams.name,
|
||||
uri: $stateParams.uri
|
||||
};
|
||||
|
||||
if ($stateParams.login) {
|
||||
angular.extend($scope.login, $stateParams.login);
|
||||
if ($stateParams.cipher) {
|
||||
angular.extend($scope.cipher, $stateParams.cipher);
|
||||
}
|
||||
|
||||
if (!$stateParams.login && $scope.login.name && $scope.login.uri) {
|
||||
if (!$stateParams.cipher && $scope.cipher.name && $scope.cipher.uri) {
|
||||
$('#username').focus();
|
||||
}
|
||||
else {
|
||||
@ -38,10 +38,10 @@
|
||||
return;
|
||||
}
|
||||
|
||||
$scope.savePromise = $q.when(loginService.encrypt(model)).then(function (loginModel) {
|
||||
var login = new Login(loginModel, true);
|
||||
return $q.when(loginService.saveWithServer(login)).then(function (login) {
|
||||
$analytics.eventTrack('Added Login');
|
||||
$scope.savePromise = loginService.encrypt(model).then(function (cipherModel) {
|
||||
var cipher = new Cipher(cipherModel, true);
|
||||
return loginService.saveWithServer(cipher).then(function (c) {
|
||||
$analytics.eventTrack('Added Cipher');
|
||||
toastr.success(i18nService.addedLogin);
|
||||
$scope.close();
|
||||
});
|
||||
@ -68,11 +68,11 @@
|
||||
};
|
||||
|
||||
$scope.addField = function (type) {
|
||||
if (!$scope.login.fields) {
|
||||
$scope.login.fields = [];
|
||||
if (!$scope.cipher.fields) {
|
||||
$scope.cipher.fields = [];
|
||||
}
|
||||
|
||||
$scope.login.fields.push({
|
||||
$scope.cipher.fields.push({
|
||||
type: parseInt(type),
|
||||
name: null,
|
||||
value: null
|
||||
@ -80,9 +80,9 @@
|
||||
};
|
||||
|
||||
$scope.removeField = function (field) {
|
||||
var index = $scope.login.fields.indexOf(field);
|
||||
var index = $scope.cipher.fields.indexOf(field);
|
||||
if (index > -1) {
|
||||
$scope.login.fields.splice(index, 1);
|
||||
$scope.cipher.fields.splice(index, 1);
|
||||
}
|
||||
};
|
||||
|
||||
@ -92,7 +92,7 @@
|
||||
animation: 'in-slide-up',
|
||||
addState: {
|
||||
from: from,
|
||||
login: $scope.login
|
||||
cipher: $scope.cipher
|
||||
}
|
||||
});
|
||||
};
|
@ -118,7 +118,7 @@
|
||||
|
||||
$scope.addCipher = function () {
|
||||
storeState();
|
||||
$state.go('addLogin', {
|
||||
$state.go('addCipher', {
|
||||
animation: 'in-slide-up',
|
||||
from: 'vault'
|
||||
});
|
||||
@ -141,8 +141,8 @@
|
||||
}
|
||||
|
||||
storeState();
|
||||
$state.go('viewLogin', {
|
||||
loginId: cipher.id,
|
||||
$state.go('viewCipher', {
|
||||
cipherId: cipher.id,
|
||||
animation: 'in-slide-up',
|
||||
from: 'vault'
|
||||
});
|
||||
|
@ -1,30 +1,30 @@
|
||||
angular
|
||||
.module('bit.vault')
|
||||
|
||||
.controller('vaultEditLoginController', function ($scope, $state, $stateParams, loginService, folderService,
|
||||
.controller('vaultEditCipherController', function ($scope, $state, $stateParams, loginService, folderService,
|
||||
cryptoService, toastr, SweetAlert, utilsService, $analytics, i18nService, constantsService) {
|
||||
$scope.i18n = i18nService;
|
||||
$scope.constants = constantsService;
|
||||
$scope.showAttachments = !utilsService.isEdge();
|
||||
$scope.addFieldType = constantsService.fieldType.text.toString();
|
||||
var loginId = $stateParams.loginId;
|
||||
var cipherId = $stateParams.cipherId;
|
||||
var fromView = $stateParams.fromView;
|
||||
var from = $stateParams.from;
|
||||
|
||||
$scope.login = {
|
||||
$scope.cipher = {
|
||||
folderId: null
|
||||
};
|
||||
|
||||
$('#name').focus();
|
||||
|
||||
if ($stateParams.login) {
|
||||
angular.extend($scope.login, $stateParams.login);
|
||||
if ($stateParams.cipher) {
|
||||
angular.extend($scope.cipher, $stateParams.cipher);
|
||||
}
|
||||
else {
|
||||
loginService.get(loginId).then(function (login) {
|
||||
return login.decrypt();
|
||||
loginService.get(cipherId).then(function (cipher) {
|
||||
return cipher.decrypt();
|
||||
}).then(function (model) {
|
||||
$scope.login = model;
|
||||
$scope.cipher = model;
|
||||
});
|
||||
}
|
||||
|
||||
@ -41,10 +41,10 @@ angular
|
||||
return;
|
||||
}
|
||||
|
||||
$scope.savePromise = loginService.encrypt(model).then(function (loginModel) {
|
||||
var login = new Login(loginModel, true);
|
||||
return loginService.saveWithServer(login).then(function (login) {
|
||||
$analytics.eventTrack('Edited Login');
|
||||
$scope.savePromise = loginService.encrypt(model).then(function (cipherModel) {
|
||||
var cipher = new Cipher(cipherModel, true);
|
||||
return loginService.saveWithServer(cipher).then(function (c) {
|
||||
$analytics.eventTrack('Edited Cipher');
|
||||
toastr.success(i18nService.editedLogin);
|
||||
$scope.close();
|
||||
});
|
||||
@ -60,8 +60,8 @@ angular
|
||||
cancelButtonText: i18nService.no
|
||||
}, function (confirmed) {
|
||||
if (confirmed) {
|
||||
loginService.deleteWithServer(loginId).then(function () {
|
||||
$analytics.eventTrack('Deleted Login');
|
||||
loginService.deleteWithServer(cipherId).then(function () {
|
||||
$analytics.eventTrack('Deleted Cipher');
|
||||
toastr.success(i18nService.deletedLogin);
|
||||
$state.go('tabs.vault', {
|
||||
animation: 'out-slide-down'
|
||||
@ -73,7 +73,7 @@ angular
|
||||
|
||||
$scope.attachments = function () {
|
||||
$state.go('attachments', {
|
||||
id: loginId,
|
||||
id: cipherId,
|
||||
animation: 'in-slide-up',
|
||||
from: from,
|
||||
fromView: fromView
|
||||
@ -82,8 +82,8 @@ angular
|
||||
|
||||
$scope.close = function () {
|
||||
if (fromView) {
|
||||
$state.go('viewLogin', {
|
||||
loginId: loginId,
|
||||
$state.go('viewCipher', {
|
||||
cipherId: cipherId,
|
||||
animation: 'out-slide-down',
|
||||
from: from
|
||||
});
|
||||
@ -96,11 +96,11 @@ angular
|
||||
};
|
||||
|
||||
$scope.addField = function (type) {
|
||||
if (!$scope.login.fields) {
|
||||
$scope.login.fields = [];
|
||||
if (!$scope.cipher.fields) {
|
||||
$scope.cipher.fields = [];
|
||||
}
|
||||
|
||||
$scope.login.fields.push({
|
||||
$scope.cipher.fields.push({
|
||||
type: parseInt(type),
|
||||
name: null,
|
||||
value: null
|
||||
@ -108,14 +108,14 @@ angular
|
||||
};
|
||||
|
||||
$scope.removeField = function (field) {
|
||||
var index = $scope.login.fields.indexOf(field);
|
||||
var index = $scope.cipher.fields.indexOf(field);
|
||||
if (index > -1) {
|
||||
$scope.login.fields.splice(index, 1);
|
||||
$scope.cipher.fields.splice(index, 1);
|
||||
}
|
||||
};
|
||||
|
||||
$scope.generatePassword = function () {
|
||||
if ($scope.login.password) {
|
||||
if ($scope.cipher.password) {
|
||||
SweetAlert.swal({
|
||||
title: i18nService.overwritePassword,
|
||||
text: i18nService.overwritePasswordConfirmation,
|
||||
@ -140,8 +140,8 @@ angular
|
||||
animation: 'in-slide-up',
|
||||
editState: {
|
||||
fromView: fromView,
|
||||
loginId: loginId,
|
||||
login: $scope.login,
|
||||
cipherId: cipherId,
|
||||
cipher: $scope.cipher,
|
||||
from: from
|
||||
}
|
||||
});
|
@ -1,7 +1,7 @@
|
||||
angular
|
||||
.module('bit.vault')
|
||||
|
||||
.controller('vaultViewLoginController', function ($scope, $state, $stateParams, loginService, toastr,
|
||||
.controller('vaultViewCipherController', function ($scope, $state, $stateParams, loginService, toastr,
|
||||
$analytics, i18nService, utilsService, totpService, $timeout, tokenService, $window, cryptoService, SweetAlert,
|
||||
constantsService) {
|
||||
$scope.constants = constantsService;
|
||||
@ -11,35 +11,35 @@ angular
|
||||
totpInterval = null;
|
||||
|
||||
$scope.isPremium = tokenService.getPremium();
|
||||
$scope.login = null;
|
||||
loginService.get($stateParams.loginId).then(function (login) {
|
||||
if (!login) {
|
||||
$scope.cipher = null;
|
||||
loginService.get($stateParams.cipherId).then(function (cipher) {
|
||||
if (!cipher) {
|
||||
return;
|
||||
}
|
||||
|
||||
return login.decrypt();
|
||||
return cipher.decrypt();
|
||||
}).then(function (model) {
|
||||
$scope.login = model;
|
||||
$scope.cipher = model;
|
||||
|
||||
if (model.password) {
|
||||
$scope.login.maskedPassword = $scope.maskValue(model.password);
|
||||
$scope.cipher.maskedPassword = $scope.maskValue(model.password);
|
||||
}
|
||||
|
||||
if (model.uri) {
|
||||
$scope.login.showLaunch = model.uri.startsWith('http://') || model.uri.startsWith('https://');
|
||||
$scope.cipher.showLaunch = model.uri.startsWith('http://') || model.uri.startsWith('https://');
|
||||
var domain = utilsService.getDomain(model.uri);
|
||||
if (domain) {
|
||||
$scope.login.website = domain;
|
||||
$scope.cipher.website = domain;
|
||||
}
|
||||
else {
|
||||
$scope.login.website = model.uri;
|
||||
$scope.cipher.website = model.uri;
|
||||
}
|
||||
}
|
||||
else {
|
||||
$scope.login.showLaunch = false;
|
||||
$scope.cipher.showLaunch = false;
|
||||
}
|
||||
|
||||
if (model.totp && (login.organizationUseTotp || tokenService.getPremium())) {
|
||||
if (model.totp && (cipher.organizationUseTotp || tokenService.getPremium())) {
|
||||
totpUpdateCode();
|
||||
totpTick();
|
||||
|
||||
@ -53,10 +53,10 @@ angular
|
||||
}
|
||||
});
|
||||
|
||||
$scope.edit = function (login) {
|
||||
$state.go('editLogin', {
|
||||
$scope.edit = function (cipher) {
|
||||
$state.go('editCipher', {
|
||||
animation: 'in-slide-up',
|
||||
loginId: login.id,
|
||||
cipherId: cipher.id,
|
||||
fromView: true,
|
||||
from: from
|
||||
});
|
||||
@ -84,10 +84,10 @@ angular
|
||||
}
|
||||
};
|
||||
|
||||
$scope.launchWebsite = function (login) {
|
||||
if (login.showLaunch) {
|
||||
$scope.launchWebsite = function (cipher) {
|
||||
if (cipher.showLaunch) {
|
||||
$analytics.eventTrack('Launched Website');
|
||||
chrome.tabs.create({ url: login.uri });
|
||||
chrome.tabs.create({ url: cipher.uri });
|
||||
}
|
||||
};
|
||||
|
||||
@ -120,7 +120,7 @@ angular
|
||||
};
|
||||
|
||||
$scope.download = function (attachment) {
|
||||
if (!$scope.login.organizationId && !tokenService.getPremium()) {
|
||||
if (!$scope.cipher.organizationId && !tokenService.getPremium()) {
|
||||
SweetAlert.swal({
|
||||
title: i18nService.premiumRequired,
|
||||
text: i18nService.premiumRequiredDesc,
|
||||
@ -152,7 +152,7 @@ angular
|
||||
return;
|
||||
}
|
||||
|
||||
cryptoService.getOrgKey($scope.login.organizationId).then(function (key) {
|
||||
cryptoService.getOrgKey($scope.cipher.organizationId).then(function (key) {
|
||||
return cryptoService.decryptFromBytes(req.response, key);
|
||||
}).then(function (decBuf) {
|
||||
var blob = new Blob([decBuf]);
|
||||
@ -192,11 +192,11 @@ angular
|
||||
});
|
||||
|
||||
function totpUpdateCode() {
|
||||
if (!$scope.login.totp) {
|
||||
if (!$scope.cipher.totp) {
|
||||
return;
|
||||
}
|
||||
|
||||
totpService.getCode($scope.login.totp).then(function (code) {
|
||||
totpService.getCode($scope.cipher.totp).then(function (code) {
|
||||
$timeout(function () {
|
||||
if (code) {
|
||||
$scope.totpCodeFormatted = code.substring(0, 3) + ' ' + code.substring(3);
|
@ -190,7 +190,7 @@
|
||||
|
||||
storeState();
|
||||
$state.go('viewLogin', {
|
||||
loginId: cipher.id,
|
||||
cipherId: cipher.id,
|
||||
animation: 'in-slide-up',
|
||||
from: 'folder'
|
||||
});
|
||||
|
@ -1,4 +1,4 @@
|
||||
<form name="theForm" ng-submit="save(login)" bit-form="savePromise" autocomplete="off">
|
||||
<form name="theForm" ng-submit="save(cipher)" bit-form="savePromise" autocomplete="off">
|
||||
<div class="header">
|
||||
<div class="left">
|
||||
<a ng-click="close()" href="">{{i18n.cancel}}</a>
|
||||
@ -14,24 +14,24 @@
|
||||
<div class="list-section">
|
||||
<div class="list-section-header">
|
||||
{{i18n.loginInformation}}
|
||||
<i class="fa fa-share-alt fa-lg pull-right" ng-if="login.organizationId" title="{{i18n.shared}}"></i>
|
||||
<i class="fa fa-share-alt fa-lg pull-right" ng-if="cipher.organizationId" title="{{i18n.shared}}"></i>
|
||||
</div>
|
||||
<div class="list-section-items">
|
||||
<div class="list-section-item">
|
||||
<label for="name" class="item-label">{{i18n.name}}</label>
|
||||
<input id="name" type="text" name="Name" ng-model="login.name">
|
||||
<input id="name" type="text" name="Name" ng-model="cipher.name">
|
||||
</div>
|
||||
<div class="list-section-item">
|
||||
<label for="uri" class="item-label">{{i18n.uri}}</label>
|
||||
<input id="uri" type="text" name="Uri" ng-model="login.uri">
|
||||
<input id="uri" type="text" name="Uri" ng-model="cipher.uri">
|
||||
</div>
|
||||
<div class="list-section-item">
|
||||
<label for="username" class="item-label">{{i18n.username}}</label>
|
||||
<input id="username" type="text" name="Username" ng-model="login.username">
|
||||
<input id="username" type="text" name="Username" ng-model="cipher.username">
|
||||
</div>
|
||||
<div class="list-section-item">
|
||||
<label for="password" class="item-label">{{i18n.password}}</label>
|
||||
<input id="password" type="password" name="Password" ng-model="login.password">
|
||||
<input id="password" type="password" name="Password" ng-model="cipher.password">
|
||||
</div>
|
||||
<a class="list-section-item" href="" ng-click="generatePassword()">
|
||||
{{i18n.generatePassword}}
|
||||
@ -43,11 +43,11 @@
|
||||
<div class="list-section-items">
|
||||
<div class="list-section-item">
|
||||
<label for="totp" class="item-label">{{i18n.authenticatorKeyTotp}}</label>
|
||||
<input id="totp" type="text" name="Totp" ng-model="login.totp">
|
||||
<input id="totp" type="text" name="Totp" ng-model="cipher.totp">
|
||||
</div>
|
||||
<div class="list-section-item">
|
||||
<label for="folder" class="item-label">{{i18n.folder}}</label>
|
||||
<select id="folder" name="FolderId" ng-model="login.folderId">
|
||||
<select id="folder" name="FolderId" ng-model="cipher.folderId">
|
||||
<option ng-repeat="folder in folders | orderBy: ['name'] track by $index" value="{{folder.id}}">
|
||||
{{folder.name}}
|
||||
</option>
|
||||
@ -55,7 +55,7 @@
|
||||
</div>
|
||||
<div class="list-section-item list-section-item-checkbox">
|
||||
<label for="favorite">{{i18n.favorite}}</label>
|
||||
<input id="favorite" name="Favorite" type="checkbox" ng-model="login.favorite">
|
||||
<input id="favorite" name="Favorite" type="checkbox" ng-model="cipher.favorite">
|
||||
</div>
|
||||
<a class="list-section-item" href="#" stop-click ng-click="attachments()" ng-if="showAttachments">
|
||||
{{i18n.attachments}}
|
||||
@ -69,7 +69,7 @@
|
||||
</div>
|
||||
<div class="list-section-items">
|
||||
<div class="list-section-item">
|
||||
<textarea id="notes" name="Notes" rows="5" ng-model="login.notes"></textarea>
|
||||
<textarea id="notes" name="Notes" rows="5" ng-model="cipher.notes"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -79,7 +79,7 @@
|
||||
</div>
|
||||
<div class="list-section-items">
|
||||
<div class="list-section-item list-section-item-table"
|
||||
ng-if="login.fields && login.fields.length" ng-repeat="field in login.fields"
|
||||
ng-if="cipher.fields && cipher.fields.length" ng-repeat="field in cipher.fields"
|
||||
ng-class="{'list-section-item-checkbox' : field.type === constants.fieldType.boolean}">
|
||||
<a href="#" stop-click ng-click="removeField(field)" class="action-button text-danger">
|
||||
<i class="fa fa-close fa-lg"></i>
|
@ -3,7 +3,7 @@
|
||||
<a href="" ng-click="close()">{{i18n.close}}</a>
|
||||
</div>
|
||||
<div class="right">
|
||||
<a href="" ng-click="edit(login)">{{i18n.edit}}</a>
|
||||
<a href="" ng-click="edit(cipher)">{{i18n.edit}}</a>
|
||||
</div>
|
||||
<div class="title">{{i18n.viewLogin}}</div>
|
||||
</div>
|
||||
@ -12,42 +12,42 @@
|
||||
<div class="list-section">
|
||||
<div class="list-section-header">
|
||||
{{i18n.loginInformation}}
|
||||
<i class="fa fa-share-alt fa-lg pull-right" ng-if="login.organizationId" title="{{i18n.shared}}"></i>
|
||||
<i class="fa fa-share-alt fa-lg pull-right" ng-if="cipher.organizationId" title="{{i18n.shared}}"></i>
|
||||
</div>
|
||||
<div class="list-section-items">
|
||||
<div class="list-section-item">
|
||||
<span class="item-label">{{i18n.name}}</span>
|
||||
{{login.name}}
|
||||
{{cipher.name}}
|
||||
</div>
|
||||
<div class="list-section-item" ng-if="login.uri" title="{{login.uri}}">
|
||||
<a class="btn-list" href="" title="{{i18n.launchWebsite}}" ng-click="launchWebsite(login)"
|
||||
ng-show="login.showLaunch">
|
||||
<div class="list-section-item" ng-if="cipher.uri" title="{{cipher.uri}}">
|
||||
<a class="btn-list" href="" title="{{i18n.launchWebsite}}" ng-click="launchWebsite(cipher)"
|
||||
ng-show="cipher.showLaunch">
|
||||
<i class="fa fa-lg fa-share-square-o"></i>
|
||||
</a>
|
||||
<span class="item-label">{{i18n.website}}</span>
|
||||
{{login.website}}
|
||||
{{cipher.website}}
|
||||
</div>
|
||||
<div class="list-section-item" ng-if="login.username">
|
||||
<div class="list-section-item" ng-if="cipher.username">
|
||||
<a class="btn-list" href="" title="{{i18n.copyUsername}}" ngclipboard ngclipboard-error="clipboardError(e)"
|
||||
ngclipboard-success="clipboardSuccess(e, i18n.username)" data-clipboard-text="{{login.username}}">
|
||||
ngclipboard-success="clipboardSuccess(e, i18n.username)" data-clipboard-text="{{cipher.username}}">
|
||||
<i class="fa fa-lg fa-clipboard"></i>
|
||||
</a>
|
||||
<span class="item-label">{{i18n.username}}</span>
|
||||
<span id="username">{{login.username}}</span>
|
||||
<span id="username">{{cipher.username}}</span>
|
||||
</div>
|
||||
<div class="list-section-item" ng-if="login.password">
|
||||
<div class="list-section-item" ng-if="cipher.password">
|
||||
<a class="btn-list" href="" title="{{i18n.copyPassword}}" ngclipboard ngclipboard-error="clipboardError(e)"
|
||||
ngclipboard-success="clipboardSuccess(e, i18n.password)" data-clipboard-text="{{login.password}}">
|
||||
ngclipboard-success="clipboardSuccess(e, i18n.password)" data-clipboard-text="{{cipher.password}}">
|
||||
<i class="fa fa-lg fa-clipboard"></i>
|
||||
</a>
|
||||
<a class="btn-list" href="" title="{{i18n.togglePassword}}" ng-click="togglePassword()">
|
||||
<i class="fa fa-lg" ng-class="[{'fa-eye': !showPassword}, {'fa-eye-slash': showPassword}]"></i>
|
||||
</a>
|
||||
<span class="item-label">{{i18n.password}}</span>
|
||||
<span ng-show="!showPassword" class="monospaced">{{login.maskedPassword}}</span>
|
||||
<span id="password" ng-show="showPassword" class="monospaced">{{login.password}}</span>
|
||||
<span ng-show="!showPassword" class="monospaced">{{cipher.maskedPassword}}</span>
|
||||
<span id="password" ng-show="showPassword" class="monospaced">{{cipher.password}}</span>
|
||||
</div>
|
||||
<div class="list-section-item totp" ng-class="{'low': totpLow}" ng-if="login.totp && totpCode">
|
||||
<div class="list-section-item totp" ng-class="{'low': totpLow}" ng-if="cipher.totp && totpCode">
|
||||
<a class="btn-list" href="" title="{{i18n.copyVerificationCode}}"
|
||||
ngclipboard ngclipboard-error="clipboardError(e)"
|
||||
ngclipboard-success="clipboardSuccess(e, i18n.verificationCodeTotp)" data-clipboard-text="{{totpCode}}">
|
||||
@ -68,20 +68,20 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="list-section" ng-if="login.notes">
|
||||
<div class="list-section" ng-if="cipher.notes">
|
||||
<div class="list-section-header">
|
||||
{{i18n.notes}}
|
||||
</div>
|
||||
<div class="list-section-items">
|
||||
<div class="list-section-item pre">{{login.notes}}</div>
|
||||
<div class="list-section-item pre">{{cipher.notes}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="list-section" ng-if="login.fields && login.fields.length">
|
||||
<div class="list-section" ng-if="cipher.fields && cipher.fields.length">
|
||||
<div class="list-section-header">
|
||||
{{i18n.customFields}}
|
||||
</div>
|
||||
<div class="list-section-items">
|
||||
<div class="list-section-item" ng-repeat="field in login.fields">
|
||||
<div class="list-section-item" ng-repeat="field in cipher.fields">
|
||||
<a class="btn-list" href="" title="{{i18n.copyValue}}" ngclipboard ngclipboard-error="clipboardError(e)"
|
||||
ngclipboard-success="clipboardSuccess(e, i18n.value)" data-clipboard-text="{{field.value}}"
|
||||
ng-if="field.type !== constants.fieldType.boolean && field.value">
|
||||
@ -106,13 +106,13 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="list-section" ng-if="showAttachments && isPremium && login.attachments && login.attachments.length">
|
||||
<div class="list-section" ng-if="showAttachments && isPremium && cipher.attachments && cipher.attachments.length">
|
||||
<div class="list-section-header">
|
||||
{{i18n.attachments}}
|
||||
</div>
|
||||
<div class="list-section-items">
|
||||
<a class="list-section-item list-allow-selection" href="#" stop-click
|
||||
ng-repeat="attachment in login.attachments"
|
||||
ng-repeat="attachment in cipher.attachments"
|
||||
ng-click="download(attachment)">
|
||||
<i class="fa fa-download right-icon fa-fw no-animation" ng-if="!attachment.downloading"></i>
|
||||
<i class="fa fa-spin fa-spinner right-icon fa-fw no-animation" ng-if="attachment.downloading"></i>
|
@ -88,9 +88,9 @@
|
||||
<script src="app/vault/vaultModule.js"></script>
|
||||
<script src="app/vault/vaultController.js"></script>
|
||||
<script src="app/vault/vaultViewFolderController.js"></script>
|
||||
<script src="app/vault/vaultAddLoginController.js"></script>
|
||||
<script src="app/vault/vaultEditLoginController.js"></script>
|
||||
<script src="app/vault/vaultViewLoginController.js"></script>
|
||||
<script src="app/vault/vaultAddCipherController.js"></script>
|
||||
<script src="app/vault/vaultEditCipherController.js"></script>
|
||||
<script src="app/vault/vaultViewCipherController.js"></script>
|
||||
<script src="app/vault/vaultAttachmentsController.js"></script>
|
||||
|
||||
<script src="app/settings/settingsModule.js"></script>
|
||||
|
Loading…
Reference in New Issue
Block a user