mirror of
https://github.com/xpipe-io/xpipe.git
synced 2024-11-25 17:10:27 +00:00
More beacon fixes
This commit is contained in:
parent
2810dc4372
commit
33577ca7c1
16 changed files with 86 additions and 79 deletions
|
@ -1,16 +1,14 @@
|
||||||
package io.xpipe.app.beacon;
|
package io.xpipe.app.beacon;
|
||||||
|
|
||||||
|
import com.sun.net.httpserver.HttpExchange;
|
||||||
|
import com.sun.net.httpserver.HttpServer;
|
||||||
import io.xpipe.app.core.AppResources;
|
import io.xpipe.app.core.AppResources;
|
||||||
import io.xpipe.app.issue.ErrorEvent;
|
import io.xpipe.app.issue.ErrorEvent;
|
||||||
import io.xpipe.app.issue.TrackEvent;
|
import io.xpipe.app.issue.TrackEvent;
|
||||||
import io.xpipe.app.prefs.AppPrefs;
|
|
||||||
import io.xpipe.app.util.MarkdownHelper;
|
import io.xpipe.app.util.MarkdownHelper;
|
||||||
import io.xpipe.beacon.BeaconConfig;
|
import io.xpipe.beacon.BeaconConfig;
|
||||||
import io.xpipe.beacon.BeaconInterface;
|
import io.xpipe.beacon.BeaconInterface;
|
||||||
import io.xpipe.core.util.XPipeInstallation;
|
import io.xpipe.core.util.XPipeInstallation;
|
||||||
|
|
||||||
import com.sun.net.httpserver.HttpExchange;
|
|
||||||
import com.sun.net.httpserver.HttpServer;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -52,7 +50,7 @@ public class AppBeaconServer {
|
||||||
port = BeaconConfig.getUsedPort();
|
port = BeaconConfig.getUsedPort();
|
||||||
propertyPort = true;
|
propertyPort = true;
|
||||||
} else {
|
} else {
|
||||||
port = AppPrefs.get().httpServerPort().getValue();
|
port = XPipeInstallation.getDefaultBeaconPort();
|
||||||
propertyPort = false;
|
propertyPort = false;
|
||||||
}
|
}
|
||||||
INSTANCE = new AppBeaconServer(port, propertyPort);
|
INSTANCE = new AppBeaconServer(port, propertyPort);
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
package io.xpipe.app.beacon;
|
package io.xpipe.app.beacon;
|
||||||
|
|
||||||
|
import io.xpipe.app.core.mode.OperationMode;
|
||||||
import io.xpipe.app.issue.ErrorEvent;
|
import io.xpipe.app.issue.ErrorEvent;
|
||||||
import io.xpipe.app.issue.TrackEvent;
|
import io.xpipe.app.issue.TrackEvent;
|
||||||
import io.xpipe.app.prefs.AppPrefs;
|
import io.xpipe.app.prefs.AppPrefs;
|
||||||
|
import io.xpipe.app.util.ThreadHelper;
|
||||||
import io.xpipe.beacon.*;
|
import io.xpipe.beacon.*;
|
||||||
import io.xpipe.core.util.JacksonMapper;
|
import io.xpipe.core.util.JacksonMapper;
|
||||||
|
|
||||||
|
@ -25,6 +27,16 @@ public class BeaconRequestHandler<T> implements HttpHandler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handle(HttpExchange exchange) {
|
public void handle(HttpExchange exchange) {
|
||||||
|
if (OperationMode.isInShutdown()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (beaconInterface.requiresCompletedStartup()) {
|
||||||
|
while (OperationMode.isInStartup()) {
|
||||||
|
ThreadHelper.sleep(100);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!AppPrefs.get().disableApiAuthentication().get() && beaconInterface.requiresAuthentication()) {
|
if (!AppPrefs.get().disableApiAuthentication().get() && beaconInterface.requiresAuthentication()) {
|
||||||
var auth = exchange.getRequestHeaders().getFirst("Authorization");
|
var auth = exchange.getRequestHeaders().getFirst("Authorization");
|
||||||
if (auth == null) {
|
if (auth == null) {
|
||||||
|
|
|
@ -1,17 +1,17 @@
|
||||||
package io.xpipe.app.beacon.impl;
|
package io.xpipe.app.beacon.impl;
|
||||||
|
|
||||||
|
import com.sun.net.httpserver.HttpExchange;
|
||||||
import io.xpipe.app.util.AskpassAlert;
|
import io.xpipe.app.util.AskpassAlert;
|
||||||
import io.xpipe.app.util.SecretManager;
|
import io.xpipe.app.util.SecretManager;
|
||||||
import io.xpipe.beacon.BeaconClientException;
|
|
||||||
import io.xpipe.beacon.BeaconServerException;
|
|
||||||
import io.xpipe.beacon.api.AskpassExchange;
|
import io.xpipe.beacon.api.AskpassExchange;
|
||||||
|
|
||||||
import com.sun.net.httpserver.HttpExchange;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
public class AskpassExchangeImpl extends AskpassExchange {
|
public class AskpassExchangeImpl extends AskpassExchange {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean requiresCompletedStartup() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object handle(HttpExchange exchange, Request msg) {
|
public Object handle(HttpExchange exchange, Request msg) {
|
||||||
if (msg.getRequest() == null) {
|
if (msg.getRequest() == null) {
|
||||||
|
|
|
@ -1,19 +1,13 @@
|
||||||
package io.xpipe.app.beacon.impl;
|
package io.xpipe.app.beacon.impl;
|
||||||
|
|
||||||
import io.xpipe.app.core.mode.OperationMode;
|
|
||||||
import io.xpipe.beacon.BeaconClientException;
|
|
||||||
import io.xpipe.beacon.BeaconServerException;
|
|
||||||
import io.xpipe.beacon.api.DaemonFocusExchange;
|
|
||||||
|
|
||||||
import com.sun.net.httpserver.HttpExchange;
|
import com.sun.net.httpserver.HttpExchange;
|
||||||
|
import io.xpipe.app.core.mode.OperationMode;
|
||||||
import java.io.IOException;
|
import io.xpipe.beacon.api.DaemonFocusExchange;
|
||||||
|
|
||||||
public class DaemonFocusExchangeImpl extends DaemonFocusExchange {
|
public class DaemonFocusExchangeImpl extends DaemonFocusExchange {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object handle(HttpExchange exchange, Request msg) {
|
public Object handle(HttpExchange exchange, Request msg) {
|
||||||
|
|
||||||
OperationMode.switchUp(OperationMode.map(msg.getMode()));
|
OperationMode.switchUp(OperationMode.map(msg.getMode()));
|
||||||
return Response.builder().build();
|
return Response.builder().build();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,17 +1,14 @@
|
||||||
package io.xpipe.app.beacon.impl;
|
package io.xpipe.app.beacon.impl;
|
||||||
|
|
||||||
|
import com.sun.net.httpserver.HttpExchange;
|
||||||
import io.xpipe.app.core.mode.OperationMode;
|
import io.xpipe.app.core.mode.OperationMode;
|
||||||
import io.xpipe.app.launcher.LauncherInput;
|
import io.xpipe.app.launcher.LauncherInput;
|
||||||
import io.xpipe.app.util.PlatformState;
|
import io.xpipe.app.util.PlatformState;
|
||||||
import io.xpipe.beacon.BeaconClientException;
|
|
||||||
import io.xpipe.beacon.BeaconServerException;
|
import io.xpipe.beacon.BeaconServerException;
|
||||||
import io.xpipe.beacon.api.DaemonOpenExchange;
|
import io.xpipe.beacon.api.DaemonOpenExchange;
|
||||||
|
|
||||||
import com.sun.net.httpserver.HttpExchange;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
public class DaemonOpenExchangeImpl extends DaemonOpenExchange {
|
public class DaemonOpenExchangeImpl extends DaemonOpenExchange {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object handle(HttpExchange exchange, Request msg)
|
public Object handle(HttpExchange exchange, Request msg)
|
||||||
throws BeaconServerException {
|
throws BeaconServerException {
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
package io.xpipe.app.beacon.impl;
|
package io.xpipe.app.beacon.impl;
|
||||||
|
|
||||||
|
import com.sun.net.httpserver.HttpExchange;
|
||||||
import io.xpipe.app.core.mode.OperationMode;
|
import io.xpipe.app.core.mode.OperationMode;
|
||||||
import io.xpipe.beacon.BeaconClientException;
|
|
||||||
import io.xpipe.beacon.BeaconServerException;
|
|
||||||
import io.xpipe.beacon.api.DaemonStatusExchange;
|
import io.xpipe.beacon.api.DaemonStatusExchange;
|
||||||
|
|
||||||
import com.sun.net.httpserver.HttpExchange;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
public class DaemonStatusExchangeImpl extends DaemonStatusExchange {
|
public class DaemonStatusExchangeImpl extends DaemonStatusExchange {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean requiresCompletedStartup() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object handle(HttpExchange exchange, Request body) {
|
public Object handle(HttpExchange exchange, Request body) {
|
||||||
String mode;
|
String mode;
|
||||||
|
|
|
@ -1,17 +1,17 @@
|
||||||
package io.xpipe.app.beacon.impl;
|
package io.xpipe.app.beacon.impl;
|
||||||
|
|
||||||
|
import com.sun.net.httpserver.HttpExchange;
|
||||||
import io.xpipe.app.core.mode.OperationMode;
|
import io.xpipe.app.core.mode.OperationMode;
|
||||||
import io.xpipe.app.util.ThreadHelper;
|
import io.xpipe.app.util.ThreadHelper;
|
||||||
import io.xpipe.beacon.BeaconClientException;
|
|
||||||
import io.xpipe.beacon.BeaconServerException;
|
|
||||||
import io.xpipe.beacon.api.DaemonStopExchange;
|
import io.xpipe.beacon.api.DaemonStopExchange;
|
||||||
|
|
||||||
import com.sun.net.httpserver.HttpExchange;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
public class DaemonStopExchangeImpl extends DaemonStopExchange {
|
public class DaemonStopExchangeImpl extends DaemonStopExchange {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean requiresCompletedStartup() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object handle(HttpExchange exchange, Request msg) {
|
public Object handle(HttpExchange exchange, Request msg) {
|
||||||
ThreadHelper.runAsync(() -> {
|
ThreadHelper.runAsync(() -> {
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
package io.xpipe.app.beacon.impl;
|
package io.xpipe.app.beacon.impl;
|
||||||
|
|
||||||
|
import com.sun.net.httpserver.HttpExchange;
|
||||||
import io.xpipe.app.core.AppProperties;
|
import io.xpipe.app.core.AppProperties;
|
||||||
import io.xpipe.beacon.BeaconClientException;
|
|
||||||
import io.xpipe.beacon.BeaconServerException;
|
|
||||||
import io.xpipe.beacon.api.DaemonVersionExchange;
|
import io.xpipe.beacon.api.DaemonVersionExchange;
|
||||||
|
|
||||||
import com.sun.net.httpserver.HttpExchange;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
public class DaemonVersionExchangeImpl extends DaemonVersionExchange {
|
public class DaemonVersionExchangeImpl extends DaemonVersionExchange {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean requiresCompletedStartup() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object handle(HttpExchange exchange, Request msg) {
|
public Object handle(HttpExchange exchange, Request msg) {
|
||||||
var jvmVersion = System.getProperty("java.vm.vendor") + " "
|
var jvmVersion = System.getProperty("java.vm.vendor") + " "
|
||||||
|
|
|
@ -1,20 +1,22 @@
|
||||||
package io.xpipe.app.beacon.impl;
|
package io.xpipe.app.beacon.impl;
|
||||||
|
|
||||||
|
import com.sun.net.httpserver.HttpExchange;
|
||||||
import io.xpipe.app.beacon.AppBeaconServer;
|
import io.xpipe.app.beacon.AppBeaconServer;
|
||||||
import io.xpipe.app.beacon.BeaconSession;
|
import io.xpipe.app.beacon.BeaconSession;
|
||||||
import io.xpipe.app.prefs.AppPrefs;
|
import io.xpipe.app.prefs.AppPrefs;
|
||||||
import io.xpipe.beacon.BeaconAuthMethod;
|
import io.xpipe.beacon.BeaconAuthMethod;
|
||||||
import io.xpipe.beacon.BeaconClientException;
|
import io.xpipe.beacon.BeaconClientException;
|
||||||
import io.xpipe.beacon.BeaconServerException;
|
|
||||||
import io.xpipe.beacon.api.HandshakeExchange;
|
import io.xpipe.beacon.api.HandshakeExchange;
|
||||||
|
|
||||||
import com.sun.net.httpserver.HttpExchange;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class HandshakeExchangeImpl extends HandshakeExchange {
|
public class HandshakeExchangeImpl extends HandshakeExchange {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean requiresCompletedStartup() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object handle(HttpExchange exchange, Request body)
|
public Object handle(HttpExchange exchange, Request body)
|
||||||
throws BeaconClientException {
|
throws BeaconClientException {
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package io.xpipe.app.comp.base;
|
package io.xpipe.app.comp.base;
|
||||||
|
|
||||||
|
import io.xpipe.app.beacon.AppBeaconServer;
|
||||||
import io.xpipe.app.core.AppFont;
|
import io.xpipe.app.core.AppFont;
|
||||||
import io.xpipe.app.core.AppLayoutModel;
|
import io.xpipe.app.core.AppLayoutModel;
|
||||||
import io.xpipe.app.fxcomps.Comp;
|
import io.xpipe.app.fxcomps.Comp;
|
||||||
|
@ -9,11 +10,9 @@ import io.xpipe.app.fxcomps.augment.Augment;
|
||||||
import io.xpipe.app.fxcomps.impl.IconButtonComp;
|
import io.xpipe.app.fxcomps.impl.IconButtonComp;
|
||||||
import io.xpipe.app.fxcomps.impl.TooltipAugment;
|
import io.xpipe.app.fxcomps.impl.TooltipAugment;
|
||||||
import io.xpipe.app.fxcomps.util.PlatformThread;
|
import io.xpipe.app.fxcomps.util.PlatformThread;
|
||||||
import io.xpipe.app.prefs.AppPrefs;
|
|
||||||
import io.xpipe.app.update.UpdateAvailableAlert;
|
import io.xpipe.app.update.UpdateAvailableAlert;
|
||||||
import io.xpipe.app.update.XPipeDistributionType;
|
import io.xpipe.app.update.XPipeDistributionType;
|
||||||
import io.xpipe.app.util.Hyperlinks;
|
import io.xpipe.app.util.Hyperlinks;
|
||||||
|
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.beans.binding.Bindings;
|
import javafx.beans.binding.Bindings;
|
||||||
import javafx.beans.property.Property;
|
import javafx.beans.property.Property;
|
||||||
|
@ -162,7 +161,7 @@ public class SideMenuBarComp extends Comp<CompStructure<VBox>> {
|
||||||
var b = new IconButtonComp(
|
var b = new IconButtonComp(
|
||||||
"mdi2c-code-json",
|
"mdi2c-code-json",
|
||||||
() -> Hyperlinks.open("http://localhost:"
|
() -> Hyperlinks.open("http://localhost:"
|
||||||
+ AppPrefs.get().httpServerPort().getValue()))
|
+ AppBeaconServer.get().getPort()))
|
||||||
.tooltipKey("api")
|
.tooltipKey("api")
|
||||||
.apply(simpleBorders)
|
.apply(simpleBorders)
|
||||||
.accessibleTextKey("api");
|
.accessibleTextKey("api");
|
||||||
|
|
|
@ -126,8 +126,8 @@ public abstract class OperationMode {
|
||||||
var usedArgs = parseProperties(args);
|
var usedArgs = parseProperties(args);
|
||||||
setup(args);
|
setup(args);
|
||||||
LauncherCommand.runLauncher(usedArgs);
|
LauncherCommand.runLauncher(usedArgs);
|
||||||
inStartup = false;
|
|
||||||
AppDesktopIntegration.setupDesktopIntegrations();
|
AppDesktopIntegration.setupDesktopIntegrations();
|
||||||
|
inStartup = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void switchToAsync(OperationMode newMode) {
|
public static void switchToAsync(OperationMode newMode) {
|
||||||
|
|
|
@ -14,15 +14,12 @@ import io.xpipe.app.terminal.ExternalTerminalType;
|
||||||
import io.xpipe.app.util.PasswordLockSecretValue;
|
import io.xpipe.app.util.PasswordLockSecretValue;
|
||||||
import io.xpipe.core.util.InPlaceSecretValue;
|
import io.xpipe.core.util.InPlaceSecretValue;
|
||||||
import io.xpipe.core.util.ModuleHelper;
|
import io.xpipe.core.util.ModuleHelper;
|
||||||
import io.xpipe.core.util.XPipeInstallation;
|
|
||||||
|
|
||||||
import javafx.beans.binding.Bindings;
|
import javafx.beans.binding.Bindings;
|
||||||
import javafx.beans.property.*;
|
import javafx.beans.property.*;
|
||||||
import javafx.beans.value.ObservableBooleanValue;
|
import javafx.beans.value.ObservableBooleanValue;
|
||||||
import javafx.beans.value.ObservableDoubleValue;
|
import javafx.beans.value.ObservableDoubleValue;
|
||||||
import javafx.beans.value.ObservableStringValue;
|
import javafx.beans.value.ObservableStringValue;
|
||||||
import javafx.beans.value.ObservableValue;
|
import javafx.beans.value.ObservableValue;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Value;
|
import lombok.Value;
|
||||||
|
|
||||||
|
@ -122,17 +119,11 @@ public class AppPrefs {
|
||||||
private final StringProperty lockCrypt =
|
private final StringProperty lockCrypt =
|
||||||
mapVaultSpecific(new SimpleStringProperty(), "workspaceLock", String.class);
|
mapVaultSpecific(new SimpleStringProperty(), "workspaceLock", String.class);
|
||||||
|
|
||||||
final Property<Integer> httpServerPort = map(
|
|
||||||
new SimpleObjectProperty<>(XPipeInstallation.getDefaultBeaconPort()), "httpServerPort", Integer.class);
|
|
||||||
final StringProperty apiKey =
|
final StringProperty apiKey =
|
||||||
mapVaultSpecific(new SimpleStringProperty(UUID.randomUUID().toString()), "apiKey", String.class);
|
mapVaultSpecific(new SimpleStringProperty(UUID.randomUUID().toString()), "apiKey", String.class);
|
||||||
final BooleanProperty disableApiAuthentication =
|
final BooleanProperty disableApiAuthentication =
|
||||||
map(new SimpleBooleanProperty(false), "disableApiAuthentication", Boolean.class);
|
map(new SimpleBooleanProperty(false), "disableApiAuthentication", Boolean.class);
|
||||||
|
|
||||||
public ObservableValue<Integer> httpServerPort() {
|
|
||||||
return httpServerPort;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ObservableStringValue apiKey() {
|
public ObservableStringValue apiKey() {
|
||||||
return apiKey;
|
return apiKey;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package io.xpipe.app.prefs;
|
package io.xpipe.app.prefs;
|
||||||
|
|
||||||
import io.xpipe.app.beacon.AppBeaconServer;
|
|
||||||
import io.xpipe.app.fxcomps.Comp;
|
import io.xpipe.app.fxcomps.Comp;
|
||||||
import io.xpipe.app.util.OptionsBuilder;
|
import io.xpipe.app.util.OptionsBuilder;
|
||||||
|
|
||||||
|
@ -17,9 +16,6 @@ public class HttpApiCategory extends AppPrefsCategory {
|
||||||
return new OptionsBuilder()
|
return new OptionsBuilder()
|
||||||
.addTitle("httpServerConfiguration")
|
.addTitle("httpServerConfiguration")
|
||||||
.sub(new OptionsBuilder()
|
.sub(new OptionsBuilder()
|
||||||
.nameAndDescription("httpServerPort")
|
|
||||||
.addInteger(prefs.httpServerPort)
|
|
||||||
.disable(AppBeaconServer.get().isPropertyPort())
|
|
||||||
.nameAndDescription("apiKey")
|
.nameAndDescription("apiKey")
|
||||||
.addString(prefs.apiKey)
|
.addString(prefs.apiKey)
|
||||||
.nameAndDescription("disableApiAuthentication")
|
.nameAndDescription("disableApiAuthentication")
|
||||||
|
|
|
@ -1,11 +1,9 @@
|
||||||
package io.xpipe.beacon;
|
package io.xpipe.beacon;
|
||||||
|
|
||||||
import io.xpipe.core.util.ModuleLayerLoader;
|
|
||||||
|
|
||||||
import com.sun.net.httpserver.HttpExchange;
|
import com.sun.net.httpserver.HttpExchange;
|
||||||
|
import io.xpipe.core.util.ModuleLayerLoader;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.ServiceLoader;
|
import java.util.ServiceLoader;
|
||||||
|
@ -63,6 +61,10 @@ public abstract class BeaconInterface<T> {
|
||||||
return (Class<T>) Class.forName(name);
|
return (Class<T>) Class.forName(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean requiresCompletedStartup() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean requiresAuthentication() {
|
public boolean requiresAuthentication() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,5 @@
|
||||||
package io.xpipe.core.util;
|
package io.xpipe.core.util;
|
||||||
|
|
||||||
import io.xpipe.core.dialog.BaseQueryElement;
|
|
||||||
import io.xpipe.core.dialog.BusyElement;
|
|
||||||
import io.xpipe.core.dialog.ChoiceElement;
|
|
||||||
import io.xpipe.core.dialog.HeaderElement;
|
|
||||||
import io.xpipe.core.process.OsType;
|
|
||||||
import io.xpipe.core.process.ShellDialect;
|
|
||||||
import io.xpipe.core.process.ShellDialects;
|
|
||||||
import io.xpipe.core.store.LocalStore;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
|
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
|
||||||
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
|
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
|
||||||
import com.fasterxml.jackson.core.JsonGenerator;
|
import com.fasterxml.jackson.core.JsonGenerator;
|
||||||
|
@ -18,11 +9,21 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||||
import com.fasterxml.jackson.databind.jsontype.NamedType;
|
import com.fasterxml.jackson.databind.jsontype.NamedType;
|
||||||
import com.fasterxml.jackson.databind.module.SimpleModule;
|
import com.fasterxml.jackson.databind.module.SimpleModule;
|
||||||
import com.fasterxml.jackson.databind.type.ArrayType;
|
import com.fasterxml.jackson.databind.type.ArrayType;
|
||||||
|
import io.xpipe.core.dialog.BaseQueryElement;
|
||||||
|
import io.xpipe.core.dialog.BusyElement;
|
||||||
|
import io.xpipe.core.dialog.ChoiceElement;
|
||||||
|
import io.xpipe.core.dialog.HeaderElement;
|
||||||
|
import io.xpipe.core.process.OsType;
|
||||||
|
import io.xpipe.core.process.ShellDialect;
|
||||||
|
import io.xpipe.core.process.ShellDialects;
|
||||||
|
import io.xpipe.core.store.LocalStore;
|
||||||
|
import io.xpipe.core.store.StorePath;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.lang.reflect.WildcardType;
|
import java.lang.reflect.WildcardType;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
import java.util.List;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
public class CoreJacksonModule extends SimpleModule {
|
public class CoreJacksonModule extends SimpleModule {
|
||||||
|
@ -68,6 +69,25 @@ public class CoreJacksonModule extends SimpleModule {
|
||||||
context.addDeserializers(_deserializers);
|
context.addDeserializers(_deserializers);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class StorePathSerializer extends JsonSerializer<StorePath> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void serialize(StorePath value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
|
||||||
|
var ar = value.getNames().toArray(String[]::new);
|
||||||
|
jgen.writeArray(ar, 0, ar.length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class StorePathDeserializer extends JsonDeserializer<StorePath> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StorePath deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
|
||||||
|
JavaType javaType = JacksonMapper.getDefault().getTypeFactory().constructCollectionLikeType(List.class, String.class);
|
||||||
|
List<String> list = JacksonMapper.getDefault().readValue(p, javaType);
|
||||||
|
return new StorePath(list);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static class CharsetSerializer extends JsonSerializer<Charset> {
|
public static class CharsetSerializer extends JsonSerializer<Charset> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -461,10 +461,6 @@ stickToTop=Keep on top
|
||||||
orderAheadOf=Order ahead of ...
|
orderAheadOf=Order ahead of ...
|
||||||
httpServer=HTTP server
|
httpServer=HTTP server
|
||||||
httpServerConfiguration=HTTP server configuration
|
httpServerConfiguration=HTTP server configuration
|
||||||
#context: networking
|
|
||||||
httpServerPort=Port
|
|
||||||
#context: networking
|
|
||||||
httpServerPortDescription=The port on which the HTTP server will listen on.\n\nNote that if you change this, any other applications that interact with the server need to be configured to use the new port as well.\n\nRequires a restart to apply.
|
|
||||||
apiKey=API key
|
apiKey=API key
|
||||||
apiKeyDescription=The API key to authenticate XPipe daemon API requests. For more information on how to authenticate, see the general API documentation.\n\nRequires a restart to apply.
|
apiKeyDescription=The API key to authenticate XPipe daemon API requests. For more information on how to authenticate, see the general API documentation.\n\nRequires a restart to apply.
|
||||||
disableApiAuthentication=Disable API authentication
|
disableApiAuthentication=Disable API authentication
|
||||||
|
|
Loading…
Reference in a new issue