瀏覽代碼

Merge branch 'develop' into release/1.6.0

# Conflicts:
#	pom.xml
#	src/main/resources/license/THIRD-PARTY.txt
Sebastian Stenzel 3 年之前
父節點
當前提交
8795e5c8d2

+ 1 - 1
.github/workflows/release.yml

@@ -97,7 +97,7 @@ jobs:
           echo "::set-output name=semVerNum::${SEM_VER_NUM}"
           echo "::set-output name=ppaVerStr::${SEM_VER_STR/-/\~}-${REVCOUNT}"
           echo "::set-output name=revNum::${REVCOUNT}"
-      - uses: rubenesp87/semver-validation-action@0.0.6
+      - uses: skymatic/semver-validation-action@v1
         with:
           version: ${{ steps.versions.outputs.semVerStr }}
 

+ 14 - 14
pom.xml

@@ -28,29 +28,29 @@
 
 		<!-- cryptomator dependencies -->
 		<cryptomator.cryptofs.version>2.1.0-beta13</cryptomator.cryptofs.version>
-		<cryptomator.integrations.version>1.0.0-rc1</cryptomator.integrations.version>
-		<cryptomator.integrations.win.version>1.0.0-beta2</cryptomator.integrations.win.version>
-		<cryptomator.integrations.mac.version>1.0.0-beta2</cryptomator.integrations.mac.version>
-		<cryptomator.integrations.linux.version>1.0.0-beta1</cryptomator.integrations.linux.version>
+		<cryptomator.integrations.version>1.0.0</cryptomator.integrations.version>
+		<cryptomator.integrations.win.version>1.0.0-rc1</cryptomator.integrations.win.version>
+		<cryptomator.integrations.mac.version>1.0.0-rc1</cryptomator.integrations.mac.version>
+		<cryptomator.integrations.linux.version>1.0.0-rc1</cryptomator.integrations.linux.version>
 		<cryptomator.fuse.version>1.3.2</cryptomator.fuse.version>
-		<cryptomator.dokany.version>1.3.2</cryptomator.dokany.version>
+		<cryptomator.dokany.version>1.3.3</cryptomator.dokany.version>
 		<cryptomator.webdav.version>1.2.6</cryptomator.webdav.version>
 
 		<!-- 3rd party dependencies -->
-		<javafx.version>16</javafx.version>
+		<javafx.version>17.0.0.1</javafx.version>
 		<commons-lang3.version>3.12.0</commons-lang3.version>
-		<jwt.version>3.18.1</jwt.version>
+		<jwt.version>3.18.2</jwt.version>
 		<easybind.version>2.2</easybind.version>
-		<guava.version>30.1.1-jre</guava.version>
+		<guava.version>31.0-jre</guava.version>
 		<dagger.version>2.38.1</dagger.version>
-		<gson.version>2.8.7</gson.version>
+		<gson.version>2.8.8</gson.version>
 		<zxcvbn.version>1.5.2</zxcvbn.version>
-		<slf4j.version>1.7.31</slf4j.version>
-		<logback.version>1.2.3</logback.version>
+		<slf4j.version>1.7.32</slf4j.version>
+		<logback.version>1.2.6</logback.version>
 
 		<!-- test dependencies -->
-		<junit.jupiter.version>5.7.2</junit.jupiter.version>
-		<mockito.version>3.11.2</mockito.version>
+		<junit.jupiter.version>5.8.1</junit.jupiter.version>
+		<mockito.version>3.12.4</mockito.version>
 		<hamcrest.version>2.2</hamcrest.version>
 	</properties>
 
@@ -276,7 +276,7 @@
 				<plugin>
 					<groupId>org.owasp</groupId>
 					<artifactId>dependency-check-maven</artifactId>
-					<version>6.2.2</version>
+					<version>6.3.1</version>
 				</plugin>
 			</plugins>
 		</pluginManagement>

+ 1 - 0
src/main/java/org/cryptomator/common/Constants.java

@@ -5,6 +5,7 @@ public interface Constants {
 	String MASTERKEY_FILENAME = "masterkey.cryptomator";
 	String MASTERKEY_BACKUP_SUFFIX = ".bkup";
 	String VAULTCONFIG_FILENAME = "vault.cryptomator";
+	String CRYPTOMATOR_FILENAME_EXT = ".cryptomator";
 	byte[] PEPPER = new byte[0];
 
 }

+ 5 - 0
src/main/java/org/cryptomator/common/keychain/KeychainManager.java

@@ -38,6 +38,11 @@ public class KeychainManager implements KeychainAccessProvider {
 		return result;
 	}
 
+	@Override
+	public String displayName() {
+		return getClass().getName();
+	}
+
 	@Override
 	public void storePassphrase(String key, CharSequence passphrase) throws KeychainAccessException {
 		getKeychainOrFail().storePassphrase(key, passphrase);

+ 20 - 1
src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultLocationController.java

@@ -29,16 +29,20 @@ import javafx.scene.control.ToggleGroup;
 import javafx.stage.DirectoryChooser;
 import javafx.stage.Stage;
 import java.io.File;
+import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.nio.file.StandardOpenOption;
 import java.util.ResourceBundle;
+import java.util.UUID;
 
 @AddVaultWizardScoped
 public class CreateNewVaultLocationController implements FxController {
 
 	private static final Logger LOG = LoggerFactory.getLogger(CreateNewVaultLocationController.class);
 	private static final Path DEFAULT_CUSTOM_VAULT_PATH = Paths.get(System.getProperty("user.home"));
+	private static final String TEMP_FILE_FORMAT = "cryptomator-%s.tmp";
 
 	private final Stage window;
 	private final Lazy<Scene> chooseNameScene;
@@ -92,7 +96,7 @@ public class CreateNewVaultLocationController implements FxController {
 			statusText.set(resourceBundle.getString("addvaultwizard.new.locationDoesNotExist"));
 			statusGraphic.set(badLocation);
 			return false;
-		} else if (!Files.isWritable(p.getParent())) {
+		} else if (!isActuallyWritable(p.getParent())) {
 			statusText.set(resourceBundle.getString("addvaultwizard.new.locationIsNotWritable"));
 			statusGraphic.set(badLocation);
 			return false;
@@ -107,6 +111,21 @@ public class CreateNewVaultLocationController implements FxController {
 		}
 	}
 
+	private boolean isActuallyWritable(Path p) {
+		Path tmpFile = p.resolve(String.format(TEMP_FILE_FORMAT, UUID.randomUUID()));
+		try (var chan = Files.newByteChannel(tmpFile, StandardOpenOption.CREATE_NEW, StandardOpenOption.WRITE, StandardOpenOption.DELETE_ON_CLOSE)) {
+			return true;
+		} catch (IOException e) {
+			return false;
+		} finally {
+			try {
+				Files.deleteIfExists(tmpFile);
+			} catch (IOException e) {
+				LOG.warn("Unable to delete temporary file {}. Needs to be deleted manually.", tmpFile);
+			}
+		}
+	}
+
 	@FXML
 	public void initialize() {
 		predefinedLocationToggler.selectedToggleProperty().addListener(this::togglePredefinedLocation);

+ 2 - 3
src/main/java/org/cryptomator/ui/controls/SecurePasswordField.java

@@ -10,6 +10,7 @@ package org.cryptomator.ui.controls;
 
 import com.google.common.base.Strings;
 
+import javafx.application.Platform;
 import javafx.beans.NamedArg;
 import javafx.beans.Observable;
 import javafx.beans.property.BooleanProperty;
@@ -27,7 +28,6 @@ import javafx.scene.input.KeyCodeCombination;
 import javafx.scene.input.KeyCombination;
 import javafx.scene.input.KeyEvent;
 import javafx.scene.input.TransferMode;
-import java.awt.Toolkit;
 import java.nio.CharBuffer;
 import java.text.Normalizer;
 import java.text.Normalizer.Form;
@@ -123,8 +123,7 @@ public class SecurePasswordField extends TextField {
 	}
 
 	private void updateCapsLocked() {
-		//TODO: fixed in JavaFX 17. AWT code needed until update (see https://bugs.openjdk.java.net/browse/JDK-8259680)
-		capsLocked.set(isFocused() && Toolkit.getDefaultToolkit().getLockingKeyState(java.awt.event.KeyEvent.VK_CAPS_LOCK));
+		capsLocked.set(Platform.isKeyLocked(KeyCode.CAPS).orElse(false));
 	}
 
 	private void updateContainingNonPrintableChars() {

+ 2 - 3
src/main/java/org/cryptomator/ui/launcher/AppLaunchEventHandler.java

@@ -11,12 +11,11 @@ import javax.inject.Named;
 import javax.inject.Singleton;
 import javafx.application.Platform;
 import java.io.IOException;
-import java.nio.file.NoSuchFileException;
 import java.nio.file.Path;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.ExecutorService;
 
-import static org.cryptomator.common.Constants.MASTERKEY_FILENAME;
+import static org.cryptomator.common.Constants.CRYPTOMATOR_FILENAME_EXT;
 
 @Singleton
 class AppLaunchEventHandler {
@@ -69,7 +68,7 @@ class AppLaunchEventHandler {
 		assert Platform.isFxApplicationThread();
 		try {
 			final Vault v;
-			if (potentialVaultPath.getFileName().toString().equals(MASTERKEY_FILENAME)) {
+			if (potentialVaultPath.getFileName().toString().endsWith(CRYPTOMATOR_FILENAME_EXT)) {
 				v = vaultListManager.add(potentialVaultPath.getParent());
 			} else {
 				v = vaultListManager.add(potentialVaultPath);

+ 5 - 1
src/main/java/org/cryptomator/ui/mainwindow/MainWindowController.java

@@ -27,6 +27,7 @@ import java.nio.file.Path;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import static org.cryptomator.common.Constants.CRYPTOMATOR_FILENAME_EXT;
 import static org.cryptomator.common.Constants.MASTERKEY_FILENAME;
 import static org.cryptomator.common.Constants.VAULTCONFIG_FILENAME;
 
@@ -94,6 +95,9 @@ public class MainWindowController implements FxController {
 
 	private boolean containsVault(Path path) {
 		try {
+			if (path.getFileName().toString().endsWith(CRYPTOMATOR_FILENAME_EXT)) {
+				path = path.getParent();
+			}
 			return CryptoFileSystemProvider.checkDirStructureForVault(path, VAULTCONFIG_FILENAME, MASTERKEY_FILENAME) != DirStructure.UNRELATED;
 		} catch (IOException e) {
 			return false;
@@ -102,7 +106,7 @@ public class MainWindowController implements FxController {
 
 	private void addVault(Path pathToVault) {
 		try {
-			if (pathToVault.getFileName().toString().equals(VAULTCONFIG_FILENAME)) {
+			if (pathToVault.getFileName().toString().endsWith(CRYPTOMATOR_FILENAME_EXT)) {
 				vaultListManager.add(pathToVault.getParent());
 			} else {
 				vaultListManager.add(pathToVault);

+ 4 - 4
src/main/resources/i18n/strings_de.properties

@@ -76,7 +76,7 @@ addvault.new.readme.accessLocation.3=Alle zu diesem Laufwerk hinzugefügten Date
 addvault.new.readme.accessLocation.4=Diese Datei kannst du löschen.
 ## Existing
 addvaultwizard.existing.instruction=Wähle die Datei „masterkey.cryptomator“ deines vorhandenen Tresors aus.
-addvaultwizard.existing.chooseBtn=Durchsuchen 
+addvaultwizard.existing.chooseBtn=Durchsuchen…
 addvaultwizard.existing.filePickerTitle=Masterkey-Datei auswählen
 ## Success
 addvaultwizard.success.nextStepsInstructions=Tresor „%s“ hinzugefügt.\nUm auf Inhalte zuzugreifen oder welche hinzuzufügen, musst du den Tresor entsperren. Du kannst ihn aber auch zu jedem späteren Zeitpunkt entsperren.
@@ -98,7 +98,7 @@ forgetPassword.information=Dies löscht das gespeicherte Passwort dieses Tresors
 forgetPassword.confirmBtn=Passwort vergessen
 
 # Unlock
-unlock.title=Entsperre "%s"
+unlock.title="%s" entsperren
 unlock.passwordPrompt=Gib das Passwort für „%s“ ein:
 unlock.savePassword=Passwort merken
 unlock.unlockBtn=Entsperren
@@ -294,8 +294,8 @@ main.vaultDetail.stats=Tresorstatistik
 ### Missing
 main.vaultDetail.missing.info=Cryptomator konnte keinen Tresor mit diesem Pfad finden.
 main.vaultDetail.missing.recheck=Erneut prüfen
-main.vaultDetail.missing.remove=Aus Tresorliste entfernen…
-main.vaultDetail.missing.changeLocation=Speicherort des Tresors ändern…
+main.vaultDetail.missing.remove=Aus Tresorliste entfernen 
+main.vaultDetail.missing.changeLocation=Speicherort des Tresors ändern 
 ### Needs Migration
 main.vaultDetail.migrateButton=Tresor aktualisieren
 main.vaultDetail.migratePrompt=Dein Tresor muss auf ein neues Format aktualisiert werden, bevor du auf ihn zugreifen kannst

+ 124 - 124
src/main/resources/i18n/strings_it.properties

@@ -59,43 +59,43 @@ addvaultwizard.new.generateRecoveryKeyChoice.yes=Si, per favore, è meglio esser
 addvaultwizard.new.generateRecoveryKeyChoice.no=No grazie, non perderò la mia password
 ### Information
 addvault.new.readme.storageLocation.fileName=IMPORTANTE.rtf
-addvault.new.readme.storageLocation.1=⚠ FILE CASSAFORTE ⚠
-addvault.new.readme.storageLocation.2=Questa è la posizione di archiviazione della tua cassaforte.
+addvault.new.readme.storageLocation.1=⚠ FILE DELLA CASSAFORTE  
+addvault.new.readme.storageLocation.2=Questa è la posizione d'archiviazione della tua cassaforte.
 addvault.new.readme.storageLocation.3=NON
-addvault.new.readme.storageLocation.4=• modificare qualsiasi file in questa cartella o
-addvault.new.readme.storageLocation.5=• Incolla tutti i file da criptare in questa directory.
-addvault.new.readme.storageLocation.6=Se si desidera crittografare i file e visualizzare il contenuto della cassaforte, effettuare le seguenti operazioni:
+addvault.new.readme.storageLocation.4=• alterare alcun file in questa cartella o
+addvault.new.readme.storageLocation.5=• incollare alcun file per la crittografia in questa cartella.
+addvault.new.readme.storageLocation.6=Se vuoi crittografare i file e visualizzare il contenuto della cassaforte, fa quanto segue:
 addvault.new.readme.storageLocation.7=1. Aggiungi questa cassaforte a Cryptomator.
-addvault.new.readme.storageLocation.8=2. Sblocca la cassaforte in Criptomator.
-addvault.new.readme.storageLocation.9=3. Apri la posizione di accesso cliccando sul pulsante "Rivela".
-addvault.new.readme.storageLocation.10=Se hai bisogno di aiuto, leggi la documentazione: %s
+addvault.new.readme.storageLocation.8=2. Sblocca la cassaforte su Cryptomator.
+addvault.new.readme.storageLocation.9=3. Apri la posizione d'accesso cliccando sul pulsante "Rivela".
+addvault.new.readme.storageLocation.10=Se ti serve aiuto, visita la documentazione: %s
 addvault.new.readme.accessLocation.fileName=BENVENUTO.rtf
-addvault.new.readme.accessLocation.1=🔐 VOLUME CRIPTATO 🔐
-addvault.new.readme.accessLocation.2=Questa è la posizione di accesso della tua cassaforte.
-addvault.new.readme.accessLocation.3=Tutti i file aggiunti a questo volume verranno crittografati da Cryptomator. Puoi lavorare su di esso come su qualsiasi altra unità/cartella. Questa è solo una vista decriptata del suo contenuto, i file rimangono continuamente criptati sul disco rigido.
-addvault.new.readme.accessLocation.4=Sei libero di rimuovere questo file.
+addvault.new.readme.accessLocation.1=🔐 VOLUME CRITTOGRAFATO 🔐
+addvault.new.readme.accessLocation.2=Questa è la posizione d'accesso della tua cassaforte.
+addvault.new.readme.accessLocation.3=Ogni file aggiunto a questo volume sarà crittografato da Cryptomator. Puoi lavorarci come su ogni altra unità/cartella. Questa è solo una vista decrittografata del suo contenuto, i tuoi file restano sempre crittografati sul tuo disco rigido.
+addvault.new.readme.accessLocation.4=Sentiti libero di rimuovere questo file.
 ## Existing
-addvaultwizard.existing.instruction=Scegliere il file "masterkey.cryptomator" del deposito esistente.
+addvaultwizard.existing.instruction=Scegli il file "masterkey.cryptomator" della tua cassaforte esistente.
 addvaultwizard.existing.chooseBtn=Scegli…
-addvaultwizard.existing.filePickerTitle=Seleziona file Masterkey
+addvaultwizard.existing.filePickerTitle=Seleziona il File Masterkey
 ## Success
-addvaultwizard.success.nextStepsInstructions=Aggiunta cassaforte"%s".\nÈ necessario sbloccare questa cassaforte per accedere o aggiungere contenuti. In alternativa puoi sbloccarla in qualsiasi momento successivo.
-addvaultwizard.success.unlockNow=Sblocca adesso
+addvaultwizard.success.nextStepsInstructions=Cassaforte "%s" aggiunta.\nDevi sbloccare questa cassaforte per accedere o aggiungere contenuti. Altrimenti, puoi sbloccarla in qualsiasi momento successivo.
+addvaultwizard.success.unlockNow=Sblocca Ora
 
 # Remove Vault
 removeVault.title=Rimuovi Cassaforte
-removeVault.information=Questo farà dimenticare Cryptomator a questo vault. Puoi aggiungerlo di nuovo in seguito. Nessun file crittografato verrà eliminato dal tuo disco rigido.
+removeVault.information=Questo farà solo dimenticare questa cassaforte a Cryptomator. Puoi aggiungerla nuovamente in seguito. Nessun file crittografato sarà eliminato dal tuo disco rigido.
 removeVault.confirmBtn=Rimuovi Cassaforte
 
 # Change Password
-changepassword.title=Modifica password
-changepassword.enterOldPassword=Inserisci la password attuale per "%s"
-changepassword.finalConfirmation=Ho capito che non sarò in grado di accedere ai miei dati se dimentico la mia password
+changepassword.title=Modifica la Password
+changepassword.enterOldPassword=Inserisci la password corrente per "%s"
+changepassword.finalConfirmation=Capisco che non potrò accedere ai miei dati se dimentico la mia password
 
 # Forget Password
-forgetPassword.title=Password dimenticata
-forgetPassword.information=Questo cancellerà la password salvata di questa cassaforte dal tuo portachiavi di sistema.
-forgetPassword.confirmBtn=Password dimenticata
+forgetPassword.title=Dimentica la Password
+forgetPassword.information=Questo eliminerà la password salvata di questa cassaforte dal portachiavi del tuo sistema.
+forgetPassword.confirmBtn=Dimentica Password
 
 # Unlock
 unlock.title=Sblocca "%s"
@@ -103,129 +103,129 @@ unlock.passwordPrompt=Inserisci la password per "%s":
 unlock.savePassword=Ricorda la Password
 unlock.unlockBtn=Sblocca
 ##
-unlock.chooseMasterkey.prompt=Impossibile trovare il file masterkey per questa cassaforte nella posizione prevista. Scegliere manualmente il file chiave.
-unlock.chooseMasterkey.filePickerTitle=Seleziona file Masterkey
+unlock.chooseMasterkey.prompt=Impossibile trovare il file Masterkey per questa cassaforte alla sua posizione prevista. Sei pregato di sceglierlo manualmente.
+unlock.chooseMasterkey.filePickerTitle=Seleziona il File Masterkey
 ## Success
-unlock.success.message="%s" sbloccato con successo! La tua cassaforte è ora accessibile tramite il suo drive virtuale.
-unlock.success.rememberChoice=Ricorda la scelta, non mostrare ancora
-unlock.success.revealBtn=Rivela Drive
+unlock.success.message="%s" sbloccato correttamente! La tua cassaforte è ora accessibile tramite la sua unità virtuale.
+unlock.success.rememberChoice=Ricorda la scelta, non mostrarmelo più
+unlock.success.revealBtn=Rivela l'Unità
 ## Failure
 unlock.error.heading=Impossibile sbloccare la cassaforte
 ### Invalid Mount Point
-unlock.error.invalidMountPoint.notExisting=Il punto di montaggio non è una directory vuota o non esiste: %s
-unlock.error.invalidMountPoint.existing=Il punto di Mount/cartella esiste già o la cartella superiore è mancante: %s
+unlock.error.invalidMountPoint.notExisting=Il punto di montaggio "%s" non è una cartella, non è vuoto o non esiste.
+unlock.error.invalidMountPoint.existing=Il punto di montaggio "%s" esiste già o la cartella madre è mancante.
 
 # Lock
 ## Force
 lock.forced.heading=Blocco normale fallito
-lock.forced.message=Il bloccaggio di "%s" è stato impedito da operazioni in sospeso o da file aperti. È possibile forzare il blocco di questa cassaforte, tuttavia interrompere I/O potrebbe causare la perdita di dati non salvati.
+lock.forced.message=Il bloccaggio di "%s" è stato impedito dalle operazioni in sospeso o dai file aperti. Puoi forzare il blocco di questa cassaforte, tuttavia, interrompere I/O potrebbe risultare nella perdita dei dati non salvati.
 lock.forced.confirmBtn=Forza Blocco
 ## Failure
-lock.fail.heading=Blocco cassaforte fallito.
-lock.fail.message=Impossibile bloccare la cassaforte "%s". Assicurati che il lavoro non salvato sia salvato ovunque e che le operazioni di Lettura/Scrittura importanti siano concluse. Per chiudere la cassaforte, termina il processo di Cryptomator.
+lock.fail.heading=Blocco della cassaforte fallito.
+lock.fail.message=Impossibile bloccare la cassaforte "%s". Assicurati che il lavoro non salvato sia salvato altrove e che le importanti operazioni di Lettura/Scrittura siano terminate. Per chiudere la cassaforte, termina il processo di Cryptomator.
 
 # Migration
-migration.title=Aggiorna Cassaforte
+migration.title=Aggiorna la Cassaforte
 ## Start
-migration.start.prompt=La tua cassaforte "%s" deve essere aggiornata a un formato più recente. Prima di procedere, assicurati che non ci sia nessuna sincronizzazione in sospeso che influisca su questa cassaforte.
+migration.start.prompt=La tua cassaforte "%s" dev'esser aggiornata a un formato più recente. Prima di procedere, assicurati che non ci sia alcuna sincronizzazione in sospeso relativa a questa cassaforte.
 migration.start.confirm=Sì, la mia cassaforte è completamente sincronizzata
 ## Run
-migration.run.enterPassword=Immettere la password per "%s"
-migration.run.startMigrationBtn=Migra Cassaforte
-migration.run.progressHint=Potrebbe richiedere un po' di tempo…
+migration.run.enterPassword=Inserisci la password per "%s"
+migration.run.startMigrationBtn=Migra la Cassaforte
+migration.run.progressHint=Questo potrebbe richiedere un po' di tempo…
 ## Success
-migration.success.nextStepsInstructions=Migrato "%s" con successo.\nOra puoi sbloccare la tua cassaforte.
-migration.success.unlockNow=Sblocca adesso
+migration.success.nextStepsInstructions="%s" migrata con successo.\nPuoi ora sbloccare la tua cassaforte.
+migration.success.unlockNow=Sblocca Ora
 ## Missing file system capabilities
-migration.error.missingFileSystemCapabilities.title=File System non supportato
-migration.error.missingFileSystemCapabilities.description=La migrazione non è stata avviata perché la cassaforte è situata su un file system inadeguato.
-migration.error.missingFileSystemCapabilities.reason.LONG_FILENAMES=Il file system non supporta nomi di file lunghi.
-migration.error.missingFileSystemCapabilities.reason.LONG_PATHS=Il file system non supporta percorsi lunghi.
-migration.error.missingFileSystemCapabilities.reason.READ_ACCESS=Il file system non consente di essere letto.
-migration.error.missingFileSystemCapabilities.reason.WRITE_ACCESS=Il file system non consente di essere scritto.
+migration.error.missingFileSystemCapabilities.title=File di Sistema Non Supportato
+migration.error.missingFileSystemCapabilities.description=Migrazione non avviata perché la tua cassaforte si trova su un file di sistema inadeguato.
+migration.error.missingFileSystemCapabilities.reason.LONG_FILENAMES=Il file di sistema non supporta i nomi dei file lunghi.
+migration.error.missingFileSystemCapabilities.reason.LONG_PATHS=Il file di sistema non supporta i percorsi lunghi.
+migration.error.missingFileSystemCapabilities.reason.READ_ACCESS=Il file di sistema non consente di esser letto.
+migration.error.missingFileSystemCapabilities.reason.WRITE_ACCESS=Il file di sistema non consente di esser scritto.
 ## Impossible
 migration.impossible.heading=Impossibile migrare la cassaforte
-migration.impossible.reason=La cassaforte non può essere migrata automaticamente perché la sua posizione di archiviazione di accesso non è compatibile.
-migration.impossible.moreInfo=La cassaforte può ancora essere aperta con una versione precedente. Per istruzioni su come migrare manualmente una cassaforte, visita
+migration.impossible.reason=Impossibile migrare automaticamente la cassaforte perché la sua posizione d'archiviazione o punto d'accesso non sono compatibili.
+migration.impossible.moreInfo=La cassaforte è ancora apribile con una versione precedente. Per le istruzioni su come migrare manualmente una cassaforte, visita
 
 # Health Check
 ## Start
 health.title=Controllo Salute di "%s"
 health.intro.header=Controllo Salute
 health.intro.text=Il Controllo della Salute è una raccolta di controlli per rilevare e possibilmente risolvere i problemi nella struttura interna alla tua cassaforte. Sei pregato di tenere a mente:
-health.intro.remarkSync=Assicurati che tutti i dispositivi siano completamente sincronizzati, questo risolve la maggior parte dei problemi.
-health.intro.remarkFix=Non tutti i problemi possono essere corretti.
-health.intro.remarkBackup=Se i dati sono danneggiati, solo un backup può aiutare.
-health.intro.affirmation=Ho letto e capito le informazioni sopra
+health.intro.remarkSync=Assicurati che tutti i dispositivi siano completamente sincronizzati, questo risolve gran parte dei problemi.
+health.intro.remarkFix=Non tutti i problemi sono risolvibili.
+health.intro.remarkBackup=Se i dati sono corrotti, solo un backup può aiutare.
+health.intro.affirmation=Ho letto e compreso le informazioni suddette
 ## Start Failure
-health.fail.header=Errore nel caricare la configurazione della cassaforte
-health.fail.ioError=Si è verificato un errore durante l'accesso e la lettura del file di configurazione.
-health.fail.parseError=Si è verificato un errore durante l'analisi della configurazione della cassaforte.
-health.fail.moreInfo=Ulteriori Informazioni
+health.fail.header=Errore caricando la Configurazione della Cassaforte
+health.fail.ioError=Si è verificato un errore accedendo e leggendo il file di configurazione.
+health.fail.parseError=Si è verificato un errore analizzando la configurazione della cassaforte.
+health.fail.moreInfo=Altre Info
 ## Check Selection
-health.checkList.description=Seleziona i controlli nell'elenco a sinistra o utilizza i pulsanti in basso.
-health.checkList.selectAllButton=Seleziona Tutti I Controlli
-health.checkList.deselectAllButton=Deseleziona Tutti I Controlli
-health.check.runBatchBtn=Esegui i Controlli selezionati
+health.checkList.description=Seleziona i controlli nell'elenco a sinistra o usa i seguenti pulsanti.
+health.checkList.selectAllButton=Seleziona Tutti i Controlli
+health.checkList.deselectAllButton=Deseleziona Tutti i Controlli
+health.check.runBatchBtn=Esegui i Controlli Selezionati
 ## Detail view
-health.check.detail.noSelectedCheck=Per i risultati seleziona un controllo di salute concluso nell'elenco a sinistra.
+health.check.detail.noSelectedCheck=Per i risultati seleziona un controllo di salute terminato nell'elenco a sinistra.
 health.check.detail.checkScheduled=Il controllo è pianificato.
-health.check.detail.checkRunning=Il controllo è attualmente in esecuzione…
+health.check.detail.checkRunning=Il controllo è correntemente in esecuzione…
 health.check.detail.checkSkipped=Il controllo non è stato selezionato per l'esecuzione.
-health.check.detail.checkFinished=Il controllo è terminato con successo.
-health.check.detail.checkFinishedAndFound=Il controllo ha terminato l'esecuzione. Si prega di rivedere i risultati.
+health.check.detail.checkFinished=Il controllo è terminato correttamente.
+health.check.detail.checkFinishedAndFound=Il controllo è terminato. Sei pregato di revisionare i risultati.
 health.check.detail.checkFailed=Il controllo è terminato a causa di un errore.
 health.check.detail.checkCancelled=Il controllo è stato annullato.
-health.check.exportBtn=Esporta Rapporto
+health.check.exportBtn=Esporta il Rapporto
 ## Fix Application
 health.fix.fixBtn=Correggi
 health.fix.successTip=Correzione riuscita
-health.fix.failTip=Correzione fallita, vedi log per i dettagli
+health.fix.failTip=Correzione fallita, vedi i registri per i dettagli
 
 # Preferences
-preferences.title=Impostazioni
+preferences.title=Preferenze
 ## General
-preferences.general=Generali
+preferences.general=Generale
 preferences.general.theme=Aspetto
 preferences.general.theme.automatic=Automatico
 preferences.general.theme.light=Chiaro
 preferences.general.theme.dark=Scuro
-preferences.general.unlockThemes=Sblocca modalità scura
-preferences.general.showMinimizeButton=Mostra pulsante riduci a icona
-preferences.general.showTrayIcon=Mostra icona nel tray (richiede riavvio)
-preferences.general.startHidden=Nascondi la finestra all'avvio di Cryptomator
-preferences.general.debugLogging=Abilita i registri di debug
-preferences.general.debugDirectory=Mostra file log
+preferences.general.unlockThemes=Sblocca la modalità scura
+preferences.general.showMinimizeButton=Mostra il pulsante minimizza
+preferences.general.showTrayIcon=Mostra l'icona della barra d'applicazioni (richiede il riavvio)
+preferences.general.startHidden=Nascondi la finestra avviando Cryptomator
+preferences.general.debugLogging=Abilita la registrazione di debug
+preferences.general.debugDirectory=Rivela i file di registro
 preferences.general.autoStart=Avvia Cryptomator all'avvio del sistema
-preferences.general.keychainBackend=Memorizza password con
-preferences.general.interfaceOrientation=Orientamento Interfaccia
+preferences.general.keychainBackend=Memorizza le password con
+preferences.general.interfaceOrientation=Orientamento dell'Interfaccia
 preferences.general.interfaceOrientation.ltr=Da Sinistra a Destra
 preferences.general.interfaceOrientation.rtl=Da Destra a Sinistra
 ## Volume
-preferences.volume=Drive virtuale
-preferences.volume.type=Tipo volume
+preferences.volume=Unità Virtuale
+preferences.volume.type=Tipo di Volume
 preferences.volume.webdav.port=Porta WebDAV
 preferences.volume.webdav.scheme=Schema WebDAV
 ## Updates
 preferences.updates=Aggiornamenti
-preferences.updates.currentVersion=Versione attuale %s
-preferences.updates.autoUpdateCheck=Controlla automaticamente la presenza di aggiornamenti
-preferences.updates.checkNowBtn=Controlla adesso
-preferences.updates.updateAvailable=Disponibile aggiornamento alla versione %s.
+preferences.updates.currentVersion=Versione Corrente: %s
+preferences.updates.autoUpdateCheck=Cerca automaticamente gli aggiornamenti
+preferences.updates.checkNowBtn=Controlla Ora
+preferences.updates.updateAvailable=Aggiornamento alla versione %s disponibile.
 ## Contribution
 preferences.contribute=Supportaci
-preferences.contribute.registeredFor=Certificato del supporto registrato per %s
-preferences.contribute.noCertificate=Supporta Cryptomator e ricevi un certificato di supporter. È come una chiave di licenza, ma per persone fantastiche che utilizzano software libero. ;-)
-preferences.contribute.getCertificate=Non ne hai già uno? Impara come puoi ottenerlo.
-preferences.contribute.promptText=Incolla qui il codice del certificato di supporter
+preferences.contribute.registeredFor=Certificato del sostenitore registrato per %s
+preferences.contribute.noCertificate=Supporta Cryptomator e ricevi il certificato da sostenitore. È come una chiave di licenza me per persone fantastiche che usano un software gratuito. ;-)
+preferences.contribute.getCertificate=Non ne hai ancora uno? Scopri come puoi ottenerlo.
+preferences.contribute.promptText=Incolla qui il codice del certificato da sostenitore
 #<-- Add entries for donations and code/translation/documentation contribution -->
 
 ## About
-preferences.about=Informazioni
+preferences.about=Info
 
 # Vault Statistics
 stats.title=Statistiche per %s
-stats.cacheHitRate=Tasso di Colpo della Cache
+stats.cacheHitRate=Frequenza di Raggiungimento della Cache
 ## Read
 stats.read.throughput.idle=Lettura: inattivo
 stats.read.throughput.kibs=Lettura: %.2f kiB/s
@@ -234,13 +234,13 @@ stats.read.total.data.none=Dati letti: -
 stats.read.total.data.kib=Dati letti: %.1f kiB
 stats.read.total.data.mib=Dati letti: %.1f MiB
 stats.read.total.data.gib=Dati letti: %.1f GiB
-stats.decr.total.data.none=Dati decriptati: -
+stats.decr.total.data.none=Dati decrittografati: -
 stats.decr.total.data.kib=Dati decrittografati: %.1f kiB
-stats.decr.total.data.mib=Dati decriptati: %.1f MiB
+stats.decr.total.data.mib=Dati decrittografati: %.1f MiB
 stats.decr.total.data.gib=Dati decrittografati: %.1f GiB
-stats.read.accessCount=Totale lettura: %d
+stats.read.accessCount=Letture totali: %d
 ## Write
-stats.write.throughput.idle=Scrivi: inattivo
+stats.write.throughput.idle=Scrittura: inattivo
 stats.write.throughput.kibs=Scrittura: %.2f kiB/s
 stats.write.throughput.mibs=Scrittura: %.2f MiB/s
 stats.write.total.data.none=Dati scritti: -
@@ -251,85 +251,85 @@ stats.encr.total.data.none=Dati crittografati: -
 stats.encr.total.data.kib=Dati crittografati: %.1f kiB
 stats.encr.total.data.mib=Dati crittografati: %.1f MiB
 stats.encr.total.data.gib=Dati crittografati: %.1f GiB
-stats.write.accessCount=Totale scritture: %d
+stats.write.accessCount=Scritture totali: %d
 
 # Main Window
 main.closeBtn.tooltip=Chiudi
 main.minimizeBtn.tooltip=Minimizza
-main.preferencesBtn.tooltip=Impostazioni
+main.preferencesBtn.tooltip=Preferenze
 main.debugModeEnabled.tooltip=La modalità di debug è abilitata
-main.donationKeyMissing.tooltip=Per favore considera una donazione
+main.donationKeyMissing.tooltip=Sei pregato di considerare di donare
 ## Drag 'n' Drop
 main.dropZone.dropVault=Aggiungi questa cassaforte
-main.dropZone.unknownDragboardContent=Se vuoi aggiungere una cassaforte, trascinala in questa finestra
+main.dropZone.unknownDragboardContent=Se desideri aggiungere una cassaforte, trascinala a questa finestra
 ## Vault List
 main.vaultlist.emptyList.onboardingInstruction=Clicca qui per aggiungere una cassaforte
 main.vaultlist.contextMenu.remove=Rimuovi…
 main.vaultlist.contextMenu.lock=Blocca
 main.vaultlist.contextMenu.unlock=Sblocca…
 main.vaultlist.contextMenu.unlockNow=Sblocca Ora
-main.vaultlist.contextMenu.vaultoptions=Mostra Opzioni Cassaforte
-main.vaultlist.contextMenu.reveal=Rivela Drive
+main.vaultlist.contextMenu.vaultoptions=Mostra le Opzioni della Cassaforte
+main.vaultlist.contextMenu.reveal=Rivela Unità
 main.vaultlist.addVaultBtn=Aggiungi Cassaforte
 ## Vault Detail
 ### Welcome
-main.vaultDetail.welcomeOnboarding=Grazie per aver scelto Cryptomator per proteggere i tuoi file. Se hai bisogno di assistenza, dai un'occhiata alle guide per iniziare:
+main.vaultDetail.welcomeOnboarding=Grazie per aver scelto Cryptomator per proteggere i tuoi file. Se necessiti d'assistenza, dai un'occhiata alle nostre guide per iniziare:
 ### Locked
 main.vaultDetail.lockedStatus=BLOCCATO
 main.vaultDetail.unlockBtn=Sblocca…
-main.vaultDetail.unlockNowBtn=Sblocca adesso
-main.vaultDetail.optionsBtn=Opzioni Cassaforte
+main.vaultDetail.unlockNowBtn=Sblocca Ora
+main.vaultDetail.optionsBtn=Opzioni della Cassaforte
 main.vaultDetail.passwordSavedInKeychain=Password salvata
 ### Unlocked
-main.vaultDetail.unlockedStatus=SBLOCCATO
+main.vaultDetail.unlockedStatus=SBLOCCATA
 main.vaultDetail.accessLocation=I contenuti della tua cassaforte sono accessibili qui:
-main.vaultDetail.revealBtn=Visualizza disco
+main.vaultDetail.revealBtn=Rivela Unità
 main.vaultDetail.lockBtn=Blocca
 main.vaultDetail.bytesPerSecondRead=Lettura:
 main.vaultDetail.bytesPerSecondWritten=Scrittura:
 main.vaultDetail.throughput.idle=inattivo
 main.vaultDetail.throughput.kbps=%.1f kiB/s
 main.vaultDetail.throughput.mbps=%.1f MiB/s
-main.vaultDetail.stats=Statistiche Cassaforte
+main.vaultDetail.stats=Statistiche della Cassaforte
 ### Missing
-main.vaultDetail.missing.info=Cryptomator non ha potuto trovare una cassaforte in questo percorso.
-main.vaultDetail.missing.recheck=Ricontrollare
-main.vaultDetail.missing.remove=Rimuovi dalla Lista Cassaforte
-main.vaultDetail.missing.changeLocation=Cambia posizione della Cassaforte…
+main.vaultDetail.missing.info=Cryptomator non è riuscito a trovare una cassaforte in questo percorso.
+main.vaultDetail.missing.recheck=Ricontrolla
+main.vaultDetail.missing.remove=Rimuovi dall'Elenco di Cassaforti
+main.vaultDetail.missing.changeLocation=Cambia la Posizione della Cassaforte…
 ### Needs Migration
-main.vaultDetail.migrateButton=Aggiorna la cassaforte
-main.vaultDetail.migratePrompt=Prima di potervi accedere la tua cassaforte deve essere aggiornata al nuovo formato
+main.vaultDetail.migrateButton=Aggiorna la Cassaforte
+main.vaultDetail.migratePrompt=La tua cassaforte dev'esser aggiornata a un nuovo formato, prima di potervi accedere
 
 # Wrong File Alert
-wrongFileAlert.title=Come Criptare i File
-wrongFileAlert.header.title=Hai provato a cifrare questi file?
-wrongFileAlert.header.lead=A questo scopo, Cryptomator fornisce un volume nel file manager di sistema.
-wrongFileAlert.instruction.0=Per cifrare file, segui questi passi:
+wrongFileAlert.title=Come Crittografare i File
+wrongFileAlert.header.title=Hai tentato di crittografare questi file?
+wrongFileAlert.header.lead=Per questo scopo, Cryptomator fornisce un volume nel gestore dei tuoi file di sistema.
+wrongFileAlert.instruction.0=Per crittografare i file, segui questi passi:
 wrongFileAlert.instruction.1=1. Sblocca la tua cassaforte.
-wrongFileAlert.instruction.2=2. Clicca su "Rivela" per aprire il volume nel tuo file manager.
+wrongFileAlert.instruction.2=2. Clicca su "Rivela" per aprire il volume nel gestore dei tuoi file.
 wrongFileAlert.instruction.3=3. Aggiungi i tuoi file a questo volume.
 wrongFileAlert.link=Per ulteriore assistenza, visita
 
 # Vault Options
 ## General
-vaultOptions.general=Generali
-vaultOptions.general.vaultName=Nome Cassaforte
+vaultOptions.general=Generale
+vaultOptions.general.vaultName=Nome della Cassaforte
 vaultOptions.general.autoLock.lockAfterTimePart1=Blocca quando inattivo per
 vaultOptions.general.autoLock.lockAfterTimePart2=minuti
-vaultOptions.general.unlockAfterStartup=Sblocca vault all'avvio di Cryptomator
-vaultOptions.general.actionAfterUnlock=Dopo aver sbloccato con successo
+vaultOptions.general.unlockAfterStartup=Sblocca la cassaforte all'avvio di Cryptomator
+vaultOptions.general.actionAfterUnlock=Dopo uno sblocco riuscito
 vaultOptions.general.actionAfterUnlock.ignore=Non fare nulla
-vaultOptions.general.actionAfterUnlock.reveal=Visualizza disco
+vaultOptions.general.actionAfterUnlock.reveal=Rivela Unità
 vaultOptions.general.actionAfterUnlock.ask=Chiedi
 vaultOptions.general.startHealthCheckBtn=Avvia il Controllo della Salute
 
 ## Mount
 vaultOptions.mount=Montaggio
-vaultOptions.mount.readonly=Sola lettura
-vaultOptions.mount.customMountFlags=Opzioni personalizzate
+vaultOptions.mount.readonly=Sola Lettura
+vaultOptions.mount.customMountFlags=Flag di Montaggio Personalizzati
 vaultOptions.mount.winDriveLetterOccupied=occupato
-vaultOptions.mount.mountPoint=Punto di mount
-vaultOptions.mount.mountPoint.auto=Scegli automaticamente una posizione adatta
+vaultOptions.mount.mountPoint=Punto di Montaggio
+vaultOptions.mount.mountPoint.auto=Scegli automaticamente una posizione idonea
 vaultOptions.mount.mountPoint.driveLetter=Usa la lettera del drive assegnata
 vaultOptions.mount.mountPoint.custom=Percorso personalizzato
 vaultOptions.mount.mountPoint.directoryPickerButton=Scegli…

+ 7 - 2
src/main/resources/i18n/strings_ja.properties

@@ -13,6 +13,11 @@ generic.button.done=完了
 generic.button.next=次へ
 generic.button.print=印刷
 ## Error
+generic.error.title=エラー %s
+generic.error.instruction=Cryptomator で予期できない問題が発生しました! 。このエラーの解決方法を検索することができ、まだ報告されていない場合は、報告を行うことができます。
+generic.error.hyperlink.lookup=このエラーを検索する
+generic.error.hyperlink.report=このエラーを報告する
+generic.error.technicalDetails=詳細:
 
 # Defaults
 defaults.vault.vaultName=金庫
@@ -30,7 +35,7 @@ traymenu.vault.reveal=表示
 addvaultwizard.title=金庫を追加
 ## Welcome
 addvaultwizard.welcome.newButton=新しい金庫を作成
-addvaultwizard.welcome.existingButton=既存の金庫を開く
+addvaultwizard.welcome.existingButton=すでにある金庫を開く
 ## New
 ### Name
 addvaultwizard.new.nameInstruction=金庫の名前を入力してください
@@ -277,7 +282,7 @@ main.vaultDetail.optionsBtn=金庫のオプション
 main.vaultDetail.passwordSavedInKeychain=パスワードを保存しました
 ### Unlocked
 main.vaultDetail.unlockedStatus=解錠済み
-main.vaultDetail.accessLocation=アクセス可能な金庫のコンテンツ:
+main.vaultDetail.accessLocation=金庫の内容はこちらからアクセスできます:
 main.vaultDetail.revealBtn=ドライブを表示
 main.vaultDetail.lockBtn=施錠
 main.vaultDetail.bytesPerSecondRead=読み取り:

+ 5 - 0
src/main/resources/i18n/strings_pt_BR.properties

@@ -13,6 +13,11 @@ generic.button.done=Concluído
 generic.button.next=Próximo
 generic.button.print=Imprimir
 ## Error
+generic.error.title=Erro %s
+generic.error.instruction=Oops! Cryptomator não esperava que isso acontecesse. Você pode procurar soluções existentes para este erro. Ou se isso ainda não foi reportado, fique à vontade para fazê-lo.
+generic.error.hyperlink.lookup=Procure este erro
+generic.error.hyperlink.report=Reportar este erro
+generic.error.technicalDetails=Detalhes:
 
 # Defaults
 defaults.vault.vaultName=Cofre

+ 5 - 0
src/main/resources/i18n/strings_sv.properties

@@ -13,6 +13,11 @@ generic.button.done=Klar
 generic.button.next=Nästa
 generic.button.print=Skriv ut
 ## Error
+generic.error.title=Fel: %s
+generic.error.instruction=Hoppsan! Cryptomator stötte på något oväntat. Du kan leta upp befintliga lösningar för detta fel. Om det inte har rapporterats ännu får du gärna rapportera in felet.
+generic.error.hyperlink.lookup=Slå upp detta fel
+generic.error.hyperlink.report=Rapportera fel
+generic.error.technicalDetails=Detaljer:
 
 # Defaults
 defaults.vault.vaultName=Valv

+ 5 - 0
src/main/resources/i18n/strings_tr.properties

@@ -13,6 +13,11 @@ generic.button.done=Tamam
 generic.button.next=Sonraki
 generic.button.print=Yazdır
 ## Error
+generic.error.title=Hata: %s
+generic.error.instruction=Uups! Cryptomator bunun olmasını beklemiyordu. Bu hata için mevcut çözümlere bakabilirsiniz. Ya da henüz bildirilmediyse, bunu raporlamaktan çekinmeyin.
+generic.error.hyperlink.lookup=Bu hatayı ara
+generic.error.hyperlink.report=Bu hatayı bildir
+generic.error.technicalDetails=Detaylar:
 
 # Defaults
 defaults.vault.vaultName=Kasa

+ 12 - 12
src/main/resources/license/THIRD-PARTY.txt

@@ -17,10 +17,10 @@ Cryptomator uses 40 third-party dependencies under the following licenses:
 			- jnr-a64asm (com.github.jnr:jnr-a64asm:1.0.0 - http://nexus.sonatype.org/oss-repository-hosting.html/jnr-a64asm)
 			- jnr-constants (com.github.jnr:jnr-constants:0.9.15 - http://github.com/jnr/jnr-constants)
 			- jnr-ffi (com.github.jnr:jnr-ffi:2.1.12 - http://github.com/jnr/jnr-ffi)
-			- Gson (com.google.code.gson:gson:2.8.7 - https://github.com/google/gson/gson)
+			- Gson (com.google.code.gson:gson:2.8.8 - https://github.com/google/gson/gson)
 			- Dagger (com.google.dagger:dagger:2.38.1 - https://github.com/google/dagger)
 			- Guava InternalFutureFailureAccess and InternalFutures (com.google.guava:failureaccess:1.0.1 - https://github.com/google/guava/failureaccess)
-			- Guava: Google Core Libraries for Java (com.google.guava:guava:30.1.1-jre - https://github.com/google/guava/guava)
+			- Guava: Google Core Libraries for Java (com.google.guava:guava:31.0-jre - https://github.com/google/guava)
 			- Apache Commons CLI (commons-cli:commons-cli:1.4 - http://commons.apache.org/proper/commons-cli/)
 			- javax.inject (javax.inject:javax.inject:1 - http://code.google.com/p/atinject/)
 			- Apache Commons Lang (org.apache.commons:commons-lang3:3.12.0 - https://commons.apache.org/proper/commons-lang/)
@@ -52,31 +52,31 @@ Cryptomator uses 40 third-party dependencies under the following licenses:
 			- Jetty :: Servlet Handling (org.eclipse.jetty:jetty-servlet:10.0.6 - https://eclipse.org/jetty/jetty-servlet)
 			- Jetty :: Utilities (org.eclipse.jetty:jetty-util:10.0.6 - https://eclipse.org/jetty/jetty-util)
         Eclipse Public License - v 1.0:
-			- Logback Classic Module (ch.qos.logback:logback-classic:1.2.3 - http://logback.qos.ch/logback-classic)
-			- Logback Core Module (ch.qos.logback:logback-core:1.2.3 - http://logback.qos.ch/logback-core)
+			- Logback Classic Module (ch.qos.logback:logback-classic:1.2.6 - http://logback.qos.ch/logback-classic)
+			- Logback Core Module (ch.qos.logback:logback-core:1.2.6 - http://logback.qos.ch/logback-core)
         Eclipse Public License - v 2.0:
 			- jnr-posix (com.github.jnr:jnr-posix:3.0.54 - http://nexus.sonatype.org/oss-repository-hosting.html/jnr-posix)
         GNU Lesser General Public License:
-			- Logback Classic Module (ch.qos.logback:logback-classic:1.2.3 - http://logback.qos.ch/logback-classic)
-			- Logback Core Module (ch.qos.logback:logback-core:1.2.3 - http://logback.qos.ch/logback-core)
+			- Logback Classic Module (ch.qos.logback:logback-classic:1.2.6 - http://logback.qos.ch/logback-classic)
+			- Logback Core Module (ch.qos.logback:logback-core:1.2.6 - http://logback.qos.ch/logback-core)
         GPLv2:
 			- jnr-posix (com.github.jnr:jnr-posix:3.0.54 - http://nexus.sonatype.org/oss-repository-hosting.html/jnr-posix)
         GPLv2+CE:
-			- javafx-base (org.openjfx:javafx-base:16 - https://openjdk.java.net/projects/openjfx/javafx-base/)
-			- javafx-controls (org.openjfx:javafx-controls:16 - https://openjdk.java.net/projects/openjfx/javafx-controls/)
-			- javafx-fxml (org.openjfx:javafx-fxml:16 - https://openjdk.java.net/projects/openjfx/javafx-fxml/)
-			- javafx-graphics (org.openjfx:javafx-graphics:16 - https://openjdk.java.net/projects/openjfx/javafx-graphics/)
+			- javafx-base (org.openjfx:javafx-base:17.0.0.1 - https://openjdk.java.net/projects/openjfx/javafx-base/)
+			- javafx-controls (org.openjfx:javafx-controls:17.0.0.1 - https://openjdk.java.net/projects/openjfx/javafx-controls/)
+			- javafx-fxml (org.openjfx:javafx-fxml:17.0.0.1 - https://openjdk.java.net/projects/openjfx/javafx-fxml/)
+			- javafx-graphics (org.openjfx:javafx-graphics:17.0.0.1 - https://openjdk.java.net/projects/openjfx/javafx-graphics/)
         LGPL 2.1:
 			- jnr-posix (com.github.jnr:jnr-posix:3.0.54 - http://nexus.sonatype.org/oss-repository-hosting.html/jnr-posix)
         LGPL-2.1-or-later:
 			- Java Native Access (net.java.dev.jna:jna:5.9.0 - https://github.com/java-native-access/jna)
 			- Java Native Access Platform (net.java.dev.jna:jna-platform:5.9.0 - https://github.com/java-native-access/jna)
         MIT License:
-			- java jwt (com.auth0:java-jwt:3.18.1 - https://github.com/auth0/java-jwt)
+			- java jwt (com.auth0:java-jwt:3.18.2 - https://github.com/auth0/java-jwt)
 			- jnr-x86asm (com.github.jnr:jnr-x86asm:1.0.2 - http://github.com/jnr/jnr-x86asm)
 			- jnr-fuse (com.github.serceman:jnr-fuse:0.5.5 - https://github.com/SerCeMan/jnr-fuse)
 			- zxcvbn4j (com.nulab-inc:zxcvbn:1.5.2 - https://github.com/nulab/zxcvbn4j)
-			- SLF4J API Module (org.slf4j:slf4j-api:1.7.31 - http://www.slf4j.org)
+			- SLF4J API Module (org.slf4j:slf4j-api:1.7.32 - http://www.slf4j.org)
         The BSD 2-Clause License:
 			- EasyBind (com.tobiasdiez:easybind:2.2 - https://github.com/tobiasdiez/EasyBind)
 

+ 5 - 0
src/test/java/org/cryptomator/common/keychain/MapKeychainAccess.java

@@ -14,6 +14,11 @@ class MapKeychainAccess implements KeychainAccessProvider {
 
 	private final Map<String, char[]> map = new HashMap<>();
 
+	@Override
+	public String displayName() {
+		return getClass().getName();
+	}
+
 	@Override
 	public void storePassphrase(String key, CharSequence passphrase) {
 		char[] pw = new char[passphrase.length()];