From a0d6884fd7bb7fbf140ca72d65f977cb101b912e Mon Sep 17 00:00:00 2001 From: Baptiste Grob <60621355+baptiste-grob@users.noreply.github.com> Date: Fri, 4 Sep 2020 19:01:22 +0200 Subject: [PATCH 1/5] fix: prevent importing backup files with version > 003 --- .../javascripts/directives/views/accountMenu.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/app/assets/javascripts/directives/views/accountMenu.js b/app/assets/javascripts/directives/views/accountMenu.js index a14389ed6..fb38bef4e 100644 --- a/app/assets/javascripts/directives/views/accountMenu.js +++ b/app/assets/javascripts/directives/views/accountMenu.js @@ -377,6 +377,17 @@ class AccountMenuCtrl extends PureCtrl { } async performImport(data, password) { + if (data.keyParams) { + if (Number(data.keyParams.version) > 3) { + this.setState({ + importData: null + }); + this.alertManager.alert({ + text: "This backup file was created using a later version of the application and cannot be imported." + }); + return; + } + } await this.setState({ importData: { ...this.state.importData, From 157b6c50b23f6da836d9943402b9d2c0cf72e2de Mon Sep 17 00:00:00 2001 From: Baptiste Grob <60621355+baptiste-grob@users.noreply.github.com> Date: Fri, 4 Sep 2020 19:02:04 +0200 Subject: [PATCH 2/5] chore(version): 3.3.10 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 82642176c..da58c5090 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "standard-notes-web", - "version": "3.3.6", + "version": "3.3.10", "license": "AGPL-3.0-or-later", "repository": { "type": "git", From 3b525ae40ac11a74864c2ed5584f13d09b0ce9c7 Mon Sep 17 00:00:00 2001 From: Baptiste Grob <60621355+baptiste-grob@users.noreply.github.com> Date: Mon, 7 Sep 2020 10:33:10 +0200 Subject: [PATCH 3/5] fix: handle keyParams and auth_params in import --- .../directives/views/accountMenu.js | 23 +++++++++---------- app/assets/javascripts/strings.js | 2 ++ 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/app/assets/javascripts/directives/views/accountMenu.js b/app/assets/javascripts/directives/views/accountMenu.js index fb38bef4e..ad65243a6 100644 --- a/app/assets/javascripts/directives/views/accountMenu.js +++ b/app/assets/javascripts/directives/views/accountMenu.js @@ -20,6 +20,7 @@ import { STRING_GENERATING_REGISTER_KEYS, StringImportError } from '@/strings'; +import { STRING_IMPORT_FAILED_NEWER_BACKUP } from '../../strings'; const ELEMENT_ID_IMPORT_PASSWORD_INPUT = 'import-password-request'; @@ -204,7 +205,7 @@ class AccountMenuCtrl extends PureCtrl { text: STRING_NON_MATCHING_PASSWORDS }); return; - } + } await this.setFormDataState({ confirmPassword: false, status: STRING_GENERATING_REGISTER_KEYS, @@ -336,7 +337,7 @@ class AccountMenuCtrl extends PureCtrl { } /** - * @template + * @template */ async importFileSelected(files) { const run = async () => { @@ -377,17 +378,15 @@ class AccountMenuCtrl extends PureCtrl { } async performImport(data, password) { - if (data.keyParams) { - if (Number(data.keyParams.version) > 3) { - this.setState({ - importData: null - }); - this.alertManager.alert({ - text: "This backup file was created using a later version of the application and cannot be imported." - }); - return; - } + if ( + data.keyParams || + (data.auth_params && Number(data.auth_params.version) > protocolManager.version()) + ) { + this.setState({ importData: null }); + this.alertManager.alert({ text: STRING_IMPORT_FAILED_NEWER_BACKUP }); + return; } + await this.setState({ importData: { ...this.state.importData, diff --git a/app/assets/javascripts/strings.js b/app/assets/javascripts/strings.js index 863af915a..a8d39d397 100644 --- a/app/assets/javascripts/strings.js +++ b/app/assets/javascripts/strings.js @@ -49,3 +49,5 @@ export function StringImportError({errorCount}) { /** @password_change */ export const STRING_FAILED_PASSWORD_CHANGE = "There was an error re-encrypting your items. Your password was changed, but not all your items were properly re-encrypted and synced. You should try syncing again. If all else fails, you should restore your notes from backup."; + +export const STRING_IMPORT_FAILED_NEWER_BACKUP = "This backup file was created using a newer version of the application and cannot be imported here. Please update your application and try again."; From 7f03922b6768cf9dc4b5f05d5a46b94732df8054 Mon Sep 17 00:00:00 2001 From: Baptiste Grob <60621355+baptiste-grob@users.noreply.github.com> Date: Mon, 7 Sep 2020 10:34:20 +0200 Subject: [PATCH 4/5] fix: do not run ruby-dependent command on install --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index da58c5090..f868aa8e3 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,6 @@ "start": "webpack-dev-server --progress", "bundle": "webpack --mode production", "precompile:assets": "bundle exec rails assets:precompile", - "postinstall": "npm run precompile:assets", "build": "bundle install && npm ci && npm run precompile:assets && npm run bundle", "submodules": "git submodule update --init --force --remote", "test": "karma start karma.conf.js --single-run", From a1727b1b1e92d96596f80934d20d3cb1daab1035 Mon Sep 17 00:00:00 2001 From: Baptiste Grob <60621355+baptiste-grob@users.noreply.github.com> Date: Mon, 7 Sep 2020 11:20:45 +0200 Subject: [PATCH 5/5] fix: show import error sooner --- .../javascripts/directives/views/accountMenu.js | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/app/assets/javascripts/directives/views/accountMenu.js b/app/assets/javascripts/directives/views/accountMenu.js index ad65243a6..71915f825 100644 --- a/app/assets/javascripts/directives/views/accountMenu.js +++ b/app/assets/javascripts/directives/views/accountMenu.js @@ -346,6 +346,12 @@ class AccountMenuCtrl extends PureCtrl { if (!data) { return; } + const version = data?.auth_params?.version || data?.keyParams?.version; + if (!protocolManager.supportedVersions().includes(version)) { + this.setState({ importData: null }); + this.alertManager.alert({ text: STRING_IMPORT_FAILED_NEWER_BACKUP }); + return; + } if (data.auth_params) { await this.setState({ importData: { @@ -378,15 +384,6 @@ class AccountMenuCtrl extends PureCtrl { } async performImport(data, password) { - if ( - data.keyParams || - (data.auth_params && Number(data.auth_params.version) > protocolManager.version()) - ) { - this.setState({ importData: null }); - this.alertManager.alert({ text: STRING_IMPORT_FAILED_NEWER_BACKUP }); - return; - } - await this.setState({ importData: { ...this.state.importData,