From 27a7df84022c546c1e3b95ceec7a54553b0236da Mon Sep 17 00:00:00 2001 From: crschnick Date: Fri, 14 Jun 2024 19:14:34 +0000 Subject: [PATCH] More rework --- app/build.gradle | 4 +-- .../xpipe/app/comp/store/StoreIntroComp.java | 9 +++-- dist/build.gradle | 2 +- dist/changelogs/10.0.md | 31 ++++++++++++----- .../base/service/AbstractServiceStore.java | 1 + .../ext/base/service/ServiceLicenseCheck.java | 34 +++++++++++++++++++ lang/app/strings/translations_en.properties | 4 +-- 7 files changed, 68 insertions(+), 17 deletions(-) create mode 100644 ext/base/src/main/java/io/xpipe/ext/base/service/ServiceLicenseCheck.java diff --git a/app/build.gradle b/app/build.gradle index d85aaacb8..b7788035e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -50,12 +50,12 @@ dependencies { api files("$rootDir/gradle/gradle_scripts/markdowngenerator-1.3.1.1.jar") api files("$rootDir/gradle/gradle_scripts/vernacular-1.16.jar") - api 'info.picocli:picocli:4.7.5' + api 'info.picocli:picocli:4.7.6' api ('org.kohsuke:github-api:1.321') { exclude group: 'org.apache.commons', module: 'commons-lang3' } api 'org.apache.commons:commons-lang3:3.14.0' - api 'io.sentry:sentry:7.8.0' + api 'io.sentry:sentry:7.10.0' api 'commons-io:commons-io:2.16.1' api group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: "2.17.1" api group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310', version: "2.17.1" diff --git a/app/src/main/java/io/xpipe/app/comp/store/StoreIntroComp.java b/app/src/main/java/io/xpipe/app/comp/store/StoreIntroComp.java index a58ba24c7..63ba318fb 100644 --- a/app/src/main/java/io/xpipe/app/comp/store/StoreIntroComp.java +++ b/app/src/main/java/io/xpipe/app/comp/store/StoreIntroComp.java @@ -44,7 +44,7 @@ public class StoreIntroComp extends SimpleComp { text.setSpacing(5); text.setAlignment(Pos.CENTER_LEFT); var hbox = new HBox(img, text); - hbox.setSpacing(35); + hbox.setSpacing(55); hbox.setAlignment(Pos.CENTER); var v = new VBox(hbox, scanPane); @@ -68,7 +68,7 @@ public class StoreIntroComp extends SimpleComp { var importDesc = new Label(); importDesc.textProperty().bind(AppI18n.observable("storeIntroImportDescription")); importDesc.setWrapText(true); - importDesc.setMaxWidth(550); + importDesc.setMaxWidth(470); var importButton = new Button(null, new FontIcon("mdi2g-git")); importButton.textProperty().bind(AppI18n.observable("importConnections")); @@ -76,7 +76,10 @@ public class StoreIntroComp extends SimpleComp { var importPane = new StackPane(importButton); importPane.setAlignment(Pos.CENTER); - var img = new Region(); + var fi = new FontIcon("mdi2g-git"); + fi.setIconSize(80); + var img = new StackPane(fi); + img.setPrefWidth(100); img.setPrefHeight(150); var text = new VBox(title, importDesc); text.setSpacing(5); diff --git a/dist/build.gradle b/dist/build.gradle index cb12cc203..7f5f09b9d 100644 --- a/dist/build.gradle +++ b/dist/build.gradle @@ -2,7 +2,7 @@ plugins { id 'org.beryx.jlink' version '3.0.1' id "org.asciidoctor.jvm.convert" version "4.0.2" - id 'org.jreleaser' version '1.11.0' + id 'org.jreleaser' version '1.12.0' id("com.netflix.nebula.ospackage") version "11.9.1" id 'org.gradle.crypto.checksum' version '1.4.0' id 'signing' diff --git a/dist/changelogs/10.0.md b/dist/changelogs/10.0.md index bb9c6e349..711fda1b4 100644 --- a/dist/changelogs/10.0.md +++ b/dist/changelogs/10.0.md @@ -11,7 +11,7 @@ Any kind of passwords and other secrets are automatically provided by XPipe when There will be more functionality added to the API in the future, for now this initial implementation is open for feedback. -## Service integration (Professional feature) +## Service integration Many systems run a variety of different services such as web services and others. There is now support to detect, forward, and open the services. @@ -19,7 +19,9 @@ For example, if you are running a web service on a remote container, you can aut These service tunnels can be toggled at any time. The port forwarding supports specifying a custom local target port and also works for connections with multiple intermediate systems through chained tunnels. For containers, services are automatically detected via their exposed mapped ports. -For other systems, you can manually add services via their port +For other systems, you can manually add services via their port. + +You can use an unlimited amount of local services and one active tunneled service in the community edition. ## Script rework @@ -30,26 +32,35 @@ The scripting system has been reworked. There have been several issues with it b If you have existing scripts, they will have to be manually adjusted by setting their execution types. +## Proxmox improvements + +You can now automatically open the Proxmox dashboard website through the new service integration. This will also work with the service tunneling feature for remote servers. + +You can now open VNC sessions to Proxmox VMs. + +The Proxmox professional license requirement has been reworked to support one non-enterprise PVE node in the community edition. + ## Docker improvements -The docker integration has been updated to support docker contexts. The UI has also been streamlined to make common actions more easily accessible. +The docker integration has been updated to support docker contexts. You can use the default context in the community edition, essentially being the same as before as XPipe previously only used the default context. Support for using multiple contexts is included in the professional edition. -There's also now support for Windows docker containers running on HyperV. +Note that old docker container connections will be removed as they are incompatible with the new version. Any other subconnections like shell environments in docker containers will persist, although they might get invalidated and will show up on the bottom of the connection list. -Note that old docker container connections will be removed as they are incompatible with the new version. +There's now support for Windows docker containers running on HyperV. ## Better connection organization The toggle to show only running connections will now no longer actually remove the connections internally and instead just not display them. This will reduce git vault updates and is faster in general. -You can now order connections relative to other sibling connections. This ordering will also apply when changing the global order in the top left. +You can now order connections relative to other sibling connections. This ordering will also persist when changing the global order in the top left. + +The UI has also been streamlined to make common actions and toggles more easily accessible. ## Other -- Support VMs for VNC tunneling -- The Linux installers now contain application icons from multiple sizes it should increase the icon display quality -- The Linux builds now list socat as a dependency such that the kitty terminal integration will work without issues +- Several more actions have been added for podman containers +- Support VMs for tunneling - Searching for connections has been improved to show children as well - The welcome screen will now also contain the option to straight up jump to the synchronization settings - Add support for foot terminal @@ -57,3 +68,5 @@ You can now order connections relative to other sibling connections. This orderi - Fix kubernetes not elevating correctly for non-default contexts - Fix ohmyzsh update notification freezing shell - Fix file browser icons being broken for links +- The Linux installers now contain application icons from multiple sizes which should increase the icon display quality +- The Linux builds now list socat as a dependency such that the kitty terminal integration will work without issues diff --git a/ext/base/src/main/java/io/xpipe/ext/base/service/AbstractServiceStore.java b/ext/base/src/main/java/io/xpipe/ext/base/service/AbstractServiceStore.java index d8aa58252..721dba402 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/service/AbstractServiceStore.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/service/AbstractServiceStore.java @@ -30,6 +30,7 @@ public abstract class AbstractServiceStore extends JacksonizedValue implements S @Override public NetworkTunnelSession newSession() throws Exception { + ServiceLicenseCheck.check(); var l = localPort != null ? localPort : HostHelper.findRandomOpenPortOnAllLocalInterfaces(); return getHost().getStore().sessionChain(l, remotePort); } diff --git a/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceLicenseCheck.java b/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceLicenseCheck.java new file mode 100644 index 000000000..25ce42c7f --- /dev/null +++ b/ext/base/src/main/java/io/xpipe/ext/base/service/ServiceLicenseCheck.java @@ -0,0 +1,34 @@ +package io.xpipe.ext.base.service; + +import io.xpipe.app.util.LicenseConnectionLimit; +import io.xpipe.app.util.LicenseProvider; +import io.xpipe.app.util.LicensedFeature; +import io.xpipe.core.store.DataStore; + +public class ServiceLicenseCheck { + + public static LicensedFeature getFeature() { + return LicenseProvider.get().getFeature("services"); + } + + public static void check() { + if (getFeature().isSupported()) { + return; + } + + var limit = getConnectionLimit(); + limit.checkLimit(); + } + + + public static LicenseConnectionLimit getConnectionLimit() { + // We check before starting a new service + return new LicenseConnectionLimit(0, getFeature()) { + + @Override + protected boolean matches(DataStore store) { + return store instanceof AbstractServiceStore abstractServiceStore && abstractServiceStore.requiresTunnel() && abstractServiceStore.isSessionRunning(); + } + }; + } +} diff --git a/lang/app/strings/translations_en.properties b/lang/app/strings/translations_en.properties index 7770046de..df834481e 100644 --- a/lang/app/strings/translations_en.properties +++ b/lang/app/strings/translations_en.properties @@ -42,7 +42,7 @@ selectShellTypeDescription=Select the Type of the Shell Connection name=Name storeIntroTitle=Connection Hub storeIntroDescription=Here you can manage all your local and remote shell connections in one place. To start off, you can quickly detect available connections automatically and choose which ones to add. -detectConnections=Search for connections +detectConnections=Search for connections ... configuration=Configuration dragAndDropFilesHere=Or just drag and drop a file here confirmDsCreationAbortTitle=Confirm abort @@ -471,7 +471,7 @@ disableApiAuthentication=Disable API authentication disableApiAuthenticationDescription=Disables all required authentication methods so that any unauthenticated request will be handled.\n\nAuthentication should only be disabled for development purposes.\n\nRequires a restart to apply. api=API storeIntroImportDescription=Already using XPipe on another system? Synchronize your existing connections across multiple systems through a remote git repository. You can also sync later at any time if it is not set up yet. -importConnections=Sync connections +importConnections=Sync connections ... importConnectionsTitle=Import Connections showAllChildren=Show all children httpApi=HTTP API