From 14d0d95f23a80d37ec2b0318fa5ac742d5dcb23c Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Fri, 18 Nov 2022 11:20:51 +0100 Subject: [PATCH 1/8] add variable to skip legacy check in installer --- dist/win/resources/main.wxs | 20 ++++++++++---------- dist/win/resources/overrides.wxi | 4 ++++ 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/dist/win/resources/main.wxs b/dist/win/resources/main.wxs index b8703a14d..659a89979 100644 --- a/dist/win/resources/main.wxs +++ b/dist/win/resources/main.wxs @@ -65,16 +65,16 @@ - - - - - - - - - - + + + + + + + + + + diff --git a/dist/win/resources/overrides.wxi b/dist/win/resources/overrides.wxi index 60133a35b..3d63573cc 100644 --- a/dist/win/resources/overrides.wxi +++ b/dist/win/resources/overrides.wxi @@ -36,4 +36,8 @@ Default value is `yes`. + + From 38062f9a8d58b3db9257cafed9bbec7256ab2562 Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Fri, 18 Nov 2022 11:32:39 +0100 Subject: [PATCH 2/8] Move Cryptomator installer defaults to actual installer file --- dist/win/resources/main.wxs | 7 ++++++- dist/win/resources/overrides.wxi | 21 ++++++++++++++------- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/dist/win/resources/main.wxs b/dist/win/resources/main.wxs index 659a89979..d6247bf05 100644 --- a/dist/win/resources/main.wxs +++ b/dist/win/resources/main.wxs @@ -23,6 +23,11 @@ + + + + + - + diff --git a/dist/win/resources/overrides.wxi b/dist/win/resources/overrides.wxi index 3d63573cc..c4c946868 100644 --- a/dist/win/resources/overrides.wxi +++ b/dist/win/resources/overrides.wxi @@ -1,7 +1,7 @@ - - - - + - +Non-opening ProgID settings: +- IconFileEncryptedData +Full file name of icon file used for encrypted data files. Default is "Cryptomator-Vault.ico" - From 043184cf530088425b9c5032da61966c0598ad7d Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Fri, 18 Nov 2022 12:36:10 +0100 Subject: [PATCH 3/8] set loopback device alias during build instead of hardcode --- .github/workflows/win-exe.yml | 12 ++++++++++++ dist/win/build.ps1 | 9 +++++++++ dist/win/contrib/patchWebDAV.bat | 2 +- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/.github/workflows/win-exe.yml b/.github/workflows/win-exe.yml index 46e1dbed1..dd2bdb8a2 100644 --- a/.github/workflows/win-exe.yml +++ b/.github/workflows/win-exe.yml @@ -22,6 +22,8 @@ jobs: build-msi: name: Build .msi Installer runs-on: windows-latest + env: + LOOPBACK_ALIAS: 'cryptomator-vault' steps: - uses: actions/checkout@v3 with: @@ -105,6 +107,16 @@ jobs: - name: Patch Application Directory run: | cp dist/win/contrib/* appdir/Cryptomator + - name: Set LOOPBACK_ALIAS in patchWebDAV.bat + shell: pwsh + run: | + $patchScript = "appdir\Cryptomator\patchWebDAV.bat" + try { + (Get-Content $patchScript ) -replace '::REPLACE ME', "SET LOOPBACK_ALIAS=`"${{ evn.LOOPBACK_ALIAS}}`"" | Set-Content $patchScript + } catch { + Write-Host "Failed to set LOOPBACK_ALIAS for patchWebDAV.bat" + exit 1 + } - name: Fix permissions run: attrib -r appdir/Cryptomator/Cryptomator.exe shell: pwsh diff --git a/dist/win/build.ps1 b/dist/win/build.ps1 index 50cdbd011..940384f64 100644 --- a/dist/win/build.ps1 +++ b/dist/win/build.ps1 @@ -105,6 +105,15 @@ if ($clean -and (Test-Path -Path $appPath)) { # patch app dir Copy-Item "contrib\*" -Destination "$AppName" attrib -r "$AppName\$AppName.exe" +# patch batch script to set hostfile +$webDAVPatcher = "$AppName\patchWebDAV.bat" +$alias = 'cryptomator-vault' +try { + (Get-Content $webDAVPatcher ) -replace '::REPLACE ME', "SET LOOPBACK_ALIAS=`"$alias`"" | Set-Content $webDAVPatcher +} catch { + Write-Host "Failed to set LOOPBACK_ALIAS for patchWebDAV.bat" + exit 1 +} # create .msi $Env:JP_WIXWIZARD_RESOURCES = "$buildDir\resources" diff --git a/dist/win/contrib/patchWebDAV.bat b/dist/win/contrib/patchWebDAV.bat index 1726147d2..aad226881 100644 --- a/dist/win/contrib/patchWebDAV.bat +++ b/dist/win/contrib/patchWebDAV.bat @@ -1,6 +1,6 @@ @echo off :: Default values for Cryptomator builds -SET LOOPBACK_ALIAS="cryptomator-vault" +::REPLACE ME cd %~dp0 powershell -NoLogo -NonInteractive -ExecutionPolicy Unrestricted -Command .\patchWebDAV.ps1^ From 5729e2885d73819942d7a97aeca789ea3b0205a2 Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Fri, 18 Nov 2022 12:41:29 +0100 Subject: [PATCH 4/8] fix typo [ci skip] --- .github/workflows/win-exe.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/win-exe.yml b/.github/workflows/win-exe.yml index dd2bdb8a2..f1a2b3515 100644 --- a/.github/workflows/win-exe.yml +++ b/.github/workflows/win-exe.yml @@ -112,7 +112,7 @@ jobs: run: | $patchScript = "appdir\Cryptomator\patchWebDAV.bat" try { - (Get-Content $patchScript ) -replace '::REPLACE ME', "SET LOOPBACK_ALIAS=`"${{ evn.LOOPBACK_ALIAS}}`"" | Set-Content $patchScript + (Get-Content $patchScript ) -replace '::REPLACE ME', "SET LOOPBACK_ALIAS=`"${{ env.LOOPBACK_ALIAS}}`"" | Set-Content $patchScript } catch { Write-Host "Failed to set LOOPBACK_ALIAS for patchWebDAV.bat" exit 1 From 13debaafbe52e93cc996555f322344d6af55c0ad Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Fri, 18 Nov 2022 13:34:38 +0100 Subject: [PATCH 5/8] set loopback alias in Cryptomator app during build time --- .github/workflows/win-exe.yml | 1 + dist/win/build.ps1 | 5 ++-- .../org/cryptomator/common/Environment.java | 17 ++++++------- .../common/vaults/WebDavVolume.java | 24 ++++++++++--------- 4 files changed, 24 insertions(+), 23 deletions(-) diff --git a/.github/workflows/win-exe.yml b/.github/workflows/win-exe.yml index f1a2b3515..244cbfc36 100644 --- a/.github/workflows/win-exe.yml +++ b/.github/workflows/win-exe.yml @@ -98,6 +98,7 @@ jobs: --java-options "-Dcryptomator.p12Path=\"~/AppData/Roaming/Cryptomator/key.p12\"" --java-options "-Dcryptomator.ipcSocketPath=\"~/AppData/Roaming/Cryptomator/ipc.socket\"" --java-options "-Dcryptomator.mountPointsDir=\"~/Cryptomator\"" + --java-options "-Dcryptomator.loopbackAlias=\"${{ env.LOOPBACK_ALIAS }}\"" --java-options "-Dcryptomator.showTrayIcon=true" --java-options "-Dcryptomator.buildNumber=\"msi-${{ steps.versions.outputs.revNum }}\"" --java-options "-Dcryptomator.integrationsWin.autoStartShellLinkName=\"Cryptomator\"" diff --git a/dist/win/build.ps1 b/dist/win/build.ps1 index 940384f64..565194e7d 100644 --- a/dist/win/build.ps1 +++ b/dist/win/build.ps1 @@ -35,6 +35,7 @@ Write-Output "`$buildDir=$buildDir" Write-Output "`$Env:JAVA_HOME=$Env:JAVA_HOME" $copyright = "(C) $CopyrightStartYear - $((Get-Date).Year) $Vendor" +$loopbackAlias = 'cryptomator-vault' # compile &mvn -B -f $buildDir/../../pom.xml clean package -DskipTests -Pwin @@ -85,6 +86,7 @@ if ($clean -and (Test-Path -Path $appPath)) { --java-options "-Dcryptomator.ipcSocketPath=`"~/AppData/Roaming/$AppName/ipc.socket`"" ` --java-options "-Dcryptomator.p12Path=`"~/AppData/Roaming/$AppName/key.p12`"" ` --java-options "-Dcryptomator.mountPointsDir=`"~/$AppName`"" ` + --java-options "-Dcryptomator.loopbackAlias=`"$loopbackAlias`"" ` --java-options "-Dcryptomator.integrationsWin.autoStartShellLinkName=`"$AppName`"" ` --java-options "-Dcryptomator.integrationsWin.keychainPaths=`"~/AppData/Roaming/$AppName/keychain.json`"" ` --java-options "-Dcryptomator.showTrayIcon=true" ` @@ -107,9 +109,8 @@ Copy-Item "contrib\*" -Destination "$AppName" attrib -r "$AppName\$AppName.exe" # patch batch script to set hostfile $webDAVPatcher = "$AppName\patchWebDAV.bat" -$alias = 'cryptomator-vault' try { - (Get-Content $webDAVPatcher ) -replace '::REPLACE ME', "SET LOOPBACK_ALIAS=`"$alias`"" | Set-Content $webDAVPatcher + (Get-Content $webDAVPatcher ) -replace '::REPLACE ME', "SET LOOPBACK_ALIAS=`"$loopbackAlias`"" | Set-Content $webDAVPatcher } catch { Write-Host "Failed to set LOOPBACK_ALIAS for patchWebDAV.bat" exit 1 diff --git a/src/main/java/org/cryptomator/common/Environment.java b/src/main/java/org/cryptomator/common/Environment.java index 261750ad1..383261119 100644 --- a/src/main/java/org/cryptomator/common/Environment.java +++ b/src/main/java/org/cryptomator/common/Environment.java @@ -26,6 +26,7 @@ public class Environment { private static final String KEYCHAIN_PATHS_PROP_NAME = "cryptomator.integrationsWin.keychainPaths"; private static final String P12_PATH_PROP_NAME = "cryptomator.p12Path"; private static final String LOG_DIR_PROP_NAME = "cryptomator.logDir"; + private static final String LOOPBACK_ALIAS_PROP_NAME = "cryptomator.loopbackAlias"; private static final String MOUNTPOINT_DIR_PROP_NAME = "cryptomator.mountPointsDir"; private static final String MIN_PW_LENGTH_PROP_NAME = "cryptomator.minPwLength"; private static final String APP_VERSION_PROP_NAME = "cryptomator.appVersion"; @@ -45,6 +46,7 @@ public class Environment { logCryptomatorSystemProperty(IPC_SOCKET_PATH_PROP_NAME); logCryptomatorSystemProperty(KEYCHAIN_PATHS_PROP_NAME); logCryptomatorSystemProperty(LOG_DIR_PROP_NAME); + logCryptomatorSystemProperty(LOOPBACK_ALIAS_PROP_NAME); logCryptomatorSystemProperty(PLUGIN_DIR_PROP_NAME); logCryptomatorSystemProperty(MOUNTPOINT_DIR_PROP_NAME); logCryptomatorSystemProperty(MIN_PW_LENGTH_PROP_NAME); @@ -90,6 +92,10 @@ public class Environment { return getPath(LOG_DIR_PROP_NAME).map(this::replaceHomeDir); } + public Optional getLoopbackAlias() { + return Optional.ofNullable(System.getProperty(LOOPBACK_ALIAS_PROP_NAME)); + } + public Optional getPluginDir() { return getPath(PLUGIN_DIR_PROP_NAME).map(this::replaceHomeDir); } @@ -112,22 +118,13 @@ public class Environment { } public int getMinPwLength() { - return getInt(MIN_PW_LENGTH_PROP_NAME, DEFAULT_MIN_PW_LENGTH); + return Integer.getInteger(MIN_PW_LENGTH_PROP_NAME, DEFAULT_MIN_PW_LENGTH); } public boolean showTrayIcon() { return Boolean.getBoolean(TRAY_ICON_PROP_NAME); } - private int getInt(String propertyName, int defaultValue) { - String value = System.getProperty(propertyName); - try { - return Integer.parseInt(value); - } catch (NumberFormatException e) { // includes "null" values - return defaultValue; - } - } - private Optional getPath(String propertyName) { String value = System.getProperty(propertyName); return Optional.ofNullable(value).map(Paths::get); diff --git a/src/main/java/org/cryptomator/common/vaults/WebDavVolume.java b/src/main/java/org/cryptomator/common/vaults/WebDavVolume.java index 3ac1820d4..af7ca10f2 100644 --- a/src/main/java/org/cryptomator/common/vaults/WebDavVolume.java +++ b/src/main/java/org/cryptomator/common/vaults/WebDavVolume.java @@ -2,6 +2,7 @@ package org.cryptomator.common.vaults; import com.google.common.base.CharMatcher; +import org.cryptomator.common.Environment; import org.cryptomator.common.settings.Settings; import org.cryptomator.common.settings.VaultSettings; import org.cryptomator.common.settings.VolumeImpl; @@ -22,12 +23,11 @@ import java.util.function.Supplier; public class WebDavVolume implements Volume { - private static final String LOCALHOST_ALIAS = "cryptomator-vault"; - private final Provider serverProvider; private final VaultSettings vaultSettings; private final Settings settings; private final WindowsDriveLetters windowsDriveLetters; + private final Environment environment; private WebDavServer server; private WebDavServletController servlet; @@ -35,11 +35,12 @@ public class WebDavVolume implements Volume { private Consumer onExitAction; @Inject - public WebDavVolume(Provider serverProvider, VaultSettings vaultSettings, Settings settings, WindowsDriveLetters windowsDriveLetters) { + public WebDavVolume(Provider serverProvider, VaultSettings vaultSettings, Settings settings, WindowsDriveLetters windowsDriveLetters, Environment environment) { this.serverProvider = serverProvider; this.vaultSettings = vaultSettings; this.settings = settings; this.windowsDriveLetters = windowsDriveLetters; + this.environment = environment; } @Override @@ -129,16 +130,17 @@ public class WebDavVolume implements Volume { } private String getLocalhostAliasOrNull() { - try { - InetAddress alias = InetAddress.getByName(LOCALHOST_ALIAS); - if (alias.getHostAddress().equals("127.0.0.1")) { - return LOCALHOST_ALIAS; - } else { - return null; + return environment.getLoopbackAlias().map(alias -> { + try { + var address = InetAddress.getByName(alias); + if (address.getHostAddress().equals("127.0.0.1")) { + return alias; + } + } catch (UnknownHostException e) { + //no-op } - } catch (UnknownHostException e) { return null; - } + }).orElse(null); } private void cleanup() { From 65e26971ff3f2c2cec323daaa16e5c5bf6d57a85 Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Mon, 21 Nov 2022 13:12:32 +0100 Subject: [PATCH 6/8] make loopback alias depend on appName --- dist/win/build.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/win/build.ps1 b/dist/win/build.ps1 index 565194e7d..d80904182 100644 --- a/dist/win/build.ps1 +++ b/dist/win/build.ps1 @@ -35,7 +35,7 @@ Write-Output "`$buildDir=$buildDir" Write-Output "`$Env:JAVA_HOME=$Env:JAVA_HOME" $copyright = "(C) $CopyrightStartYear - $((Get-Date).Year) $Vendor" -$loopbackAlias = 'cryptomator-vault' +$loopbackAlias = "$AppName-vault" # compile &mvn -B -f $buildDir/../../pom.xml clean package -DskipTests -Pwin From 79952418f45dd0d5d636f56553cdace1f170efa2 Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Mon, 21 Nov 2022 13:26:14 +0100 Subject: [PATCH 7/8] only use lower characters in loopback alias --- dist/win/build.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/win/build.ps1 b/dist/win/build.ps1 index d80904182..2769e790f 100644 --- a/dist/win/build.ps1 +++ b/dist/win/build.ps1 @@ -35,7 +35,7 @@ Write-Output "`$buildDir=$buildDir" Write-Output "`$Env:JAVA_HOME=$Env:JAVA_HOME" $copyright = "(C) $CopyrightStartYear - $((Get-Date).Year) $Vendor" -$loopbackAlias = "$AppName-vault" +$loopbackAlias = $AppName.toLower() + "-vault" # compile &mvn -B -f $buildDir/../../pom.xml clean package -DskipTests -Pwin From 1b0eb34734dc190bc0b2e9454c1c0cfc86b82a93 Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Mon, 21 Nov 2022 13:46:12 +0100 Subject: [PATCH 8/8] set loopback alias via parameter in ps1 script --- dist/win/build.bat | 4 +++- dist/win/build.ps1 | 6 +++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/dist/win/build.bat b/dist/win/build.bat index c97ebbb35..997d94328 100644 --- a/dist/win/build.bat +++ b/dist/win/build.bat @@ -9,8 +9,9 @@ SET ABOUT_URL="https://cryptomator.org" SET UPDATE_URL="https://cryptomator.org/downloads/" SET HELP_URL="https://cryptomator.org/contact/" SET MODULE_AND_MAIN_CLASS="org.cryptomator.desktop/org.cryptomator.launcher.Cryptomator" +SET LOOPBACK_ALIAS="cryptomator-vault" -powershell -NoLogo -NoExit -ExecutionPolicy Unrestricted -Command .\build.ps1^ +powershell -NoLogo -ExecutionPolicy Unrestricted -Command .\build.ps1^ -AppName %APPNAME%^ -MainJarGlob "%MAIN_JAR_GLOB%"^ -ModuleAndMainClass "%MODULE_AND_MAIN_CLASS%"^ @@ -20,4 +21,5 @@ powershell -NoLogo -NoExit -ExecutionPolicy Unrestricted -Command .\build.ps1^ -AboutUrl "%ABOUT_URL%"^ -HelpUrl "%HELP_URL%"^ -UpdateUrl "%UPDATE_URL%"^ + -LoopbackAlias "%LOOPBACK_ALIAS%"^ -Clean 1 \ No newline at end of file diff --git a/dist/win/build.ps1 b/dist/win/build.ps1 index 2769e790f..1e316d5f2 100644 --- a/dist/win/build.ps1 +++ b/dist/win/build.ps1 @@ -8,6 +8,7 @@ Param( [Parameter(Mandatory, HelpMessage="Please provide a help url")][string] $HelpUrl, [Parameter(Mandatory, HelpMessage="Please provide an update url")][string] $UpdateUrl, [Parameter(Mandatory, HelpMessage="Please provide an about url")][string] $AboutUrl, + [Parameter(Mandatory, HelpMessage="Please provide an alias for localhost")][string] $LoopbackAlias, [bool] $clean ) @@ -35,7 +36,6 @@ Write-Output "`$buildDir=$buildDir" Write-Output "`$Env:JAVA_HOME=$Env:JAVA_HOME" $copyright = "(C) $CopyrightStartYear - $((Get-Date).Year) $Vendor" -$loopbackAlias = $AppName.toLower() + "-vault" # compile &mvn -B -f $buildDir/../../pom.xml clean package -DskipTests -Pwin @@ -86,7 +86,7 @@ if ($clean -and (Test-Path -Path $appPath)) { --java-options "-Dcryptomator.ipcSocketPath=`"~/AppData/Roaming/$AppName/ipc.socket`"" ` --java-options "-Dcryptomator.p12Path=`"~/AppData/Roaming/$AppName/key.p12`"" ` --java-options "-Dcryptomator.mountPointsDir=`"~/$AppName`"" ` - --java-options "-Dcryptomator.loopbackAlias=`"$loopbackAlias`"" ` + --java-options "-Dcryptomator.loopbackAlias=`"$LoopbackAlias`"" ` --java-options "-Dcryptomator.integrationsWin.autoStartShellLinkName=`"$AppName`"" ` --java-options "-Dcryptomator.integrationsWin.keychainPaths=`"~/AppData/Roaming/$AppName/keychain.json`"" ` --java-options "-Dcryptomator.showTrayIcon=true" ` @@ -110,7 +110,7 @@ attrib -r "$AppName\$AppName.exe" # patch batch script to set hostfile $webDAVPatcher = "$AppName\patchWebDAV.bat" try { - (Get-Content $webDAVPatcher ) -replace '::REPLACE ME', "SET LOOPBACK_ALIAS=`"$loopbackAlias`"" | Set-Content $webDAVPatcher + (Get-Content $webDAVPatcher ) -replace '::REPLACE ME', "SET LOOPBACK_ALIAS=`"$LoopbackAlias`"" | Set-Content $webDAVPatcher } catch { Write-Host "Failed to set LOOPBACK_ALIAS for patchWebDAV.bat" exit 1