diff --git a/main/ui/src/main/java/org/cryptomator/ui/health/CheckDetailController.java b/main/ui/src/main/java/org/cryptomator/ui/health/CheckDetailController.java index 60bb0522f..a7212681a 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/health/CheckDetailController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/health/CheckDetailController.java @@ -2,7 +2,6 @@ package org.cryptomator.ui.health; import com.tobiasdiez.easybind.EasyBind; import com.tobiasdiez.easybind.optional.OptionalBinding; -import org.cryptomator.cryptofs.health.api.DiagnosticResult; import org.cryptomator.ui.common.FxController; import javax.inject.Inject; @@ -19,15 +18,15 @@ import javafx.scene.control.TableView; public class CheckDetailController implements FxController { - private final Binding> results; + private final Binding> results; private final OptionalBinding taskState; private final Binding taskName; private final Binding taskDescription; private final BooleanBinding producingResults; - public TableView resultsTableView; - public TableColumn resultDescriptionColumn; - public TableColumn resultSeverityColumn; + public TableView resultsTableView; + public TableColumn resultDescriptionColumn; + public TableColumn resultSeverityColumn; @Inject public CheckDetailController(ObjectProperty selectedTask) { @@ -48,8 +47,8 @@ public class CheckDetailController implements FxController { @FXML public void initialize() { resultsTableView.itemsProperty().bind(results); - resultDescriptionColumn.setCellValueFactory(cellFeatures -> new SimpleStringProperty(cellFeatures.getValue().toString())); - resultSeverityColumn.setCellValueFactory(cellFeatures -> new SimpleStringProperty(cellFeatures.getValue().getServerity().name())); + resultDescriptionColumn.setCellValueFactory(cellFeatures -> new SimpleStringProperty(cellFeatures.getValue().getDescription())); + resultSeverityColumn.setCellValueFactory(cellFeatures -> new SimpleStringProperty(cellFeatures.getValue().getSeverity().name())); } /* Getter/Setter */ diff --git a/main/ui/src/main/java/org/cryptomator/ui/health/DiagnosticResultAction.java b/main/ui/src/main/java/org/cryptomator/ui/health/DiagnosticResultAction.java new file mode 100644 index 000000000..057acbb13 --- /dev/null +++ b/main/ui/src/main/java/org/cryptomator/ui/health/DiagnosticResultAction.java @@ -0,0 +1,47 @@ +package org.cryptomator.ui.health; + +import org.cryptomator.cryptofs.VaultConfig; +import org.cryptomator.cryptofs.health.api.DiagnosticResult; +import org.cryptomator.cryptolib.api.Masterkey; + +import javafx.scene.control.Alert; +import java.nio.file.Path; +import java.security.SecureRandom; + +class DiagnosticResultAction implements Runnable { + + private final DiagnosticResult result; + private final Path vaultPath; + private final VaultConfig vaultConfig; + private final Masterkey masterkey; + private final SecureRandom csprng; + + DiagnosticResultAction(DiagnosticResult result, Path vaultPath, VaultConfig vaultConfig, Masterkey masterkey, SecureRandom csprng) { + this.result = result; + this.vaultPath = vaultPath; + this.vaultConfig = vaultConfig; + this.masterkey = masterkey; + this.csprng = csprng; + } + + public void run() { + try (var masterkeyClone = masterkey.clone(); // + var cryptor = vaultConfig.getCipherCombo().getCryptorProvider(csprng).withKey(masterkeyClone)) { + result.fix(vaultPath, vaultConfig, masterkeyClone, cryptor); + } catch (Exception e) { + e.printStackTrace(); + Alert alert = new Alert(Alert.AlertType.ERROR, e.getMessage()); + alert.showAndWait(); + //TODO: real error/not supported handling + } + } + + public DiagnosticResult.Severity getSeverity() { + return result.getServerity(); //TODO: fix spelling with updated cryptofs release + } + + public String getDescription() { + return result.toString(); + } + +} diff --git a/main/ui/src/main/java/org/cryptomator/ui/health/HealthCheckTask.java b/main/ui/src/main/java/org/cryptomator/ui/health/HealthCheckTask.java index 7636ab8d9..b7bbc321e 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/health/HealthCheckTask.java +++ b/main/ui/src/main/java/org/cryptomator/ui/health/HealthCheckTask.java @@ -25,7 +25,7 @@ class HealthCheckTask extends Task { private final Masterkey masterkey; private final SecureRandom csprng; private final HealthCheck check; - private final ObservableList results; + private final ObservableList results; public HealthCheckTask(Path vaultPath, VaultConfig vaultConfig, Masterkey masterkey, SecureRandom csprng, HealthCheck check) { this.vaultPath = Objects.requireNonNull(vaultPath); @@ -58,7 +58,7 @@ class HealthCheckTask extends Task { throw new RuntimeException(e); } } - Platform.runLater(() -> results.add(result)); + Platform.runLater(() -> results.add(new DiagnosticResultAction(result,vaultPath,vaultConfig, masterkey,csprng))); //FIXME: there can be a lotta results, each with a reference to the master key -> differentiate with severity! }); } return null; @@ -76,7 +76,7 @@ class HealthCheckTask extends Task { /* Getter */ - public ObservableList results() { + public ObservableList results() { return results; } diff --git a/main/ui/src/main/java/org/cryptomator/ui/health/ReportWriter.java b/main/ui/src/main/java/org/cryptomator/ui/health/ReportWriter.java index 4e03500be..ac571d18e 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/health/ReportWriter.java +++ b/main/ui/src/main/java/org/cryptomator/ui/health/ReportWriter.java @@ -67,7 +67,7 @@ public class ReportWriter { case SUCCEEDED -> { writer.write("STATUS: SUCCESS\nRESULTS:\n"); for (var result : task.results()) { - writer.write(REPORT_CHECK_RESULT.formatted(result.getServerity(), result)); + writer.write(REPORT_CHECK_RESULT.formatted(result.getSeverity(), result)); } } case CANCELLED -> writer.write("STATUS: CANCELED\n");