mirror of
https://github.com/cryptomator/cryptomator.git
synced 2026-05-14 08:41:28 +00:00
disable password tab when masterkey.file is missing
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package org.cryptomator.ui.vaultoptions;
|
||||
|
||||
import dagger.Lazy;
|
||||
import org.cryptomator.common.keychain.KeychainManager;
|
||||
import org.cryptomator.common.recovery.RecoveryActionType;
|
||||
import org.cryptomator.common.vaults.Vault;
|
||||
@@ -9,28 +10,38 @@ import org.cryptomator.ui.forgetpassword.ForgetPasswordComponent;
|
||||
import org.cryptomator.ui.recoverykey.RecoveryKeyComponent;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javafx.application.Application;
|
||||
import javafx.beans.property.BooleanProperty;
|
||||
import javafx.beans.property.SimpleBooleanProperty;
|
||||
import javafx.beans.property.SimpleObjectProperty;
|
||||
import javafx.beans.value.ObservableValue;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.stage.Stage;
|
||||
import java.nio.file.Files;
|
||||
|
||||
import static org.cryptomator.common.Constants.MASTERKEY_FILENAME;
|
||||
|
||||
@VaultOptionsScoped
|
||||
public class MasterkeyOptionsController implements FxController {
|
||||
|
||||
private static final String DOCS_URL = "https://docs.cryptomator.org/desktop/"; //TODO: replace with correct docs link
|
||||
|
||||
private final Vault vault;
|
||||
private final Lazy<Application> application;
|
||||
private final Stage window;
|
||||
private final ChangePasswordComponent.Builder changePasswordWindow;
|
||||
private final RecoveryKeyComponent.Factory recoveryKeyWindow;
|
||||
private final ForgetPasswordComponent.Builder forgetPasswordWindow;
|
||||
private final KeychainManager keychain;
|
||||
private final ObservableValue<Boolean> passwordSaved;
|
||||
private final BooleanProperty masterkeyFileAvailable;
|
||||
|
||||
|
||||
@Inject
|
||||
MasterkeyOptionsController(@VaultOptionsWindow Vault vault, @VaultOptionsWindow Stage window, ChangePasswordComponent.Builder changePasswordWindow, RecoveryKeyComponent.Factory recoveryKeyWindow, ForgetPasswordComponent.Builder forgetPasswordWindow, KeychainManager keychain) {
|
||||
MasterkeyOptionsController(@VaultOptionsWindow Vault vault, @VaultOptionsWindow Stage window, ChangePasswordComponent.Builder changePasswordWindow, RecoveryKeyComponent.Factory recoveryKeyWindow, ForgetPasswordComponent.Builder forgetPasswordWindow, KeychainManager keychain, Lazy<Application> application) {
|
||||
this.vault = vault;
|
||||
this.window = window;
|
||||
this.application = application;
|
||||
this.changePasswordWindow = changePasswordWindow;
|
||||
this.recoveryKeyWindow = recoveryKeyWindow;
|
||||
this.forgetPasswordWindow = forgetPasswordWindow;
|
||||
@@ -40,6 +51,7 @@ public class MasterkeyOptionsController implements FxController {
|
||||
} else {
|
||||
this.passwordSaved = new SimpleBooleanProperty(false);
|
||||
}
|
||||
this.masterkeyFileAvailable = new SimpleBooleanProperty(Files.exists(vault.getPath().resolve(MASTERKEY_FILENAME)));
|
||||
}
|
||||
|
||||
@FXML
|
||||
@@ -63,6 +75,11 @@ public class MasterkeyOptionsController implements FxController {
|
||||
forgetPasswordWindow.vault(vault).owner(window).build().showForgetPassword();
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void openDocs() {
|
||||
application.get().getHostServices().showDocument(DOCS_URL);
|
||||
}
|
||||
|
||||
public ObservableValue<Boolean> passwordSavedProperty() {
|
||||
return passwordSaved;
|
||||
}
|
||||
@@ -70,4 +87,12 @@ public class MasterkeyOptionsController implements FxController {
|
||||
public boolean isPasswordSaved() {
|
||||
return passwordSaved.getValue();
|
||||
}
|
||||
|
||||
public BooleanProperty masterkeyFileAvailableProperty() {
|
||||
return masterkeyFileAvailable;
|
||||
}
|
||||
|
||||
public boolean isMasterkeyFileAvailable() {
|
||||
return masterkeyFileAvailable.get();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,9 +3,15 @@
|
||||
<?import org.cryptomator.ui.controls.FontAwesome5IconView?>
|
||||
<?import javafx.geometry.Insets?>
|
||||
<?import javafx.scene.control.Button?>
|
||||
<?import javafx.scene.control.Hyperlink?>
|
||||
<?import javafx.scene.control.Label?>
|
||||
<?import javafx.scene.control.Tooltip?>
|
||||
<?import javafx.scene.layout.HBox?>
|
||||
<?import javafx.scene.layout.Region?>
|
||||
<?import javafx.scene.layout.StackPane?>
|
||||
<?import javafx.scene.layout.VBox?>
|
||||
<?import javafx.scene.shape.Circle?>
|
||||
<?import javafx.scene.Group?>
|
||||
<VBox xmlns:fx="http://javafx.com/fxml"
|
||||
xmlns="http://javafx.com/javafx"
|
||||
fx:controller="org.cryptomator.ui.vaultoptions.MasterkeyOptionsController"
|
||||
@@ -15,7 +21,29 @@
|
||||
<Insets topRightBottomLeft="12"/>
|
||||
</padding>
|
||||
<children>
|
||||
<VBox spacing="6" alignment="CENTER">
|
||||
<HBox spacing="12" visible="${!controller.masterkeyFileAvailable}" managed="${!controller.masterkeyFileAvailable}">
|
||||
<padding>
|
||||
<Insets bottom="12"/>
|
||||
</padding>
|
||||
<Group>
|
||||
<StackPane>
|
||||
<Circle styleClass="glyph-icon-primary" radius="18"/>
|
||||
<FontAwesome5IconView styleClass="glyph-icon-white" glyph="INFO" glyphSize="18"/>
|
||||
</StackPane>
|
||||
</Group>
|
||||
<HBox spacing="6" HBox.hgrow="ALWAYS">
|
||||
<Label text="%vaultOptions.masterkey.missingMasterkeyFile" wrapText="true" HBox.hgrow="ALWAYS"/>
|
||||
<Hyperlink contentDisplay="GRAPHIC_ONLY" onAction="#openDocs" accessibleText="%vaultOptions.masterkey.docsTooltip">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="QUESTION_CIRCLE" styleClass="glyph-icon-muted"/>
|
||||
</graphic>
|
||||
<tooltip>
|
||||
<Tooltip text="%vaultOptions.masterkey.docsTooltip" showDelay="100ms"/>
|
||||
</tooltip>
|
||||
</Hyperlink>
|
||||
</HBox>
|
||||
</HBox>
|
||||
<VBox spacing="6" alignment="CENTER" disable="${!controller.masterkeyFileAvailable}">
|
||||
<Button text="%vaultOptions.masterkey.changePasswordBtn" onAction="#changePassword" contentDisplay="LEFT" maxWidth="Infinity">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="KEY"/>
|
||||
@@ -29,8 +57,8 @@
|
||||
</Button>
|
||||
</VBox>
|
||||
<Region VBox.vgrow="ALWAYS"/>
|
||||
<Label maxWidth="-Infinity" text="%vaultOptions.masterkey.recoveryKeyExplanation" wrapText="true"/>
|
||||
<VBox spacing="6" alignment="CENTER">
|
||||
<Label maxWidth="-Infinity" text="%vaultOptions.masterkey.recoveryKeyExplanation" wrapText="true" disable="${!controller.masterkeyFileAvailable}"/>
|
||||
<VBox spacing="6" alignment="CENTER" disable="${!controller.masterkeyFileAvailable}">
|
||||
<Button text="%vaultOptions.masterkey.showRecoveryKeyBtn" onAction="#showRecoveryKey" contentDisplay="LEFT" maxWidth="Infinity">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="EYE"/>
|
||||
|
||||
@@ -522,6 +522,8 @@ vaultOptions.masterkey.forgetSavedPasswordBtn=Forget Saved Password
|
||||
vaultOptions.masterkey.recoveryKeyExplanation=A recovery key is your only means to restore access to a vault if you lose your password.
|
||||
vaultOptions.masterkey.showRecoveryKeyBtn=Display Recovery Key
|
||||
vaultOptions.masterkey.recoverPasswordBtn=Reset Password
|
||||
vaultOptions.masterkey.missingMasterkeyFile=These options are only available if the masterkey file is present in the vault directory.
|
||||
vaultOptions.masterkey.docsTooltip=Open the documentation to learn more about the missing masterkeyfile.
|
||||
## Hub
|
||||
vaultOptions.hub=Recovery
|
||||
vaultOptions.hub.convertInfo=You can use the recovery key to convert this Hub vault to a password-based vault in an emergency.
|
||||
|
||||
Reference in New Issue
Block a user