option to remember keyfiles

This commit is contained in:
Antelle 2016-02-14 14:20:21 +03:00
parent c65b7f7331
commit 4eb5eb39e9
9 changed files with 66 additions and 5 deletions

View File

@ -333,6 +333,10 @@ var AppModel = Backbone.Model.extend({
openFileWithData: function(params, callback, fileInfo, data, updateCacheOnSuccess) {
var logger = new Logger('open', params.name);
if (!params.keyFileName && fileInfo.get('keyFileName') && this.settings.get('rememberKeyFiles')) {
params.keyFileName = fileInfo.get('keyFileName');
params.keyFileData = FileModel.createKeyFileWithHash(fileInfo.get('keyFileHash'));
}
var file = new FileModel({
name: params.name,
storage: params.storage,
@ -386,6 +390,12 @@ var AppModel = Backbone.Model.extend({
syncDate: file.get('syncDate') || dt,
openDate: dt
});
if (this.settings.get('rememberKeyFiles')) {
fileInfo.set({
keyFileName: file.get('keyFileName') || null,
keyFileHash: file.getKeyFileHash()
});
}
this.fileInfos.remove(file.get('cacheId'));
this.fileInfos.unshift(fileInfo);
this.fileInfos.save();
@ -412,6 +422,11 @@ var AppModel = Backbone.Model.extend({
this.fileInfos.save();
},
getFileInfo: function(file) {
return file.get('cacheId') ? this.fileInfos.get(file.get('cacheId')) :
this.fileInfos.getMatch(file.get('storage'), file.get('name'), file.get('path'));
},
syncFile: function(file, options, callback) {
var that = this;
if (file.get('demo')) {
@ -430,8 +445,7 @@ var AppModel = Backbone.Model.extend({
path = Storage[storage].getPathForName(file.get('name'));
}
logger.info('Sync started', storage, path, options);
var fileInfo = file.get('cacheId') ? this.fileInfos.get(file.get('cacheId')) :
this.fileInfos.getMatch(file.get('storage'), file.get('name'), file.get('path'));
var fileInfo = this.getFileInfo(file);
if (!fileInfo) {
logger.info('Create new file info');
var dt = new Date();
@ -462,6 +476,12 @@ var AppModel = Backbone.Model.extend({
syncDate: file.get('syncDate'),
cacheId: fileInfo.id
});
if (that.settings.get('rememberKeyFiles')) {
fileInfo.set({
keyFileName: file.get('keyFileName') || null,
keyFileHash: file.getKeyFileHash()
});
}
if (!that.fileInfos.get(fileInfo.id)) {
that.fileInfos.unshift(fileInfo);
}
@ -599,6 +619,16 @@ var AppModel = Backbone.Model.extend({
}
});
}
},
clearStoredKeyFiles: function() {
this.fileInfos.each(function(fileInfo) {
fileInfo.set({
keyFileName: null,
keyFileHash: null
});
});
this.fileInfos.save();
}
});

View File

@ -13,6 +13,7 @@ var AppSettingsModel = Backbone.Model.extend({
autoUpdate: 'install',
clipboardSeconds: 0,
autoSave: true,
rememberKeyFiles: false,
idleMinutes: 15,
minimizeOnClose: false,
tableView: false,

View File

@ -12,7 +12,9 @@ var FileInfoModel = Backbone.Model.extend({
editState: null,
rev: null,
syncDate: null,
openDate: null
openDate: null,
keyFileName: null,
keyFileHash: null
},
initialize: function(data, options) {

View File

@ -283,6 +283,11 @@ var FileModel = Backbone.Model.extend({
this.db.saveXml(cb);
},
getKeyFileHash: function() {
var hash = this.db.credentials.keyFileHash;
return hash ? kdbxweb.ByteUtils.bytesToBase64(hash.getBinary()) : null;
},
setSyncProgress: function() {
this.set({ syncing: true });
},
@ -352,6 +357,7 @@ var FileModel = Backbone.Model.extend({
this.db.meta.keyChanged = this._oldKeyChangeDate;
}
this.set({ keyFileName: '', keyFileChanged: changed });
this.setModified();
},
setName: function(name) {
@ -424,4 +430,8 @@ var FileModel = Backbone.Model.extend({
}
});
FileModel.createKeyFileWithHash = function(hash) {
return kdbxweb.Credentials.createKeyFileWithHash(hash);
};
module.exports = FileModel;

View File

@ -200,7 +200,9 @@ var Locale = {
setGenShowSubgroups: 'Show entries from all subgroups',
setGenTableView: 'Entries list table view',
setGenColorfulIcons: 'Colorful custom icons in list',
setGenFunction: 'Function',
setGenAutoSync: 'Automatically save and sync',
setGenRememberKeyFiles: 'Remember key files',
setGenLockInactive: 'Auto-lock if the app is inactive',
setGenNoAutoLock: 'Don\'t auto-lock',
setGenLockMinutes: 'In {} minutes',

View File

@ -21,6 +21,7 @@ var SettingsGeneralView = Backbone.View.extend({
'change .settings__general-idle-minutes': 'changeIdleMinutes',
'change .settings__general-clipboard': 'changeClipboard',
'change .settings__general-auto-save': 'changeAutoSave',
'change .settings__general-remember-key-files': 'changeRememberKeyFiles',
'change .settings__general-minimize': 'changeMinimize',
'change .settings__general-lock-on-minimize': 'changeLockOnMinimize',
'change .settings__general-table-view': 'changeTableView',
@ -53,6 +54,7 @@ var SettingsGeneralView = Backbone.View.extend({
expandGroups: AppSettingsModel.instance.get('expandGroups'),
canClearClipboard: !!Launcher,
clipboardSeconds: AppSettingsModel.instance.get('clipboardSeconds'),
rememberKeyFiles: AppSettingsModel.instance.get('rememberKeyFiles'),
autoSave: AppSettingsModel.instance.get('autoSave'),
idleMinutes: AppSettingsModel.instance.get('idleMinutes'),
minimizeOnClose: AppSettingsModel.instance.get('minimizeOnClose'),
@ -144,6 +146,14 @@ var SettingsGeneralView = Backbone.View.extend({
AppSettingsModel.instance.set('autoSave', autoSave);
},
changeRememberKeyFiles: function(e) {
var rememberKeyFiles = e.target.checked || false;
AppSettingsModel.instance.set('rememberKeyFiles', rememberKeyFiles);
if (!rememberKeyFiles) {
this.appModel.clearStoredKeyFiles();
}
},
changeMinimize: function(e) {
var minimizeOnClose = e.target.checked || false;
AppSettingsModel.instance.set('minimizeOnClose', minimizeOnClose);

View File

@ -60,12 +60,17 @@
<label for="settings__general-colorful-icons">{{res 'setGenColorfulIcons'}}</label>
</div>
<h2>Function</h2>
<h2>{{res 'setGenFunction'}}</h2>
<div>
<input type="checkbox" class="settings__input input-base settings__general-auto-save" id="settings__general-auto-save"
{{#if autoSave}}checked{{/if}} />
<label for="settings__general-auto-save">{{res 'setGenAutoSync'}}</label>
</div>
<div>
<input type="checkbox" class="settings__input input-base settings__general-remember-key-files" id="settings__general-remember-key-files"
{{#if rememberKeyFiles}}checked{{/if}} />
<label for="settings__general-remember-key-files">{{res 'setGenRememberKeyFiles'}}</label>
</div>
<div>
<label for="settings__general-idle-minutes">{{res 'setGenLockInactive'}}:</label>
<select class="settings__general-idle-minutes settings__select input-base" id="settings__general-idle-minutes">

View File

@ -29,7 +29,7 @@
"dropbox": "antelle/dropbox-js#0.10.6",
"font-awesome": "~4.4.0",
"install": "~1.0.4",
"kdbxweb": "~0.3.3",
"kdbxweb": "~0.3.4",
"normalize.css": "~3.0.3",
"pikaday": "~1.3.3",
"FileSaver.js": "eligrey/FileSaver.js",

View File

@ -2,6 +2,7 @@ Release notes
-------------
##### v1.1.0 (Q2 2016)
Storage providers, usability improvements
`+` option to remember keyfiles
`+` beta version app
##### v1.0.0 (2016-02-12)