From 872406fc4c2cfcbeccfc45191fee97dbbf1a3c68 Mon Sep 17 00:00:00 2001 From: crschnick Date: Tue, 7 Mar 2023 22:36:02 +0000 Subject: [PATCH] Local askpass fixes --- .../app/exchange/AskpassExchangeImpl.java | 44 +++++++++++++++++++ .../xpipe/app/prefs/ExternalTerminalType.java | 2 +- app/src/main/java/module-info.java | 1 + .../resources/lang/translations_en.properties | 1 + .../beacon/exchange/AskpassExchange.java | 32 ++++++++++++++ beacon/src/main/java/module-info.java | 1 + .../io/xpipe/core/util/XPipeInstallation.java | 10 +++++ 7 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/io/xpipe/app/exchange/AskpassExchangeImpl.java create mode 100644 beacon/src/main/java/io/xpipe/beacon/exchange/AskpassExchange.java diff --git a/app/src/main/java/io/xpipe/app/exchange/AskpassExchangeImpl.java b/app/src/main/java/io/xpipe/app/exchange/AskpassExchangeImpl.java new file mode 100644 index 000000000..5582ae7db --- /dev/null +++ b/app/src/main/java/io/xpipe/app/exchange/AskpassExchangeImpl.java @@ -0,0 +1,44 @@ +package io.xpipe.app.exchange; + +import io.xpipe.app.core.AppI18n; +import io.xpipe.app.core.AppWindowHelper; +import io.xpipe.app.core.mode.OperationMode; +import io.xpipe.app.fxcomps.impl.SecretFieldComp; +import io.xpipe.beacon.BeaconHandler; +import io.xpipe.beacon.exchange.AskpassExchange; +import io.xpipe.core.util.SecretValue; +import javafx.beans.property.SimpleObjectProperty; +import javafx.scene.control.Alert; + +public class AskpassExchangeImpl extends AskpassExchange + implements MessageExchangeImpl { + + @Override + public Response handleRequest(BeaconHandler handler, Request msg) throws Exception { + OperationMode.switchTo(OperationMode.GUI); + +// SecretValue set = AppCache.get(msg.getId(), SecretValue.class, () -> null); +// if (set != null) { +// return Response.builder().value(set).build(); +// } + + var prop = + new SimpleObjectProperty(); + var r = AppWindowHelper.showBlockingAlert(alert -> { + alert.setTitle(AppI18n.get("askpassAlertTitle")); + alert.setHeaderText(msg.getPrompt()); + alert.setAlertType(Alert.AlertType.CONFIRMATION); + + var text = new SecretFieldComp(prop).createRegion(); + text.setStyle("-fx-border-width: 1px"); + alert.getDialogPane().setContent(text); + }) + .filter(b -> b.getButtonData().isDefaultButton() && prop.getValue() != null) + .map(t -> { + //AppCache.update(msg.getId(), prop.getValue()); + return prop.getValue(); + }) + .orElse(null); + return Response.builder().value(r != null ? r.getSecretValue() : null).build(); + } +} diff --git a/app/src/main/java/io/xpipe/app/prefs/ExternalTerminalType.java b/app/src/main/java/io/xpipe/app/prefs/ExternalTerminalType.java index d2897dc68..0d511df89 100644 --- a/app/src/main/java/io/xpipe/app/prefs/ExternalTerminalType.java +++ b/app/src/main/java/io/xpipe/app/prefs/ExternalTerminalType.java @@ -71,7 +71,7 @@ public interface ExternalTerminalType extends PrefsChoiceValue { @Override protected String toCommand(String name, String command) { - return "--new-tab -e bash -c " + command; + return "--new-tab -e " + command; } @Override diff --git a/app/src/main/java/module-info.java b/app/src/main/java/module-info.java index 0e20024c2..11c2638c7 100644 --- a/app/src/main/java/module-info.java +++ b/app/src/main/java/module-info.java @@ -164,6 +164,7 @@ open module io.xpipe.app { RemoveEntryExchangeImpl, RenameCollectionExchangeImpl, RenameEntryExchangeImpl, + AskpassExchangeImpl, SourceProviderListExchangeImpl, QueryStoreExchangeImpl, SelectExchangeImpl, diff --git a/app/src/main/resources/io/xpipe/app/resources/lang/translations_en.properties b/app/src/main/resources/io/xpipe/app/resources/lang/translations_en.properties index ee83c6854..f1ec06dee 100644 --- a/app/src/main/resources/io/xpipe/app/resources/lang/translations_en.properties +++ b/app/src/main/resources/io/xpipe/app/resources/lang/translations_en.properties @@ -5,6 +5,7 @@ lf=LF (Linux) none=None common=Common other=Other +askpassAlertTitle=Askpass nullPointer=Null Pointer mustNotBeEmpty=$NAME$ must not be empty null=$VALUE$ must be not null diff --git a/beacon/src/main/java/io/xpipe/beacon/exchange/AskpassExchange.java b/beacon/src/main/java/io/xpipe/beacon/exchange/AskpassExchange.java new file mode 100644 index 000000000..f12cb087a --- /dev/null +++ b/beacon/src/main/java/io/xpipe/beacon/exchange/AskpassExchange.java @@ -0,0 +1,32 @@ +package io.xpipe.beacon.exchange; + +import io.xpipe.beacon.RequestMessage; +import io.xpipe.beacon.ResponseMessage; +import lombok.Builder; +import lombok.NonNull; +import lombok.Value; +import lombok.extern.jackson.Jacksonized; + +public class AskpassExchange implements MessageExchange { + + @Override + public String getId() { + return "askpass"; + } + + @Jacksonized + @Builder + @Value + public static class Request implements RequestMessage { + @NonNull + String id; + String prompt; + } + + @Jacksonized + @Builder + @Value + public static class Response implements ResponseMessage { + String value; + } +} diff --git a/beacon/src/main/java/module-info.java b/beacon/src/main/java/module-info.java index fc090dc23..da6c0c4b3 100644 --- a/beacon/src/main/java/module-info.java +++ b/beacon/src/main/java/module-info.java @@ -68,6 +68,7 @@ module io.xpipe.beacon { WritePreparationExchange, ProxyReadConnectionExchange, WriteExecuteExchange, + AskpassExchange, SelectExchange, ReadExchange, QueryTextDataExchange, diff --git a/core/src/main/java/io/xpipe/core/util/XPipeInstallation.java b/core/src/main/java/io/xpipe/core/util/XPipeInstallation.java index 55558bcce..632ce2a57 100644 --- a/core/src/main/java/io/xpipe/core/util/XPipeInstallation.java +++ b/core/src/main/java/io/xpipe/core/util/XPipeInstallation.java @@ -269,4 +269,14 @@ public class XPipeInstallation { return FileNames.join("Content", "MacOS", "xpiped"); } } + + public static String getRelativeCliExecutablePath(OsType type) { + if (type.equals(OsType.WINDOWS)) { + return FileNames.join("cli", "xpipe.exe"); + } else if (type.equals(OsType.LINUX)) { + return FileNames.join("cli", "bin", "xpipe"); + } else { + return FileNames.join("Content", "MacOS", "xpipe"); + } + } }