Compare commits

..
Author SHA1 Message Date
Sebastian Stenzel 8795e5c8d2 Merge branch 'develop' into release/1.6.0
# Conflicts:
#	pom.xml
#	src/main/resources/license/THIRD-PARTY.txt
2021-09-27 13:52:29 +02:00
CryptobotandGitHub 069c07cbf1 New Crowdin updates (#1807)
* New translations strings.properties
[ci skip]
2021-09-27 13:49:32 +02:00
Sebastian Stenzel cda7cc8ef9 dependency bump 2021-09-27 13:41:02 +02:00
Sebastian Stenzel 1015542629 adjust to latest API 2021-09-27 13:31:05 +02:00
Sebastian Stenzel 18be4ba257 update integrations-api 2021-09-27 13:03:55 +02:00
Sebastian StenzelandGitHub 90bceb0f68 Update to OpenJFX 17 (#1809)
* update to openjfx 17.0.0.1
* use new javafx API instead of AWT
2021-09-24 21:01:19 +02:00
Armin Schrenk 53afaf1b12 Replace Files.isWritable() by real write test 2021-09-24 16:31:07 +02:00
Sebastian Stenzel 6b0625609b case insensitive semver validation 2021-09-24 15:43:52 +02:00
Armin Schrenk 5670e77908 closes #1783 2021-09-24 11:47:57 +02:00
Sebastian Stenzel 79c48778ce Be more lenient when handling open vault events
either via drag and drop or registered file extensions
2021-09-24 10:57:05 +02:00
Sebastian Stenzel f9889c16de attempted fix for #1808 2021-09-23 15:08:24 +02:00
Sebastian Stenzel cbe26d8a4f Merge branch 'develop' into release/1.6.0, fixing appimage version number 2021-09-23 14:04:54 +02:00
Sebastian Stenzel b3c2d68d9b Partial revert of 0d5a3346: Build PPA independently of other installers 2021-09-23 14:04:26 +02:00
Sebastian Stenzel d07c018670 adjust appimage launcher script to comply with appdir built during CI
fixes #1806
2021-09-23 14:01:07 +02:00
17 changed files with 293 additions and 246 deletions
+72 -80
View File
@@ -97,7 +97,7 @@ jobs:
echo "::set-output name=semVerNum::${SEM_VER_NUM}" echo "::set-output name=semVerNum::${SEM_VER_NUM}"
echo "::set-output name=ppaVerStr::${SEM_VER_STR/-/\~}-${REVCOUNT}" echo "::set-output name=ppaVerStr::${SEM_VER_STR/-/\~}-${REVCOUNT}"
echo "::set-output name=revNum::${REVCOUNT}" echo "::set-output name=revNum::${REVCOUNT}"
- uses: rubenesp87/semver-validation-action@0.0.6 - uses: skymatic/semver-validation-action@v1
with: with:
version: ${{ steps.versions.outputs.semVerStr }} version: ${{ steps.versions.outputs.semVerStr }}
@@ -200,6 +200,69 @@ jobs:
path: appdir.tar path: appdir.tar
if-no-files-found: error if-no-files-found: error
#
# Linux PPA Source Package
#
ppa:
name: Upload source package to PPA
needs: [buildkit, metadata]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: install build tools
run: |
sudo apt-get update
sudo apt-get install debhelper devscripts dput
- name: Download linux-buildkit
uses: actions/download-artifact@v2
with:
name: linux-buildkit
path: pkgdir
- name: create orig.tar.gz
run: tar -cJf cryptomator_${{ needs.metadata.outputs.ppaVerStr }}.orig.tar.xz -C pkgdir .
- name: patch and rename pkgdir
run: |
cp -r dist/linux/debian/ pkgdir
cp -r dist/linux/resources/ pkgdir
export RFC2822_TIMESTAMP=`date --rfc-2822`
envsubst '${VERSION_STR} ${VERSION_NUM} ${REVISION_NUM}' < dist/linux/debian/rules > pkgdir/debian/rules
envsubst '${VERSION_STR}' < dist/linux/debian/org.cryptomator.Cryptomator.desktop > pkgdir/debian/org.cryptomator.Cryptomator.desktop
envsubst '${PPA_VERSION} ${RFC2822_TIMESTAMP}' < dist/linux/debian/changelog > pkgdir/debian/changelog
find . -name "*.jar" >> pkgdir/debian/source/include-binaries
mv pkgdir cryptomator_${{ needs.metadata.outputs.ppaVerStr }}
env:
VERSION_STR: ${{ needs.metadata.outputs.semVerStr }}
VERSION_NUM: ${{ needs.metadata.outputs.semVerNum }}
REVISION_NUM: ${{ needs.metadata.outputs.revNum }}
PPA_VERSION: ${{ needs.metadata.outputs.ppaVerStr }}-0ppa1
- name: import gpg key 615D449FE6E6A235
run: |
echo "${GPG_PRIVATE_KEY}" | gpg --batch --quiet --import
echo "${GPG_PASSPHRASE}" | gpg --batch --quiet --passphrase-fd 0 --pinentry-mode loopback -u 615D449FE6E6A235 --dry-run --sign dist/linux/debian/rules
env:
GPG_PRIVATE_KEY: ${{ secrets.RELEASES_GPG_PRIVATE_KEY }}
GPG_PASSPHRASE: ${{ secrets.RELEASES_GPG_PASSPHRASE }}
- name: debuild
run: debuild -S -sa -d
env:
DEBSIGN_PROGRAM: gpg --batch --pinentry-mode loopback
DEBSIGN_KEYID: 615D449FE6E6A235
working-directory: cryptomator_${{ needs.metadata.outputs.ppaVerStr }}
- name: Upload artifacts
uses: actions/upload-artifact@v2
with:
name: linux-deb-source-package
path: |
cryptomator_*.dsc
cryptomator_*.orig.tar.xz
cryptomator_*.debian.tar.xz
cryptomator_*_source.changes
cryptomator_*_source.buildinfo
- name: dput to beta repo
run: dput ppa:sebastian-stenzel/cryptomator-beta cryptomator_${PPA_VERSION}_source.changes
env:
PPA_VERSION: ${{ needs.metadata.outputs.ppaVerStr }}-0ppa1
# #
# Linux Cryptomator.AppImage # Linux Cryptomator.AppImage
# #
@@ -220,7 +283,7 @@ jobs:
run: | run: |
mv appdir/Cryptomator Cryptomator.AppDir mv appdir/Cryptomator Cryptomator.AppDir
cp -r dist/linux/appimage/resources/AppDir/* Cryptomator.AppDir/ cp -r dist/linux/appimage/resources/AppDir/* Cryptomator.AppDir/
envsubst '${REVISION_NO}' < dist/linux/appimage/resources/AppDir/bin/cryptomator.sh > Cryptomator.AppDir/bin/cryptomator.sh envsubst '${REVISION_NO} ${SEMVER_STR}' < dist/linux/appimage/resources/AppDir/bin/cryptomator.sh > Cryptomator.AppDir/bin/cryptomator.sh
ln -s usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.svg Cryptomator.AppDir/org.cryptomator.Cryptomator.svg ln -s usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.svg Cryptomator.AppDir/org.cryptomator.Cryptomator.svg
ln -s usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.svg Cryptomator.AppDir/Cryptomator.svg ln -s usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.svg Cryptomator.AppDir/Cryptomator.svg
ln -s usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.svg Cryptomator.AppDir/.DirIcon ln -s usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.svg Cryptomator.AppDir/.DirIcon
@@ -228,6 +291,7 @@ jobs:
ln -s bin/cryptomator.sh Cryptomator.AppDir/AppRun ln -s bin/cryptomator.sh Cryptomator.AppDir/AppRun
env: env:
REVISION_NO: ${{ needs.metadata.outputs.revNum }} REVISION_NO: ${{ needs.metadata.outputs.revNum }}
SEMVER_STR: ${{ needs.metadata.outputs.semVerStr }}
- name: Extract libjffi.so # workaround for https://github.com/cryptomator/cryptomator-linux/issues/27 - name: Extract libjffi.so # workaround for https://github.com/cryptomator/cryptomator-linux/issues/27
run: | run: |
JFFI_NATIVE_JAR=`ls lib/app/ | grep -e 'jffi-[1-9]\.[0-9]\{1,2\}.[0-9]\{1,2\}-native.jar'` JFFI_NATIVE_JAR=`ls lib/app/ | grep -e 'jffi-[1-9]\.[0-9]\{1,2\}.[0-9]\{1,2\}-native.jar'`
@@ -493,70 +557,6 @@ jobs:
path: installer/*.msi path: installer/*.msi
if-no-files-found: error if-no-files-found: error
#
# Linux PPA Source Package
#
ppa:
name: Upload source package to PPA
needs: [buildkit, metadata, win-msi, mac-dmg, linux-appimage]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: install build tools
run: |
sudo apt-get update
sudo apt-get install debhelper devscripts dput
- name: Download linux-buildkit
uses: actions/download-artifact@v2
with:
name: linux-buildkit
path: pkgdir
- name: create orig.tar.gz
run: tar -cJf cryptomator_${{ needs.metadata.outputs.ppaVerStr }}.orig.tar.xz -C pkgdir .
- name: patch and rename pkgdir
run: |
cp -r dist/linux/debian/ pkgdir
cp -r dist/linux/resources/ pkgdir
export RFC2822_TIMESTAMP=`date --rfc-2822`
envsubst '${VERSION_STR} ${VERSION_NUM} ${REVISION_NUM}' < dist/linux/debian/rules > pkgdir/debian/rules
envsubst '${VERSION_STR}' < dist/linux/debian/org.cryptomator.Cryptomator.desktop > pkgdir/debian/org.cryptomator.Cryptomator.desktop
envsubst '${PPA_VERSION} ${RFC2822_TIMESTAMP}' < dist/linux/debian/changelog > pkgdir/debian/changelog
find . -name "*.jar" >> pkgdir/debian/source/include-binaries
mv pkgdir cryptomator_${{ needs.metadata.outputs.ppaVerStr }}
env:
VERSION_STR: ${{ needs.metadata.outputs.semVerStr }}
VERSION_NUM: ${{ needs.metadata.outputs.semVerNum }}
REVISION_NUM: ${{ needs.metadata.outputs.revNum }}
PPA_VERSION: ${{ needs.metadata.outputs.ppaVerStr }}-0ppa1
- name: import gpg key 615D449FE6E6A235
run: |
echo "${GPG_PRIVATE_KEY}" | gpg --batch --quiet --import
echo "${GPG_PASSPHRASE}" | gpg --batch --quiet --passphrase-fd 0 --pinentry-mode loopback -u 615D449FE6E6A235 --dry-run --sign dist/linux/debian/rules
env:
GPG_PRIVATE_KEY: ${{ secrets.RELEASES_GPG_PRIVATE_KEY }}
GPG_PASSPHRASE: ${{ secrets.RELEASES_GPG_PASSPHRASE }}
- name: debuild
run: debuild -S -sa -d
env:
DEBSIGN_PROGRAM: gpg --batch --pinentry-mode loopback
DEBSIGN_KEYID: 615D449FE6E6A235
working-directory: cryptomator_${{ needs.metadata.outputs.ppaVerStr }}
- name: Upload artifacts
uses: actions/upload-artifact@v2
with:
name: linux-deb-source-package
path: |
cryptomator_*.dsc
cryptomator_*.orig.tar.xz
cryptomator_*.debian.tar.xz
cryptomator_*_source.changes
cryptomator_*_source.buildinfo
- name: dput to beta repo
run: dput ppa:sebastian-stenzel/cryptomator-beta cryptomator_${PPA_VERSION}_source.changes
env:
PPA_VERSION: ${{ needs.metadata.outputs.ppaVerStr }}-0ppa1
# #
# Release # Release
# #
@@ -565,10 +565,6 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: [metadata,linux-appimage,mac-dmg,win-msi,ppa] needs: [metadata,linux-appimage,mac-dmg,win-msi,ppa]
if: startsWith(github.ref, 'refs/tags/') && github.repository == 'cryptomator/cryptomator' if: startsWith(github.ref, 'refs/tags/') && github.repository == 'cryptomator/cryptomator'
env:
APPIMAGE_SHA256_MSG: undefined
DMG_SHA256_MSG: undefined
MSI_SHA256_MSG: undefined
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- name: Create tarball - name: Create tarball
@@ -594,14 +590,12 @@ jobs:
env: env:
GPG_PRIVATE_KEY: ${{ secrets.RELEASES_GPG_PRIVATE_KEY }} GPG_PRIVATE_KEY: ${{ secrets.RELEASES_GPG_PRIVATE_KEY }}
GPG_PASSPHRASE: ${{ secrets.RELEASES_GPG_PASSPHRASE }} GPG_PASSPHRASE: ${{ secrets.RELEASES_GPG_PASSPHRASE }}
- name: Compute SHA256 checksums of release artifacts # sha256sum is split on the whitespace with sed and reorderd. env keys are file name extensions in uppercase - id: checksums
name: Compute SHA256 checksums of release artifacts
run: | run: |
for FILE in `find . -name "*.AppImage" -o -name "*.dmg" -o -name "*.msi" -o -name "*.zsync" -o -name "*.tar.gz"`; do SHA256_SUMS=`find . -name "*.AppImage" -o -name "*.dmg" -o -name "*.msi" -name "*.tar.gz" | xargs sha256sum`
CHECKSUM_MSG=$(sha256sum ${FILE}) echo "::set-output name=SHA256_SUMS::${SHA256_SUMS}"
VALUE=$(echo ${CHECKSUM_MSG} | sed 's/\([0-9,a-f]\{64\}\)[[:blank:]]\([Cc]ryptomator-.*$\)/\2: `\1`/' ) continue-on-error: true
KEY=$(echo ${CHECKSUM_MSG} | sed 's/.*[[:blank:]].*\.\(.*$\)/\1/')
echo "{${KEY^^}_SHA256_MSG}={${VALUE}}" >> $GITHUB_ENV
done
- name: Create release draft - name: Create release draft
uses: softprops/action-gh-release@v1 uses: softprops/action-gh-release@v1
with: with:
@@ -624,6 +618,4 @@ jobs:
:scroll: A complete list of closed issues is available [here](LINK) :scroll: A complete list of closed issues is available [here](LINK)
--- ---
Checksums of release artifacts: Checksums of release artifacts:
* ${{ env.APPIMAGE_SHA256_MSG}} ${{ steps.checksums.outputs.SHA256_SUMS }}"
* ${{ env.DMG_SHA256_MSG}}
* ${{ env.MSI_SHA_256_MSG}}
+5 -2
View File
@@ -26,12 +26,15 @@ export LD_PRELOAD=lib/app/libjffi.so
./lib/runtime/bin/java \ ./lib/runtime/bin/java \
-p "lib/app/mods" \ -p "lib/app/mods" \
-cp "lib/app/*" \ -cp "lib/app/*" \
-Dfile.encoding="utf-8" \
-Dcryptomator.logDir="~/.local/share/Cryptomator/logs" \ -Dcryptomator.logDir="~/.local/share/Cryptomator/logs" \
-Dcryptomator.pluginDir="~/.local/share/Cryptomator/plugins"
-Dcryptomator.mountPointsDir="~/.local/share/Cryptomator/mnt" \ -Dcryptomator.mountPointsDir="~/.local/share/Cryptomator/mnt" \
-Dcryptomator.settingsPath="~/.config/Cryptomator/settings.json:~/.Cryptomator/settings.json" \ -Dcryptomator.settingsPath="~/.config/Cryptomator/settings.json:~/.Cryptomator/settings.json" \
-Dcryptomator.ipcSocketPath="~/.config/Cryptomator/ipc.socket" \ -Dcryptomator.ipcSocketPath="~/.config/Cryptomator/ipc.socket" \
-Dcryptomator.buildNumber="appimage-${REVISION_NO}" \ -Dcryptomator.buildNumber="appimage-${REVISION_NO}" \
-Dcryptomator.appVersion="${SEMVER_STR}" \
$GTK_FLAG \ $GTK_FLAG \
-Xss2m \ -Xss5m \
-Xmx512m \ -Xmx256m \
-m org.cryptomator.desktop/org.cryptomator.launcher.Cryptomator -m org.cryptomator.desktop/org.cryptomator.launcher.Cryptomator
+14 -14
View File
@@ -28,29 +28,29 @@
<!-- cryptomator dependencies --> <!-- cryptomator dependencies -->
<cryptomator.cryptofs.version>2.1.0-beta13</cryptomator.cryptofs.version> <cryptomator.cryptofs.version>2.1.0-beta13</cryptomator.cryptofs.version>
<cryptomator.integrations.version>1.0.0-rc1</cryptomator.integrations.version> <cryptomator.integrations.version>1.0.0</cryptomator.integrations.version>
<cryptomator.integrations.win.version>1.0.0-beta2</cryptomator.integrations.win.version> <cryptomator.integrations.win.version>1.0.0-rc1</cryptomator.integrations.win.version>
<cryptomator.integrations.mac.version>1.0.0-beta2</cryptomator.integrations.mac.version> <cryptomator.integrations.mac.version>1.0.0-rc1</cryptomator.integrations.mac.version>
<cryptomator.integrations.linux.version>1.0.0-beta1</cryptomator.integrations.linux.version> <cryptomator.integrations.linux.version>1.0.0-rc1</cryptomator.integrations.linux.version>
<cryptomator.fuse.version>1.3.2</cryptomator.fuse.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> <cryptomator.webdav.version>1.2.6</cryptomator.webdav.version>
<!-- 3rd party dependencies --> <!-- 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> <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> <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> <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> <zxcvbn.version>1.5.2</zxcvbn.version>
<slf4j.version>1.7.31</slf4j.version> <slf4j.version>1.7.32</slf4j.version>
<logback.version>1.2.3</logback.version> <logback.version>1.2.6</logback.version>
<!-- test dependencies --> <!-- test dependencies -->
<junit.jupiter.version>5.7.2</junit.jupiter.version> <junit.jupiter.version>5.8.1</junit.jupiter.version>
<mockito.version>3.11.2</mockito.version> <mockito.version>3.12.4</mockito.version>
<hamcrest.version>2.2</hamcrest.version> <hamcrest.version>2.2</hamcrest.version>
</properties> </properties>
@@ -276,7 +276,7 @@
<plugin> <plugin>
<groupId>org.owasp</groupId> <groupId>org.owasp</groupId>
<artifactId>dependency-check-maven</artifactId> <artifactId>dependency-check-maven</artifactId>
<version>6.2.2</version> <version>6.3.1</version>
</plugin> </plugin>
</plugins> </plugins>
</pluginManagement> </pluginManagement>
@@ -5,6 +5,7 @@ public interface Constants {
String MASTERKEY_FILENAME = "masterkey.cryptomator"; String MASTERKEY_FILENAME = "masterkey.cryptomator";
String MASTERKEY_BACKUP_SUFFIX = ".bkup"; String MASTERKEY_BACKUP_SUFFIX = ".bkup";
String VAULTCONFIG_FILENAME = "vault.cryptomator"; String VAULTCONFIG_FILENAME = "vault.cryptomator";
String CRYPTOMATOR_FILENAME_EXT = ".cryptomator";
byte[] PEPPER = new byte[0]; byte[] PEPPER = new byte[0];
} }
@@ -38,6 +38,11 @@ public class KeychainManager implements KeychainAccessProvider {
return result; return result;
} }
@Override
public String displayName() {
return getClass().getName();
}
@Override @Override
public void storePassphrase(String key, CharSequence passphrase) throws KeychainAccessException { public void storePassphrase(String key, CharSequence passphrase) throws KeychainAccessException {
getKeychainOrFail().storePassphrase(key, passphrase); getKeychainOrFail().storePassphrase(key, passphrase);
@@ -29,16 +29,20 @@ import javafx.scene.control.ToggleGroup;
import javafx.stage.DirectoryChooser; import javafx.stage.DirectoryChooser;
import javafx.stage.Stage; import javafx.stage.Stage;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.UUID;
@AddVaultWizardScoped @AddVaultWizardScoped
public class CreateNewVaultLocationController implements FxController { public class CreateNewVaultLocationController implements FxController {
private static final Logger LOG = LoggerFactory.getLogger(CreateNewVaultLocationController.class); 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 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 Stage window;
private final Lazy<Scene> chooseNameScene; private final Lazy<Scene> chooseNameScene;
@@ -92,7 +96,7 @@ public class CreateNewVaultLocationController implements FxController {
statusText.set(resourceBundle.getString("addvaultwizard.new.locationDoesNotExist")); statusText.set(resourceBundle.getString("addvaultwizard.new.locationDoesNotExist"));
statusGraphic.set(badLocation); statusGraphic.set(badLocation);
return false; return false;
} else if (!Files.isWritable(p.getParent())) { } else if (!isActuallyWritable(p.getParent())) {
statusText.set(resourceBundle.getString("addvaultwizard.new.locationIsNotWritable")); statusText.set(resourceBundle.getString("addvaultwizard.new.locationIsNotWritable"));
statusGraphic.set(badLocation); statusGraphic.set(badLocation);
return false; 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 @FXML
public void initialize() { public void initialize() {
predefinedLocationToggler.selectedToggleProperty().addListener(this::togglePredefinedLocation); predefinedLocationToggler.selectedToggleProperty().addListener(this::togglePredefinedLocation);
@@ -10,6 +10,7 @@ package org.cryptomator.ui.controls;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import javafx.application.Platform;
import javafx.beans.NamedArg; import javafx.beans.NamedArg;
import javafx.beans.Observable; import javafx.beans.Observable;
import javafx.beans.property.BooleanProperty; import javafx.beans.property.BooleanProperty;
@@ -27,7 +28,6 @@ import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination; import javafx.scene.input.KeyCombination;
import javafx.scene.input.KeyEvent; import javafx.scene.input.KeyEvent;
import javafx.scene.input.TransferMode; import javafx.scene.input.TransferMode;
import java.awt.Toolkit;
import java.nio.CharBuffer; import java.nio.CharBuffer;
import java.text.Normalizer; import java.text.Normalizer;
import java.text.Normalizer.Form; import java.text.Normalizer.Form;
@@ -123,8 +123,7 @@ public class SecurePasswordField extends TextField {
} }
private void updateCapsLocked() { private void updateCapsLocked() {
//TODO: fixed in JavaFX 17. AWT code needed until update (see https://bugs.openjdk.java.net/browse/JDK-8259680) capsLocked.set(Platform.isKeyLocked(KeyCode.CAPS).orElse(false));
capsLocked.set(isFocused() && Toolkit.getDefaultToolkit().getLockingKeyState(java.awt.event.KeyEvent.VK_CAPS_LOCK));
} }
private void updateContainingNonPrintableChars() { private void updateContainingNonPrintableChars() {
@@ -11,12 +11,11 @@ import javax.inject.Named;
import javax.inject.Singleton; import javax.inject.Singleton;
import javafx.application.Platform; import javafx.application.Platform;
import java.io.IOException; import java.io.IOException;
import java.nio.file.NoSuchFileException;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.concurrent.BlockingQueue; import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import static org.cryptomator.common.Constants.MASTERKEY_FILENAME; import static org.cryptomator.common.Constants.CRYPTOMATOR_FILENAME_EXT;
@Singleton @Singleton
class AppLaunchEventHandler { class AppLaunchEventHandler {
@@ -69,7 +68,7 @@ class AppLaunchEventHandler {
assert Platform.isFxApplicationThread(); assert Platform.isFxApplicationThread();
try { try {
final Vault v; final Vault v;
if (potentialVaultPath.getFileName().toString().equals(MASTERKEY_FILENAME)) { if (potentialVaultPath.getFileName().toString().endsWith(CRYPTOMATOR_FILENAME_EXT)) {
v = vaultListManager.add(potentialVaultPath.getParent()); v = vaultListManager.add(potentialVaultPath.getParent());
} else { } else {
v = vaultListManager.add(potentialVaultPath); v = vaultListManager.add(potentialVaultPath);
@@ -27,6 +27,7 @@ import java.nio.file.Path;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; 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.MASTERKEY_FILENAME;
import static org.cryptomator.common.Constants.VAULTCONFIG_FILENAME; import static org.cryptomator.common.Constants.VAULTCONFIG_FILENAME;
@@ -94,6 +95,9 @@ public class MainWindowController implements FxController {
private boolean containsVault(Path path) { private boolean containsVault(Path path) {
try { try {
if (path.getFileName().toString().endsWith(CRYPTOMATOR_FILENAME_EXT)) {
path = path.getParent();
}
return CryptoFileSystemProvider.checkDirStructureForVault(path, VAULTCONFIG_FILENAME, MASTERKEY_FILENAME) != DirStructure.UNRELATED; return CryptoFileSystemProvider.checkDirStructureForVault(path, VAULTCONFIG_FILENAME, MASTERKEY_FILENAME) != DirStructure.UNRELATED;
} catch (IOException e) { } catch (IOException e) {
return false; return false;
@@ -102,7 +106,7 @@ public class MainWindowController implements FxController {
private void addVault(Path pathToVault) { private void addVault(Path pathToVault) {
try { try {
if (pathToVault.getFileName().toString().equals(VAULTCONFIG_FILENAME)) { if (pathToVault.getFileName().toString().endsWith(CRYPTOMATOR_FILENAME_EXT)) {
vaultListManager.add(pathToVault.getParent()); vaultListManager.add(pathToVault.getParent());
} else { } else {
vaultListManager.add(pathToVault); vaultListManager.add(pathToVault);
@@ -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. addvault.new.readme.accessLocation.4=Diese Datei kannst du löschen.
## Existing ## Existing
addvaultwizard.existing.instruction=Wähle die Datei „masterkey.cryptomator“ deines vorhandenen Tresors aus. 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 addvaultwizard.existing.filePickerTitle=Masterkey-Datei auswählen
## Success ## 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. 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 forgetPassword.confirmBtn=Passwort vergessen
# Unlock # Unlock
unlock.title=Entsperre "%s" unlock.title="%s" entsperren
unlock.passwordPrompt=Gib das Passwort für „%s“ ein: unlock.passwordPrompt=Gib das Passwort für „%s“ ein:
unlock.savePassword=Passwort merken unlock.savePassword=Passwort merken
unlock.unlockBtn=Entsperren unlock.unlockBtn=Entsperren
@@ -294,8 +294,8 @@ main.vaultDetail.stats=Tresorstatistik
### Missing ### Missing
main.vaultDetail.missing.info=Cryptomator konnte keinen Tresor mit diesem Pfad finden. main.vaultDetail.missing.info=Cryptomator konnte keinen Tresor mit diesem Pfad finden.
main.vaultDetail.missing.recheck=Erneut prüfen main.vaultDetail.missing.recheck=Erneut prüfen
main.vaultDetail.missing.remove=Aus Tresorliste entfernen… main.vaultDetail.missing.remove=Aus Tresorliste entfernen
main.vaultDetail.missing.changeLocation=Speicherort des Tresors ändern… main.vaultDetail.missing.changeLocation=Speicherort des Tresors ändern
### Needs Migration ### Needs Migration
main.vaultDetail.migrateButton=Tresor aktualisieren main.vaultDetail.migrateButton=Tresor aktualisieren
main.vaultDetail.migratePrompt=Dein Tresor muss auf ein neues Format aktualisiert werden, bevor du auf ihn zugreifen kannst main.vaultDetail.migratePrompt=Dein Tresor muss auf ein neues Format aktualisiert werden, bevor du auf ihn zugreifen kannst
+124 -124
View File
@@ -59,43 +59,43 @@ addvaultwizard.new.generateRecoveryKeyChoice.yes=Si, per favore, è meglio esser
addvaultwizard.new.generateRecoveryKeyChoice.no=No grazie, non perderò la mia password addvaultwizard.new.generateRecoveryKeyChoice.no=No grazie, non perderò la mia password
### Information ### Information
addvault.new.readme.storageLocation.fileName=IMPORTANTE.rtf addvault.new.readme.storageLocation.fileName=IMPORTANTE.rtf
addvault.new.readme.storageLocation.1=⚠ FILE CASSAFORTE addvault.new.readme.storageLocation.1= FILE DELLA CASSAFORTE ⚠️
addvault.new.readme.storageLocation.2=Questa è la posizione di archiviazione della tua cassaforte. addvault.new.readme.storageLocation.2=Questa è la posizione d'archiviazione della tua cassaforte.
addvault.new.readme.storageLocation.3=NON addvault.new.readme.storageLocation.3=NON
addvault.new.readme.storageLocation.4=modificare qualsiasi file in questa cartella o addvault.new.readme.storageLocation.4=alterare alcun file in questa cartella o
addvault.new.readme.storageLocation.5=Incolla tutti i file da criptare in questa directory. addvault.new.readme.storageLocation.5=incollare alcun file per la crittografia in questa cartella.
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.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.7=1. Aggiungi questa cassaforte a Cryptomator.
addvault.new.readme.storageLocation.8=2. Sblocca la cassaforte in Criptomator. addvault.new.readme.storageLocation.8=2. Sblocca la cassaforte su Cryptomator.
addvault.new.readme.storageLocation.9=3. Apri la posizione di accesso cliccando sul pulsante "Rivela". addvault.new.readme.storageLocation.9=3. Apri la posizione d'accesso cliccando sul pulsante "Rivela".
addvault.new.readme.storageLocation.10=Se hai bisogno di aiuto, leggi la documentazione: %s addvault.new.readme.storageLocation.10=Se ti serve aiuto, visita la documentazione: %s
addvault.new.readme.accessLocation.fileName=BENVENUTO.rtf addvault.new.readme.accessLocation.fileName=BENVENUTO.rtf
addvault.new.readme.accessLocation.1=🔐 VOLUME CRIPTATO 🔐 addvault.new.readme.accessLocation.1=🔐 VOLUME CRITTOGRAFATO 🔐
addvault.new.readme.accessLocation.2=Questa è la posizione di accesso della tua cassaforte. addvault.new.readme.accessLocation.2=Questa è la posizione d'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.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=Sei libero di rimuovere questo file. addvault.new.readme.accessLocation.4=Sentiti libero di rimuovere questo file.
## Existing ## 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.chooseBtn=Scegli…
addvaultwizard.existing.filePickerTitle=Seleziona file Masterkey addvaultwizard.existing.filePickerTitle=Seleziona il File Masterkey
## Success ## 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.nextStepsInstructions=Cassaforte "%s" aggiunta.\nDevi sbloccare questa cassaforte per accedere o aggiungere contenuti. Altrimenti, puoi sbloccarla in qualsiasi momento successivo.
addvaultwizard.success.unlockNow=Sblocca adesso addvaultwizard.success.unlockNow=Sblocca Ora
# Remove Vault # Remove Vault
removeVault.title=Rimuovi Cassaforte 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 removeVault.confirmBtn=Rimuovi Cassaforte
# Change Password # Change Password
changepassword.title=Modifica password changepassword.title=Modifica la Password
changepassword.enterOldPassword=Inserisci la password attuale per "%s" changepassword.enterOldPassword=Inserisci la password corrente per "%s"
changepassword.finalConfirmation=Ho capito che non sarò in grado di accedere ai miei dati se dimentico la mia password changepassword.finalConfirmation=Capisco che non potrò accedere ai miei dati se dimentico la mia password
# Forget Password # Forget Password
forgetPassword.title=Password dimenticata forgetPassword.title=Dimentica la Password
forgetPassword.information=Questo cancellerà la password salvata di questa cassaforte dal tuo portachiavi di sistema. forgetPassword.information=Questo eliminerà la password salvata di questa cassaforte dal portachiavi del tuo sistema.
forgetPassword.confirmBtn=Password dimenticata forgetPassword.confirmBtn=Dimentica Password
# Unlock # Unlock
unlock.title=Sblocca "%s" unlock.title=Sblocca "%s"
@@ -103,129 +103,129 @@ unlock.passwordPrompt=Inserisci la password per "%s":
unlock.savePassword=Ricorda la Password unlock.savePassword=Ricorda la Password
unlock.unlockBtn=Sblocca unlock.unlockBtn=Sblocca
## ##
unlock.chooseMasterkey.prompt=Impossibile trovare il file masterkey per questa cassaforte nella posizione prevista. Scegliere manualmente il file chiave. unlock.chooseMasterkey.prompt=Impossibile trovare il file Masterkey per questa cassaforte alla sua posizione prevista. Sei pregato di sceglierlo manualmente.
unlock.chooseMasterkey.filePickerTitle=Seleziona file Masterkey unlock.chooseMasterkey.filePickerTitle=Seleziona il File Masterkey
## Success ## Success
unlock.success.message="%s" sbloccato con successo! La tua cassaforte è ora accessibile tramite il suo drive virtuale. unlock.success.message="%s" sbloccato correttamente! La tua cassaforte è ora accessibile tramite la sua unità virtuale.
unlock.success.rememberChoice=Ricorda la scelta, non mostrare ancora unlock.success.rememberChoice=Ricorda la scelta, non mostrarmelo più
unlock.success.revealBtn=Rivela Drive unlock.success.revealBtn=Rivela l'Unità
## Failure ## Failure
unlock.error.heading=Impossibile sbloccare la cassaforte unlock.error.heading=Impossibile sbloccare la cassaforte
### Invalid Mount Point ### Invalid Mount Point
unlock.error.invalidMountPoint.notExisting=Il punto di montaggio non è una directory vuota o non esiste: %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 Mount/cartella esiste già o la cartella superiore è mancante: %s unlock.error.invalidMountPoint.existing=Il punto di montaggio "%s" esiste già o la cartella madre è mancante.
# Lock # Lock
## Force ## Force
lock.forced.heading=Blocco normale fallito 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 lock.forced.confirmBtn=Forza Blocco
## Failure ## Failure
lock.fail.heading=Blocco cassaforte fallito. lock.fail.heading=Blocco della 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.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
migration.title=Aggiorna Cassaforte migration.title=Aggiorna la Cassaforte
## Start ## 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 migration.start.confirm=Sì, la mia cassaforte è completamente sincronizzata
## Run ## Run
migration.run.enterPassword=Immettere la password per "%s" migration.run.enterPassword=Inserisci la password per "%s"
migration.run.startMigrationBtn=Migra Cassaforte migration.run.startMigrationBtn=Migra la Cassaforte
migration.run.progressHint=Potrebbe richiedere un po' di tempo… migration.run.progressHint=Questo potrebbe richiedere un po' di tempo…
## Success ## Success
migration.success.nextStepsInstructions=Migrato "%s" con successo.\nOra puoi sbloccare la tua cassaforte. migration.success.nextStepsInstructions="%s" migrata con successo.\nPuoi ora sbloccare la tua cassaforte.
migration.success.unlockNow=Sblocca adesso migration.success.unlockNow=Sblocca Ora
## Missing file system capabilities ## Missing file system capabilities
migration.error.missingFileSystemCapabilities.title=File System non supportato migration.error.missingFileSystemCapabilities.title=File di Sistema Non Supportato
migration.error.missingFileSystemCapabilities.description=La migrazione non è stata avviata perché la cassaforte è situata su un file system inadeguato. 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 system non supporta nomi di file lunghi. 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 system non supporta percorsi lunghi. migration.error.missingFileSystemCapabilities.reason.LONG_PATHS=Il file di sistema non supporta i percorsi lunghi.
migration.error.missingFileSystemCapabilities.reason.READ_ACCESS=Il file system non consente di essere letto. migration.error.missingFileSystemCapabilities.reason.READ_ACCESS=Il file di sistema non consente di esser letto.
migration.error.missingFileSystemCapabilities.reason.WRITE_ACCESS=Il file system non consente di essere scritto. migration.error.missingFileSystemCapabilities.reason.WRITE_ACCESS=Il file di sistema non consente di esser scritto.
## Impossible ## Impossible
migration.impossible.heading=Impossibile migrare la cassaforte 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.reason=Impossibile migrare automaticamente la cassaforte perché la sua posizione d'archiviazione o punto d'accesso non sono compatibili.
migration.impossible.moreInfo=La cassaforte può ancora essere aperta con una versione precedente. Per istruzioni su come migrare manualmente una cassaforte, visita migration.impossible.moreInfo=La cassaforte è ancora apribile con una versione precedente. Per le istruzioni su come migrare manualmente una cassaforte, visita
# Health Check # Health Check
## Start ## Start
health.title=Controllo Salute di "%s" health.title=Controllo Salute di "%s"
health.intro.header=Controllo Salute 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.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.remarkSync=Assicurati che tutti i dispositivi siano completamente sincronizzati, questo risolve gran parte dei problemi.
health.intro.remarkFix=Non tutti i problemi possono essere corretti. health.intro.remarkFix=Non tutti i problemi sono risolvibili.
health.intro.remarkBackup=Se i dati sono danneggiati, solo un backup può aiutare. health.intro.remarkBackup=Se i dati sono corrotti, solo un backup può aiutare.
health.intro.affirmation=Ho letto e capito le informazioni sopra health.intro.affirmation=Ho letto e compreso le informazioni suddette
## Start Failure ## Start Failure
health.fail.header=Errore nel caricare la configurazione della cassaforte health.fail.header=Errore caricando la Configurazione della Cassaforte
health.fail.ioError=Si è verificato un errore durante l'accesso e la lettura del file di configurazione. health.fail.ioError=Si è verificato un errore accedendo e leggendo il file di configurazione.
health.fail.parseError=Si è verificato un errore durante l'analisi della configurazione della cassaforte. health.fail.parseError=Si è verificato un errore analizzando la configurazione della cassaforte.
health.fail.moreInfo=Ulteriori Informazioni health.fail.moreInfo=Altre Info
## Check Selection ## Check Selection
health.checkList.description=Seleziona i controlli nell'elenco a sinistra o utilizza i pulsanti in basso. health.checkList.description=Seleziona i controlli nell'elenco a sinistra o usa i seguenti pulsanti.
health.checkList.selectAllButton=Seleziona Tutti I Controlli health.checkList.selectAllButton=Seleziona Tutti i Controlli
health.checkList.deselectAllButton=Deseleziona Tutti I Controlli health.checkList.deselectAllButton=Deseleziona Tutti i Controlli
health.check.runBatchBtn=Esegui i Controlli selezionati health.check.runBatchBtn=Esegui i Controlli Selezionati
## Detail view ## 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.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.checkSkipped=Il controllo non è stato selezionato per l'esecuzione.
health.check.detail.checkFinished=Il controllo è terminato con successo. health.check.detail.checkFinished=Il controllo è terminato correttamente.
health.check.detail.checkFinishedAndFound=Il controllo ha terminato l'esecuzione. Si prega di rivedere i risultati. 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.checkFailed=Il controllo è terminato a causa di un errore.
health.check.detail.checkCancelled=Il controllo è stato annullato. health.check.detail.checkCancelled=Il controllo è stato annullato.
health.check.exportBtn=Esporta Rapporto health.check.exportBtn=Esporta il Rapporto
## Fix Application ## Fix Application
health.fix.fixBtn=Correggi health.fix.fixBtn=Correggi
health.fix.successTip=Correzione riuscita 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
preferences.title=Impostazioni preferences.title=Preferenze
## General ## General
preferences.general=Generali preferences.general=Generale
preferences.general.theme=Aspetto preferences.general.theme=Aspetto
preferences.general.theme.automatic=Automatico preferences.general.theme.automatic=Automatico
preferences.general.theme.light=Chiaro preferences.general.theme.light=Chiaro
preferences.general.theme.dark=Scuro preferences.general.theme.dark=Scuro
preferences.general.unlockThemes=Sblocca modalità scura preferences.general.unlockThemes=Sblocca la modalità scura
preferences.general.showMinimizeButton=Mostra pulsante riduci a icona preferences.general.showMinimizeButton=Mostra il pulsante minimizza
preferences.general.showTrayIcon=Mostra icona nel tray (richiede riavvio) preferences.general.showTrayIcon=Mostra l'icona della barra d'applicazioni (richiede il riavvio)
preferences.general.startHidden=Nascondi la finestra all'avvio di Cryptomator preferences.general.startHidden=Nascondi la finestra avviando Cryptomator
preferences.general.debugLogging=Abilita i registri di debug preferences.general.debugLogging=Abilita la registrazione di debug
preferences.general.debugDirectory=Mostra file log preferences.general.debugDirectory=Rivela i file di registro
preferences.general.autoStart=Avvia Cryptomator all'avvio del sistema preferences.general.autoStart=Avvia Cryptomator all'avvio del sistema
preferences.general.keychainBackend=Memorizza password con preferences.general.keychainBackend=Memorizza le password con
preferences.general.interfaceOrientation=Orientamento Interfaccia preferences.general.interfaceOrientation=Orientamento dell'Interfaccia
preferences.general.interfaceOrientation.ltr=Da Sinistra a Destra preferences.general.interfaceOrientation.ltr=Da Sinistra a Destra
preferences.general.interfaceOrientation.rtl=Da Destra a Sinistra preferences.general.interfaceOrientation.rtl=Da Destra a Sinistra
## Volume ## Volume
preferences.volume=Drive virtuale preferences.volume=Unità Virtuale
preferences.volume.type=Tipo volume preferences.volume.type=Tipo di Volume
preferences.volume.webdav.port=Porta WebDAV preferences.volume.webdav.port=Porta WebDAV
preferences.volume.webdav.scheme=Schema WebDAV preferences.volume.webdav.scheme=Schema WebDAV
## Updates ## Updates
preferences.updates=Aggiornamenti preferences.updates=Aggiornamenti
preferences.updates.currentVersion=Versione attuale %s preferences.updates.currentVersion=Versione Corrente: %s
preferences.updates.autoUpdateCheck=Controlla automaticamente la presenza di aggiornamenti preferences.updates.autoUpdateCheck=Cerca automaticamente gli aggiornamenti
preferences.updates.checkNowBtn=Controlla adesso preferences.updates.checkNowBtn=Controlla Ora
preferences.updates.updateAvailable=Disponibile aggiornamento alla versione %s. preferences.updates.updateAvailable=Aggiornamento alla versione %s disponibile.
## Contribution ## Contribution
preferences.contribute=Supportaci preferences.contribute=Supportaci
preferences.contribute.registeredFor=Certificato del supporto registrato per %s preferences.contribute.registeredFor=Certificato del sostenitore 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.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 già uno? Impara come puoi ottenerlo. preferences.contribute.getCertificate=Non ne hai ancora uno? Scopri come puoi ottenerlo.
preferences.contribute.promptText=Incolla qui il codice del certificato di supporter preferences.contribute.promptText=Incolla qui il codice del certificato da sostenitore
#<-- Add entries for donations and code/translation/documentation contribution --> #<-- Add entries for donations and code/translation/documentation contribution -->
## About ## About
preferences.about=Informazioni preferences.about=Info
# Vault Statistics # Vault Statistics
stats.title=Statistiche per %s stats.title=Statistiche per %s
stats.cacheHitRate=Tasso di Colpo della Cache stats.cacheHitRate=Frequenza di Raggiungimento della Cache
## Read ## Read
stats.read.throughput.idle=Lettura: inattivo stats.read.throughput.idle=Lettura: inattivo
stats.read.throughput.kibs=Lettura: %.2f kiB/s 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.kib=Dati letti: %.1f kiB
stats.read.total.data.mib=Dati letti: %.1f MiB stats.read.total.data.mib=Dati letti: %.1f MiB
stats.read.total.data.gib=Dati letti: %.1f GiB 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.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.decr.total.data.gib=Dati decrittografati: %.1f GiB
stats.read.accessCount=Totale lettura: %d stats.read.accessCount=Letture totali: %d
## Write ## Write
stats.write.throughput.idle=Scrivi: inattivo stats.write.throughput.idle=Scrittura: inattivo
stats.write.throughput.kibs=Scrittura: %.2f kiB/s stats.write.throughput.kibs=Scrittura: %.2f kiB/s
stats.write.throughput.mibs=Scrittura: %.2f MiB/s stats.write.throughput.mibs=Scrittura: %.2f MiB/s
stats.write.total.data.none=Dati scritti: - 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.kib=Dati crittografati: %.1f kiB
stats.encr.total.data.mib=Dati crittografati: %.1f MiB stats.encr.total.data.mib=Dati crittografati: %.1f MiB
stats.encr.total.data.gib=Dati crittografati: %.1f GiB stats.encr.total.data.gib=Dati crittografati: %.1f GiB
stats.write.accessCount=Totale scritture: %d stats.write.accessCount=Scritture totali: %d
# Main Window # Main Window
main.closeBtn.tooltip=Chiudi main.closeBtn.tooltip=Chiudi
main.minimizeBtn.tooltip=Minimizza main.minimizeBtn.tooltip=Minimizza
main.preferencesBtn.tooltip=Impostazioni main.preferencesBtn.tooltip=Preferenze
main.debugModeEnabled.tooltip=La modalità di debug è abilitata 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 ## Drag 'n' Drop
main.dropZone.dropVault=Aggiungi questa cassaforte 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 ## Vault List
main.vaultlist.emptyList.onboardingInstruction=Clicca qui per aggiungere una cassaforte main.vaultlist.emptyList.onboardingInstruction=Clicca qui per aggiungere una cassaforte
main.vaultlist.contextMenu.remove=Rimuovi… main.vaultlist.contextMenu.remove=Rimuovi…
main.vaultlist.contextMenu.lock=Blocca main.vaultlist.contextMenu.lock=Blocca
main.vaultlist.contextMenu.unlock=Sblocca… main.vaultlist.contextMenu.unlock=Sblocca…
main.vaultlist.contextMenu.unlockNow=Sblocca Ora main.vaultlist.contextMenu.unlockNow=Sblocca Ora
main.vaultlist.contextMenu.vaultoptions=Mostra Opzioni Cassaforte main.vaultlist.contextMenu.vaultoptions=Mostra le Opzioni della Cassaforte
main.vaultlist.contextMenu.reveal=Rivela Drive main.vaultlist.contextMenu.reveal=Rivela Unità
main.vaultlist.addVaultBtn=Aggiungi Cassaforte main.vaultlist.addVaultBtn=Aggiungi Cassaforte
## Vault Detail ## Vault Detail
### Welcome ### 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 ### Locked
main.vaultDetail.lockedStatus=BLOCCATO main.vaultDetail.lockedStatus=BLOCCATO
main.vaultDetail.unlockBtn=Sblocca… main.vaultDetail.unlockBtn=Sblocca…
main.vaultDetail.unlockNowBtn=Sblocca adesso main.vaultDetail.unlockNowBtn=Sblocca Ora
main.vaultDetail.optionsBtn=Opzioni Cassaforte main.vaultDetail.optionsBtn=Opzioni della Cassaforte
main.vaultDetail.passwordSavedInKeychain=Password salvata main.vaultDetail.passwordSavedInKeychain=Password salvata
### Unlocked ### Unlocked
main.vaultDetail.unlockedStatus=SBLOCCATO main.vaultDetail.unlockedStatus=SBLOCCATA
main.vaultDetail.accessLocation=I contenuti della tua cassaforte sono accessibili qui: 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.lockBtn=Blocca
main.vaultDetail.bytesPerSecondRead=Lettura: main.vaultDetail.bytesPerSecondRead=Lettura:
main.vaultDetail.bytesPerSecondWritten=Scrittura: main.vaultDetail.bytesPerSecondWritten=Scrittura:
main.vaultDetail.throughput.idle=inattivo main.vaultDetail.throughput.idle=inattivo
main.vaultDetail.throughput.kbps=%.1f kiB/s main.vaultDetail.throughput.kbps=%.1f kiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s main.vaultDetail.throughput.mbps=%.1f MiB/s
main.vaultDetail.stats=Statistiche Cassaforte main.vaultDetail.stats=Statistiche della Cassaforte
### Missing ### Missing
main.vaultDetail.missing.info=Cryptomator non ha potuto trovare una cassaforte in questo percorso. main.vaultDetail.missing.info=Cryptomator non è riuscito a trovare una cassaforte in questo percorso.
main.vaultDetail.missing.recheck=Ricontrollare main.vaultDetail.missing.recheck=Ricontrolla
main.vaultDetail.missing.remove=Rimuovi dalla Lista Cassaforte main.vaultDetail.missing.remove=Rimuovi dall'Elenco di Cassaforti
main.vaultDetail.missing.changeLocation=Cambia posizione della Cassaforte… main.vaultDetail.missing.changeLocation=Cambia la Posizione della Cassaforte…
### Needs Migration ### Needs Migration
main.vaultDetail.migrateButton=Aggiorna la cassaforte main.vaultDetail.migrateButton=Aggiorna la Cassaforte
main.vaultDetail.migratePrompt=Prima di potervi accedere la tua cassaforte deve essere aggiornata al nuovo formato main.vaultDetail.migratePrompt=La tua cassaforte dev'esser aggiornata a un nuovo formato, prima di potervi accedere
# Wrong File Alert # Wrong File Alert
wrongFileAlert.title=Come Criptare i File wrongFileAlert.title=Come Crittografare i File
wrongFileAlert.header.title=Hai provato a cifrare questi file? wrongFileAlert.header.title=Hai tentato di crittografare questi file?
wrongFileAlert.header.lead=A questo scopo, Cryptomator fornisce un volume nel file manager di sistema. wrongFileAlert.header.lead=Per questo scopo, Cryptomator fornisce un volume nel gestore dei tuoi file di sistema.
wrongFileAlert.instruction.0=Per cifrare file, segui questi passi: wrongFileAlert.instruction.0=Per crittografare i file, segui questi passi:
wrongFileAlert.instruction.1=1. Sblocca la tua cassaforte. 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.instruction.3=3. Aggiungi i tuoi file a questo volume.
wrongFileAlert.link=Per ulteriore assistenza, visita wrongFileAlert.link=Per ulteriore assistenza, visita
# Vault Options # Vault Options
## General ## General
vaultOptions.general=Generali vaultOptions.general=Generale
vaultOptions.general.vaultName=Nome Cassaforte vaultOptions.general.vaultName=Nome della Cassaforte
vaultOptions.general.autoLock.lockAfterTimePart1=Blocca quando inattivo per vaultOptions.general.autoLock.lockAfterTimePart1=Blocca quando inattivo per
vaultOptions.general.autoLock.lockAfterTimePart2=minuti vaultOptions.general.autoLock.lockAfterTimePart2=minuti
vaultOptions.general.unlockAfterStartup=Sblocca vault all'avvio di Cryptomator vaultOptions.general.unlockAfterStartup=Sblocca la cassaforte all'avvio di Cryptomator
vaultOptions.general.actionAfterUnlock=Dopo aver sbloccato con successo vaultOptions.general.actionAfterUnlock=Dopo uno sblocco riuscito
vaultOptions.general.actionAfterUnlock.ignore=Non fare nulla 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.actionAfterUnlock.ask=Chiedi
vaultOptions.general.startHealthCheckBtn=Avvia il Controllo della Salute vaultOptions.general.startHealthCheckBtn=Avvia il Controllo della Salute
## Mount ## Mount
vaultOptions.mount=Montaggio vaultOptions.mount=Montaggio
vaultOptions.mount.readonly=Sola lettura vaultOptions.mount.readonly=Sola Lettura
vaultOptions.mount.customMountFlags=Opzioni personalizzate vaultOptions.mount.customMountFlags=Flag di Montaggio Personalizzati
vaultOptions.mount.winDriveLetterOccupied=occupato vaultOptions.mount.winDriveLetterOccupied=occupato
vaultOptions.mount.mountPoint=Punto di mount vaultOptions.mount.mountPoint=Punto di Montaggio
vaultOptions.mount.mountPoint.auto=Scegli automaticamente una posizione adatta vaultOptions.mount.mountPoint.auto=Scegli automaticamente una posizione idonea
vaultOptions.mount.mountPoint.driveLetter=Usa la lettera del drive assegnata vaultOptions.mount.mountPoint.driveLetter=Usa la lettera del drive assegnata
vaultOptions.mount.mountPoint.custom=Percorso personalizzato vaultOptions.mount.mountPoint.custom=Percorso personalizzato
vaultOptions.mount.mountPoint.directoryPickerButton=Scegli… vaultOptions.mount.mountPoint.directoryPickerButton=Scegli…
@@ -13,6 +13,11 @@ generic.button.done=完了
generic.button.next=次へ generic.button.next=次へ
generic.button.print=印刷 generic.button.print=印刷
## Error ## Error
generic.error.title=エラー %s
generic.error.instruction=Cryptomator で予期できない問題が発生しました! 。このエラーの解決方法を検索することができ、まだ報告されていない場合は、報告を行うことができます。
generic.error.hyperlink.lookup=このエラーを検索する
generic.error.hyperlink.report=このエラーを報告する
generic.error.technicalDetails=詳細:
# Defaults # Defaults
defaults.vault.vaultName=金庫 defaults.vault.vaultName=金庫
@@ -30,7 +35,7 @@ traymenu.vault.reveal=表示
addvaultwizard.title=金庫を追加 addvaultwizard.title=金庫を追加
## Welcome ## Welcome
addvaultwizard.welcome.newButton=新しい金庫を作成 addvaultwizard.welcome.newButton=新しい金庫を作成
addvaultwizard.welcome.existingButton=既存の金庫を開く addvaultwizard.welcome.existingButton=すでにある金庫を開く
## New ## New
### Name ### Name
addvaultwizard.new.nameInstruction=金庫の名前を入力してください addvaultwizard.new.nameInstruction=金庫の名前を入力してください
@@ -277,7 +282,7 @@ main.vaultDetail.optionsBtn=金庫のオプション
main.vaultDetail.passwordSavedInKeychain=パスワードを保存しました main.vaultDetail.passwordSavedInKeychain=パスワードを保存しました
### Unlocked ### Unlocked
main.vaultDetail.unlockedStatus=解錠済み main.vaultDetail.unlockedStatus=解錠済み
main.vaultDetail.accessLocation=アクセス可能な金庫のコンテンツ: main.vaultDetail.accessLocation=金庫の内容はこちらからアクセスできます:
main.vaultDetail.revealBtn=ドライブを表示 main.vaultDetail.revealBtn=ドライブを表示
main.vaultDetail.lockBtn=施錠 main.vaultDetail.lockBtn=施錠
main.vaultDetail.bytesPerSecondRead=読み取り: main.vaultDetail.bytesPerSecondRead=読み取り:
@@ -13,6 +13,11 @@ generic.button.done=Concluído
generic.button.next=Próximo generic.button.next=Próximo
generic.button.print=Imprimir generic.button.print=Imprimir
## Error ## 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
defaults.vault.vaultName=Cofre defaults.vault.vaultName=Cofre
@@ -13,6 +13,11 @@ generic.button.done=Klar
generic.button.next=Nästa generic.button.next=Nästa
generic.button.print=Skriv ut generic.button.print=Skriv ut
## Error ## 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
defaults.vault.vaultName=Valv defaults.vault.vaultName=Valv
@@ -13,6 +13,11 @@ generic.button.done=Tamam
generic.button.next=Sonraki generic.button.next=Sonraki
generic.button.print=Yazdır generic.button.print=Yazdır
## Error ## 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
defaults.vault.vaultName=Kasa defaults.vault.vaultName=Kasa
+12 -12
View File
@@ -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-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-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) - 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) - 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 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/) - 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/) - 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/) - 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 :: 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) - Jetty :: Utilities (org.eclipse.jetty:jetty-util:10.0.6 - https://eclipse.org/jetty/jetty-util)
Eclipse Public License - v 1.0: Eclipse Public License - v 1.0:
- Logback Classic Module (ch.qos.logback:logback-classic:1.2.3 - http://logback.qos.ch/logback-classic) - 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.3 - http://logback.qos.ch/logback-core) - Logback Core Module (ch.qos.logback:logback-core:1.2.6 - http://logback.qos.ch/logback-core)
Eclipse Public License - v 2.0: 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) - 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: GNU Lesser General Public License:
- Logback Classic Module (ch.qos.logback:logback-classic:1.2.3 - http://logback.qos.ch/logback-classic) - 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.3 - http://logback.qos.ch/logback-core) - Logback Core Module (ch.qos.logback:logback-core:1.2.6 - http://logback.qos.ch/logback-core)
GPLv2: GPLv2:
- jnr-posix (com.github.jnr:jnr-posix:3.0.54 - http://nexus.sonatype.org/oss-repository-hosting.html/jnr-posix) - jnr-posix (com.github.jnr:jnr-posix:3.0.54 - http://nexus.sonatype.org/oss-repository-hosting.html/jnr-posix)
GPLv2+CE: GPLv2+CE:
- javafx-base (org.openjfx:javafx-base:16 - https://openjdk.java.net/projects/openjfx/javafx-base/) - javafx-base (org.openjfx:javafx-base:17.0.0.1 - https://openjdk.java.net/projects/openjfx/javafx-base/)
- javafx-controls (org.openjfx:javafx-controls:16 - https://openjdk.java.net/projects/openjfx/javafx-controls/) - javafx-controls (org.openjfx:javafx-controls:17.0.0.1 - https://openjdk.java.net/projects/openjfx/javafx-controls/)
- javafx-fxml (org.openjfx:javafx-fxml:16 - https://openjdk.java.net/projects/openjfx/javafx-fxml/) - javafx-fxml (org.openjfx:javafx-fxml:17.0.0.1 - https://openjdk.java.net/projects/openjfx/javafx-fxml/)
- javafx-graphics (org.openjfx:javafx-graphics:16 - https://openjdk.java.net/projects/openjfx/javafx-graphics/) - javafx-graphics (org.openjfx:javafx-graphics:17.0.0.1 - https://openjdk.java.net/projects/openjfx/javafx-graphics/)
LGPL 2.1: LGPL 2.1:
- jnr-posix (com.github.jnr:jnr-posix:3.0.54 - http://nexus.sonatype.org/oss-repository-hosting.html/jnr-posix) - 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: 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 (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) - Java Native Access Platform (net.java.dev.jna:jna-platform:5.9.0 - https://github.com/java-native-access/jna)
MIT License: 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-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) - 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) - 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: The BSD 2-Clause License:
- EasyBind (com.tobiasdiez:easybind:2.2 - https://github.com/tobiasdiez/EasyBind) - EasyBind (com.tobiasdiez:easybind:2.2 - https://github.com/tobiasdiez/EasyBind)
@@ -14,6 +14,11 @@ class MapKeychainAccess implements KeychainAccessProvider {
private final Map<String, char[]> map = new HashMap<>(); private final Map<String, char[]> map = new HashMap<>();
@Override
public String displayName() {
return getClass().getName();
}
@Override @Override
public void storePassphrase(String key, CharSequence passphrase) { public void storePassphrase(String key, CharSequence passphrase) {
char[] pw = new char[passphrase.length()]; char[] pw = new char[passphrase.length()];