Added a setting to store key files path only

This commit is contained in:
arantir 2016-12-11 15:39:59 +02:00
parent 3e01a8eaa2
commit c2d4037c24
6 changed files with 56 additions and 17 deletions

View File

@ -335,6 +335,9 @@
"setGenFunction": "Function",
"setGenAutoSync": "Automatically save and sync",
"setGenRememberKeyFiles": "Remember key files",
"setGenNoRememberKeyFiles": "Don't remember",
"setGenRememberKeyFilesData": "Store in the internal app storage",
"setGenRememberKeyFilesPath": "Remember only path to key files",
"setGenLockInactive": "Auto-lock if the app is inactive",
"setGenNoAutoLock": "Don't auto-lock",
"setGenLockMinutes": "In {} minutes",

View File

@ -437,9 +437,23 @@ var AppModel = Backbone.Model.extend({
openFileWithData: function(params, callback, fileInfo, data, updateCacheOnSuccess) {
var logger = new Logger('open', params.name);
if (!params.keyFileData && fileInfo && fileInfo.get('keyFileName') && this.settings.get('rememberKeyFiles')) {
if (!params.keyFileData && fileInfo && fileInfo.get('keyFileName')) {
params.keyFileName = fileInfo.get('keyFileName');
params.keyFileData = FileModel.createKeyFileWithHash(fileInfo.get('keyFileHash'));
if (this.settings.get('rememberKeyFiles') === 'data') {
params.keyFileData = FileModel.createKeyFileWithHash(fileInfo.get('keyFileHash'));
} else if (this.settings.get('rememberKeyFiles') === 'path' && fileInfo.get('keyFilePath')) {
params.keyFilePath = fileInfo.get('keyFilePath');
if (Storage.file.enabled) {
Storage.file.load(params.keyFilePath, {}, (err, data, stat) => {
if (err) {
logger.info('Storage load error', err);
callback(err);
} else {
params.keyFileData = data;
}
});
}
}
}
var file = new FileModel({
id: fileInfo ? fileInfo.id : IdGenerator.uuid(),
@ -447,6 +461,7 @@ var AppModel = Backbone.Model.extend({
storage: params.storage,
path: params.path,
keyFileName: params.keyFileName,
keyFilePath: params.keyFilePath,
backup: fileInfo && fileInfo.get('backup') || null
});
file.open(params.password, data, params.keyFileData, err => {
@ -515,11 +530,18 @@ var AppModel = Backbone.Model.extend({
openDate: dt,
backup: file.get('backup')
});
if (this.settings.get('rememberKeyFiles')) {
fileInfo.set({
keyFileName: file.get('keyFileName') || null,
keyFileHash: file.getKeyFileHash()
});
switch (this.settings.get('rememberKeyFiles')) {
case 'data':
fileInfo.set({
keyFileName: file.get('keyFileName') || null,
keyFileHash: file.getKeyFileHash()
});
break;
case 'path':
fileInfo.set({
keyFileName: file.get('keyFileName') || null,
keyFilePath: file.get('keyFilePath') || null
});
}
this.fileInfos.remove(file.id);
this.fileInfos.unshift(fileInfo);
@ -623,7 +645,7 @@ var AppModel = Backbone.Model.extend({
editState: file.getLocalEditState(),
syncDate: file.get('syncDate')
});
if (this.settings.get('rememberKeyFiles')) {
if (this.settings.get('rememberKeyFiles') === 'data') {
fileInfo.set({
keyFileName: file.get('keyFileName') || null,
keyFileHash: file.getKeyFileHash()
@ -785,6 +807,7 @@ var AppModel = Backbone.Model.extend({
this.fileInfos.each(fileInfo => {
fileInfo.set({
keyFileName: null,
keyFilePath: null,
keyFileHash: null
});
});

View File

@ -46,6 +46,11 @@ var AppSettingsModel = Backbone.Model.extend({
load: function() {
var data = SettingsStore.load('app-settings');
if (data.rememberKeyFiles === true) {
data.rememberKeyFiles = 'data';
}
if (data) {
this.set(data, {silent: true});
}

View File

@ -55,6 +55,7 @@ var OpenView = Backbone.View.extend({
path: null,
keyFileName: null,
keyFileData: null,
keyFilePath: null,
fileData: null,
rev: null
};
@ -194,6 +195,9 @@ var OpenView = Backbone.View.extend({
case 'keyFileData':
this.params.keyFileData = e.target.result;
this.params.keyFileName = file.name;
if (this.model.settings.get('rememberKeyFiles') === 'path') {
this.params.keyFilePath = file.path;
}
this.displayOpenKeyFile();
success = true;
break;
@ -242,7 +246,7 @@ var OpenView = Backbone.View.extend({
displayOpenKeyFile: function() {
this.$el.toggleClass('open--key-file', !!this.params.keyFileName);
this.$el.find('.open__settings-key-file-name').text(this.params.keyFileName || Locale.openKeyFile);
this.$el.find('.open__settings-key-file-name').text(this.params.keyFilePath || this.params.keyFileName || Locale.openKeyFile);
this.focusInput();
},
@ -277,8 +281,9 @@ var OpenView = Backbone.View.extend({
if ($(e.target).hasClass('open__settings-key-file-dropbox')) {
this.openKeyFileFromDropbox();
} else if (!this.busy && this.params.name) {
if (this.params.keyFileData) {
if (this.params.keyFileName) {
this.params.keyFileData = null;
this.params.keyFilePath = null;
this.params.keyFileName = '';
this.$el.removeClass('open--key-file');
this.$el.find('.open__settings-key-file-name').text(Locale.openKeyFile);
@ -431,6 +436,7 @@ var OpenView = Backbone.View.extend({
this.params.fileData = null;
this.params.rev = null;
this.params.keyFileName = fileInfo.get('keyFileName');
this.params.keyFilePath = fileInfo.get('keyFilePath');
this.displayOpenFile();
this.displayOpenKeyFile();
},

View File

@ -85,6 +85,7 @@ var SettingsGeneralView = Backbone.View.extend({
canClearClipboard: !!Launcher,
clipboardSeconds: AppSettingsModel.instance.get('clipboardSeconds'),
rememberKeyFiles: AppSettingsModel.instance.get('rememberKeyFiles'),
supportFiles: !!Launcher,
autoSave: AppSettingsModel.instance.get('autoSave'),
idleMinutes: AppSettingsModel.instance.get('idleMinutes'),
minimizeOnClose: AppSettingsModel.instance.get('minimizeOnClose'),
@ -233,11 +234,9 @@ var SettingsGeneralView = Backbone.View.extend({
},
changeRememberKeyFiles: function(e) {
var rememberKeyFiles = e.target.checked || false;
var rememberKeyFiles = e.target.value || false;
AppSettingsModel.instance.set('rememberKeyFiles', rememberKeyFiles);
if (!rememberKeyFiles) {
this.appModel.clearStoredKeyFiles();
}
this.appModel.clearStoredKeyFiles();
},
changeMinimize: function(e) {

View File

@ -86,9 +86,12 @@
<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>
<label for="settings__general-remember-key-files">{{res 'setGenRememberKeyFiles'}}:</label>
<select class="settings__general-remember-key-files settings__select input-base" id="settings__general-remember-key-files">
<option value="" {{#unless rememberKeyFiles}}selected{{/unless}}>{{res 'setGenNoRememberKeyFiles'}}</option>
<option value="data" {{#ifeq rememberKeyFiles 'data'}}selected{{/ifeq}}>{{res 'setGenRememberKeyFilesData'}}</option>
{{#if supportFiles}}<option value="path" {{#ifeq rememberKeyFiles 'path'}}selected{{/ifeq}}>{{res 'setGenRememberKeyFilesPath'}}</option>{{/if}}
</select>
</div>
<div>
<label for="settings__general-idle-minutes">{{res 'setGenLockInactive'}}:</label>