diff --git a/dashboard/src/components/AppImportDialog.vue b/dashboard/src/components/AppImportDialog.vue index f4efc42ee..2e4555247 100644 --- a/dashboard/src/components/AppImportDialog.vue +++ b/dashboard/src/components/AppImportDialog.vue @@ -188,22 +188,45 @@ function onBackupConfigChanged(event) { let data; try { data = JSON.parse(result.target.result); // 'provider', 'config', 'limits', 'format', 'remotePath', 'encrypted', 'encryptedFilenames' - if (data.provider === 'filesystem') { // this allows a user to upload a backup to server and import easily with an absolute path - data.remotePath = `${data.config.backupDir}/${data.remotePath}`; - } } catch (e) { console.error('Unable to parse backup config', e); return; } provider.value = data.provider; - fullPath.value = data.config.prefix ? `${data.config.prefix}/${data.remotePath}` : data.remotePath; - providerConfig.value = data.config; + if (data.provider === 'filesystem') { // this allows a user to upload a backup to server and import easily with an absolute path + fullPath.value = data.config.prefix ? `${data.config.backupDir}/${data.config.prefix}/${data.remotePath}` : `${data.config.backupDir}/${data.remotePath}`; + } else if (data.provider === 'mountpoint') { + fullPath.value = data.config.prefix ? `${data.config.mountPoint}/${data.config.prefix}/${data.remotePath}` : `${data.config.mountPoint}/${data.remotePath}`; + } else { + fullPath.value = data.config.prefix ? `${data.config.prefix}/${data.remotePath}` : data.remotePath; + } format.value = data.format; encrypted.value = !!data.encrypted; encryptionPasswordHint.value = data.encryptionPasswordHint || ''; encryptionPassword.value = ''; encryptedFilenames.value = data.encryptedFilenames; + + providerConfig.value = {}; + for (const [key, value] of Object.entries(data.config)) { + if (key === 'noHardlinks' || key === 'chown' || key === 'preserveAttributes') { + // not really used for importing + } else if (key === 'mountOptions') { // providerConfig uses a flattened format of config.mountOptions + providerConfig.value.mountOptionHost = data.config.mountOptions.host; + providerConfig.value.mountOptionPort = data.config.mountOptions.port; + providerConfig.value.mountOptionRemoteDir = data.config.mountOptions.remoteDir; + providerConfig.value.mountOptionSeal = !!data.config.mountOptions.seal; + providerConfig.value.mountOptionDiskPath = data.config.mountOptions.diskPath; + providerConfig.value.mountOptionUser = data.config.mountOptions.user; + providerConfig.value.mountOptionUsername = data.config.mountOptions.username; + providerConfig.value.mountOptionPassword = data.config.mountOptions.password; + providerConfig.value.mountOptionPrivateKey = ''; + } else { + // s3: 'accessKeyId', 'secretAccessKey', 'bucket', 'prefix', 'signatureVersion', 'endpoint', 'region', 'acceptSelfSignedCerts', 's3ForcePathStyle' + // gcs: 'bucket', 'prefix' + providerConfig.value[key] = value; + } + } }; reader.readAsText(event.target.files[0]); diff --git a/dashboard/src/views/RestoreView.vue b/dashboard/src/views/RestoreView.vue index b819d8000..abb67214e 100644 --- a/dashboard/src/views/RestoreView.vue +++ b/dashboard/src/views/RestoreView.vue @@ -276,13 +276,33 @@ function onBackupConfigChanged(event) { provider.value = data.provider; fullPath.value = data.config.prefix ? `${data.config.prefix}/${data.remotePath}` : data.remotePath; - providerConfig.value = data.config; format.value = data.format; encrypted.value = !!data.encrypted; encryptionPasswordHint.value = data.encryptionPasswordHint || ''; encryptionPassword.value = ''; encryptedFilenames.value = data.encryptedFilenames; siteId.value = data.siteId || ''; + + providerConfig.value = {}; + for (const [key, value] of Object.entries(data.config)) { + if (key === 'noHardlinks' || key === 'chown' || key === 'preserveAttributes') { + // not really used for restoring + } else if (key === 'mountOptions') { // providerConfig uses a flattened format of config.mountOptions + providerConfig.value.mountOptionHost = data.config.mountOptions.host; + providerConfig.value.mountOptionPort = data.config.mountOptions.port; + providerConfig.value.mountOptionRemoteDir = data.config.mountOptions.remoteDir; + providerConfig.value.mountOptionSeal = !!data.config.mountOptions.seal; + providerConfig.value.mountOptionDiskPath = data.config.mountOptions.diskPath; + providerConfig.value.mountOptionUser = data.config.mountOptions.user; + providerConfig.value.mountOptionUsername = data.config.mountOptions.username; + providerConfig.value.mountOptionPassword = data.config.mountOptions.password; + providerConfig.value.mountOptionPrivateKey = ''; + } else { + // s3: 'accessKeyId', 'secretAccessKey', 'bucket', 'prefix', 'signatureVersion', 'endpoint', 'region', 'acceptSelfSignedCerts', 's3ForcePathStyle' + // gcs: 'bucket', 'prefix' + providerConfig.value[key] = value; + } + } }; reader.readAsText(event.target.files[0]);