Various fixes

This commit is contained in:
crschnick 2024-06-15 10:41:14 +00:00
parent 4426eb2424
commit 5ce9538633
39 changed files with 99 additions and 49 deletions

View file

@ -24,6 +24,9 @@ headingLevel: 2
<h1 id="xpipe-api-documentation">XPipe API Documentation v10.0</h1> <h1 id="xpipe-api-documentation">XPipe API Documentation v10.0</h1>
The XPipe API provides programmatic access to XPipes features. The XPipe API provides programmatic access to XPipes features.
You can get started by either using this page as an API reference or alternatively import the OpenAPI definition file into your API client of choice:
<a href="/openapi.yaml" style="font-size: 20px">OpenAPI .yaml specification</a>
The XPipe application will start up an HTTP server that can be used to send requests. The XPipe application will start up an HTTP server that can be used to send requests.
You can change the port of it in the settings menu. You can change the port of it in the settings menu.
@ -36,12 +39,12 @@ You get the command exit code and output as a response, allowing you to adapt yo
Any kind of passwords and other secrets are automatically provided by XPipe when establishing a shell connection. Any kind of passwords and other secrets are automatically provided by XPipe when establishing a shell connection.
If a required password is not stored and is set to be dynamically prompted, the running XPipe application will ask you to enter any required passwords. If a required password is not stored and is set to be dynamically prompted, the running XPipe application will ask you to enter any required passwords.
You can quickly get started by either using this page as an API reference or alternatively import the [OpenAPI definition file](/openapi.yaml) into your API client of choice.
See the authentication handshake below on how to authenticate prior to sending requests. See the authentication handshake below on how to authenticate prior to sending requests.
For development you can also skip the authentication step by disabling it in the settings menu.
Base URLs: Base URLs:
* <a href="http://localhost:21721">http://localhost:21721</a> * <a href="http://localhost:21723">http://localhost:21723</a>
Table of contents: Table of contents:
[TOC] [TOC]
@ -128,7 +131,7 @@ const headers = {
'Accept':'application/json' 'Accept':'application/json'
}; };
fetch('http://localhost:21721/handshake', fetch('http://localhost:21723/handshake',
{ {
method: 'POST', method: 'POST',
body: inputBody, body: inputBody,
@ -161,14 +164,14 @@ data = """
} }
} }
""" """
r = requests.post('http://localhost:21721/handshake', headers = headers, data = data) r = requests.post('http://localhost:21723/handshake', headers = headers, data = data)
print(r.json()) print(r.json())
``` ```
```java ```java
var uri = URI.create("http://localhost:21721/handshake"); var uri = URI.create("http://localhost:21723/handshake");
var client = HttpClient.newHttpClient(); var client = HttpClient.newHttpClient();
var request = HttpRequest var request = HttpRequest
.newBuilder() .newBuilder()
@ -210,7 +213,7 @@ func main() {
} }
data := bytes.NewBuffer([]byte{jsonReq}) data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "http://localhost:21721/handshake", data) req, err := http.NewRequest("POST", "http://localhost:21723/handshake", data)
req.Header = headers req.Header = headers
client := &http.Client{} client := &http.Client{}
@ -222,7 +225,7 @@ func main() {
```shell ```shell
# You can also use wget # You can also use wget
curl -X POST http://localhost:21721/handshake \ curl -X POST http://localhost:21723/handshake \
-H 'Content-Type: application/json' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json' \
--data ' --data '
{ {
@ -334,7 +337,7 @@ const headers = {
'Authorization':'Bearer {access-token}' 'Authorization':'Bearer {access-token}'
}; };
fetch('http://localhost:21721/connection/query', fetch('http://localhost:21723/connection/query',
{ {
method: 'POST', method: 'POST',
body: inputBody, body: inputBody,
@ -363,14 +366,14 @@ data = """
"typeFilter": "*" "typeFilter": "*"
} }
""" """
r = requests.post('http://localhost:21721/connection/query', headers = headers, data = data) r = requests.post('http://localhost:21723/connection/query', headers = headers, data = data)
print(r.json()) print(r.json())
``` ```
```java ```java
var uri = URI.create("http://localhost:21721/connection/query"); var uri = URI.create("http://localhost:21723/connection/query");
var client = HttpClient.newHttpClient(); var client = HttpClient.newHttpClient();
var request = HttpRequest var request = HttpRequest
.newBuilder() .newBuilder()
@ -409,7 +412,7 @@ func main() {
} }
data := bytes.NewBuffer([]byte{jsonReq}) data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "http://localhost:21721/connection/query", data) req, err := http.NewRequest("POST", "http://localhost:21723/connection/query", data)
req.Header = headers req.Header = headers
client := &http.Client{} client := &http.Client{}
@ -421,7 +424,7 @@ func main() {
```shell ```shell
# You can also use wget # You can also use wget
curl -X POST http://localhost:21721/connection/query \ curl -X POST http://localhost:21723/connection/query \
-H 'Content-Type: application/json' \ -H 'Accept: application/json' \ -H 'Authorization: Bearer {access-token}' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json' \ -H 'Authorization: Bearer {access-token}' \
--data ' --data '
{ {
@ -489,7 +492,7 @@ const headers = {
'Authorization':'Bearer {access-token}' 'Authorization':'Bearer {access-token}'
}; };
fetch('http://localhost:21721/shell/start', fetch('http://localhost:21723/shell/start',
{ {
method: 'POST', method: 'POST',
body: inputBody, body: inputBody,
@ -515,14 +518,14 @@ data = """
"uuid": "f0ec68aa-63f5-405c-b178-9a4454556d6b" "uuid": "f0ec68aa-63f5-405c-b178-9a4454556d6b"
} }
""" """
r = requests.post('http://localhost:21721/shell/start', headers = headers, data = data) r = requests.post('http://localhost:21723/shell/start', headers = headers, data = data)
print(r.json()) print(r.json())
``` ```
```java ```java
var uri = URI.create("http://localhost:21721/shell/start"); var uri = URI.create("http://localhost:21723/shell/start");
var client = HttpClient.newHttpClient(); var client = HttpClient.newHttpClient();
var request = HttpRequest var request = HttpRequest
.newBuilder() .newBuilder()
@ -557,7 +560,7 @@ func main() {
} }
data := bytes.NewBuffer([]byte{jsonReq}) data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "http://localhost:21721/shell/start", data) req, err := http.NewRequest("POST", "http://localhost:21723/shell/start", data)
req.Header = headers req.Header = headers
client := &http.Client{} client := &http.Client{}
@ -569,7 +572,7 @@ func main() {
```shell ```shell
# You can also use wget # You can also use wget
curl -X POST http://localhost:21721/shell/start \ curl -X POST http://localhost:21723/shell/start \
-H 'Content-Type: application/json' \ -H 'Authorization: Bearer {access-token}' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer {access-token}' \
--data ' --data '
{ {
@ -635,7 +638,7 @@ const headers = {
'Authorization':'Bearer {access-token}' 'Authorization':'Bearer {access-token}'
}; };
fetch('http://localhost:21721/shell/stop', fetch('http://localhost:21723/shell/stop',
{ {
method: 'POST', method: 'POST',
body: inputBody, body: inputBody,
@ -661,14 +664,14 @@ data = """
"uuid": "f0ec68aa-63f5-405c-b178-9a4454556d6b" "uuid": "f0ec68aa-63f5-405c-b178-9a4454556d6b"
} }
""" """
r = requests.post('http://localhost:21721/shell/stop', headers = headers, data = data) r = requests.post('http://localhost:21723/shell/stop', headers = headers, data = data)
print(r.json()) print(r.json())
``` ```
```java ```java
var uri = URI.create("http://localhost:21721/shell/stop"); var uri = URI.create("http://localhost:21723/shell/stop");
var client = HttpClient.newHttpClient(); var client = HttpClient.newHttpClient();
var request = HttpRequest var request = HttpRequest
.newBuilder() .newBuilder()
@ -703,7 +706,7 @@ func main() {
} }
data := bytes.NewBuffer([]byte{jsonReq}) data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "http://localhost:21721/shell/stop", data) req, err := http.NewRequest("POST", "http://localhost:21723/shell/stop", data)
req.Header = headers req.Header = headers
client := &http.Client{} client := &http.Client{}
@ -715,7 +718,7 @@ func main() {
```shell ```shell
# You can also use wget # You can also use wget
curl -X POST http://localhost:21721/shell/stop \ curl -X POST http://localhost:21723/shell/stop \
-H 'Content-Type: application/json' \ -H 'Authorization: Bearer {access-token}' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer {access-token}' \
--data ' --data '
{ {
@ -805,7 +808,7 @@ const headers = {
'Authorization':'Bearer {access-token}' 'Authorization':'Bearer {access-token}'
}; };
fetch('http://localhost:21721/shell/exec', fetch('http://localhost:21723/shell/exec',
{ {
method: 'POST', method: 'POST',
body: inputBody, body: inputBody,
@ -833,14 +836,14 @@ data = """
"command": "echo $USER" "command": "echo $USER"
} }
""" """
r = requests.post('http://localhost:21721/shell/exec', headers = headers, data = data) r = requests.post('http://localhost:21723/shell/exec', headers = headers, data = data)
print(r.json()) print(r.json())
``` ```
```java ```java
var uri = URI.create("http://localhost:21721/shell/exec"); var uri = URI.create("http://localhost:21723/shell/exec");
var client = HttpClient.newHttpClient(); var client = HttpClient.newHttpClient();
var request = HttpRequest var request = HttpRequest
.newBuilder() .newBuilder()
@ -878,7 +881,7 @@ func main() {
} }
data := bytes.NewBuffer([]byte{jsonReq}) data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "http://localhost:21721/shell/exec", data) req, err := http.NewRequest("POST", "http://localhost:21723/shell/exec", data)
req.Header = headers req.Header = headers
client := &http.Client{} client := &http.Client{}
@ -890,7 +893,7 @@ func main() {
```shell ```shell
# You can also use wget # You can also use wget
curl -X POST http://localhost:21721/shell/exec \ curl -X POST http://localhost:21723/shell/exec \
-H 'Content-Type: application/json' \ -H 'Accept: application/json' \ -H 'Authorization: Bearer {access-token}' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json' \ -H 'Authorization: Bearer {access-token}' \
--data ' --data '
{ {

View file

@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
import io.xpipe.beacon.api.HandshakeExchange; import io.xpipe.beacon.api.HandshakeExchange;
import io.xpipe.core.util.JacksonMapper; import io.xpipe.core.util.JacksonMapper;
import io.xpipe.core.util.XPipeInstallation; import io.xpipe.core.util.XPipeInstallation;
import lombok.SneakyThrows;
import java.io.IOException; import java.io.IOException;
import java.net.URI; import java.net.URI;
@ -80,13 +81,30 @@ public class BeaconClient {
try { try {
var reader = JacksonMapper.getDefault().readerFor(prov.getResponseClass()); var reader = JacksonMapper.getDefault().readerFor(prov.getResponseClass());
var v = (RES) reader.readValue(response.body()); var emptyResponseClass = prov.getResponseClass().getDeclaredFields().length == 0;
var body = response.body();
if (emptyResponseClass && body.isBlank()) {
return createDefaultResponse(prov);
}
var v = (RES) reader.readValue(body);
return v; return v;
} catch (IOException ex) { } catch (IOException ex) {
throw new BeaconConnectorException("Couldn't parse response", ex); throw new BeaconConnectorException("Couldn't parse response", ex);
} }
} }
@SneakyThrows
@SuppressWarnings("unchecked")
private <REQ> REQ createDefaultResponse(BeaconInterface<?> beaconInterface) {
var c = beaconInterface.getResponseClass().getDeclaredMethod("builder");
c.setAccessible(true);
var b = c.invoke(null);
var m = b.getClass().getDeclaredMethod("build");
m.setAccessible(true);
return (REQ) beaconInterface.getResponseClass().cast(m.invoke(b));
}
public <REQ, RES> RES performRequest(REQ req) throws BeaconConnectorException, BeaconClientException, BeaconServerException { public <REQ, RES> RES performRequest(REQ req) throws BeaconConnectorException, BeaconClientException, BeaconServerException {
ObjectNode node = JacksonMapper.getDefault().valueToTree(req); ObjectNode node = JacksonMapper.getDefault().valueToTree(req);
var prov = BeaconInterface.byRequest(req); var prov = BeaconInterface.byRequest(req);

View file

@ -88,7 +88,7 @@ project.ext {
arch = getArchName() arch = getArchName()
privateExtensions = file("$rootDir/private_extensions.txt").exists() ? file("$rootDir/private_extensions.txt").readLines() : [] privateExtensions = file("$rootDir/private_extensions.txt").exists() ? file("$rootDir/private_extensions.txt").readLines() : []
isFullRelease = System.getenv('RELEASE') != null && Boolean.parseBoolean(System.getenv('RELEASE')) isFullRelease = System.getenv('RELEASE') != null && Boolean.parseBoolean(System.getenv('RELEASE'))
isStage = true isStage = System.getenv('STAGE') != null && Boolean.parseBoolean(System.getenv('STAGE'))
rawVersion = file('version').text.trim() rawVersion = file('version').text.trim()
versionString = rawVersion + (isFullRelease || isStage ? '' : '-SNAPSHOT') versionString = rawVersion + (isFullRelease || isStage ? '' : '-SNAPSHOT')
versionReleaseNumber = rawVersion.split('-').length == 2 ? Integer.parseInt(rawVersion.split('-')[1]) : 1 versionReleaseNumber = rawVersion.split('-').length == 2 ? Integer.parseInt(rawVersion.split('-')[1]) : 1

View file

@ -32,14 +32,6 @@ 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. 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 ## Docker improvements
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. 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.
@ -48,6 +40,14 @@ Note that old docker container connections will be removed as they are incompati
There's now support for Windows docker containers running on HyperV. There's now support for Windows docker containers running on HyperV.
## 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.
## Better connection organization ## 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. The toggle to show only running connections will now no longer actually remove the connections internally and instead just not display them.

View file

@ -49,6 +49,10 @@ public class RunScriptAction implements BrowserAction, BranchAction {
var scripts = ScriptStore.flatten(ScriptStore.getDefaultEnabledScripts()); var scripts = ScriptStore.flatten(ScriptStore.getDefaultEnabledScripts());
var map = new LinkedHashMap<String, SimpleScriptStore>(); var map = new LinkedHashMap<String, SimpleScriptStore>();
for (SimpleScriptStore script : scripts) { for (SimpleScriptStore script : scripts) {
if (!script.isFileScript()) {
continue;
}
if (script.assemble(sc) == null) { if (script.assemble(sc) == null) {
continue; continue;
} }

View file

@ -478,3 +478,4 @@ httpApi=HTTP API
isOnlySupportedLimit=understøttes kun med en professionel licens, når man har mere end $COUNT$ forbindelser isOnlySupportedLimit=understøttes kun med en professionel licens, når man har mere end $COUNT$ forbindelser
areOnlySupportedLimit=understøttes kun med en professionel licens, når man har mere end $COUNT$ forbindelser areOnlySupportedLimit=understøttes kun med en professionel licens, når man har mere end $COUNT$ forbindelser
enabled=Aktiveret enabled=Aktiveret
enableGitStoragePtbDisabled=Git-synkronisering er deaktiveret for offentlige test-builds for at forhindre brug med almindelige release-git-lagre og for at modvirke, at man bruger en PTB-build som sin daglige driver.

View file

@ -472,3 +472,4 @@ httpApi=HTTP-API
isOnlySupportedLimit=wird nur mit einer professionellen Lizenz unterstützt, wenn mehr als $COUNT$ Verbindungen bestehen isOnlySupportedLimit=wird nur mit einer professionellen Lizenz unterstützt, wenn mehr als $COUNT$ Verbindungen bestehen
areOnlySupportedLimit=werden nur mit einer professionellen Lizenz unterstützt, wenn mehr als $COUNT$ Verbindungen bestehen areOnlySupportedLimit=werden nur mit einer professionellen Lizenz unterstützt, wenn mehr als $COUNT$ Verbindungen bestehen
enabled=Aktiviert enabled=Aktiviert
enableGitStoragePtbDisabled=Die Git-Synchronisierung ist für öffentliche Test-Builds deaktiviert, um die Verwendung mit regulären Git-Repositories zu verhindern und um davon abzuraten, einen PTB-Build als täglichen Treiber zu verwenden.

View file

@ -459,3 +459,4 @@ httpApi=API HTTP
isOnlySupportedLimit=sólo es compatible con una licencia profesional cuando tiene más de $COUNT$ conexiones isOnlySupportedLimit=sólo es compatible con una licencia profesional cuando tiene más de $COUNT$ conexiones
areOnlySupportedLimit=sólo son compatibles con una licencia profesional cuando tienen más de $COUNT$ conexiones areOnlySupportedLimit=sólo son compatibles con una licencia profesional cuando tienen más de $COUNT$ conexiones
enabled=Activado enabled=Activado
enableGitStoragePtbDisabled=La sincronización Git está desactivada para las compilaciones públicas de prueba, para evitar que se utilicen con los repositorios git de publicación regular y para desalentar el uso de una compilación PTB como tu conductor diario.

View file

@ -459,3 +459,4 @@ httpApi=API HTTP
isOnlySupportedLimit=n'est pris en charge qu'avec une licence professionnelle lorsqu'il y a plus de $COUNT$ connexions isOnlySupportedLimit=n'est pris en charge qu'avec une licence professionnelle lorsqu'il y a plus de $COUNT$ connexions
areOnlySupportedLimit=ne sont pris en charge qu'avec une licence professionnelle lorsqu'il y a plus de $COUNT$ connexions areOnlySupportedLimit=ne sont pris en charge qu'avec une licence professionnelle lorsqu'il y a plus de $COUNT$ connexions
enabled=Activé enabled=Activé
enableGitStoragePtbDisabled=La synchronisation Git est désactivée pour les versions de test publiques afin d'éviter toute utilisation avec les dépôts git des versions régulières et de décourager l'utilisation d'une version PTB comme conducteur quotidien.

View file

@ -459,3 +459,4 @@ httpApi=API HTTP
isOnlySupportedLimit=è supportato solo con una licenza professionale quando ci sono più di $COUNT$ connessioni isOnlySupportedLimit=è supportato solo con una licenza professionale quando ci sono più di $COUNT$ connessioni
areOnlySupportedLimit=sono supportati solo con una licenza professionale quando ci sono più di $COUNT$ connessioni areOnlySupportedLimit=sono supportati solo con una licenza professionale quando ci sono più di $COUNT$ connessioni
enabled=Abilitato enabled=Abilitato
enableGitStoragePtbDisabled=La sincronizzazione Git è disabilitata per le build di test pubbliche per evitare l'uso con i repository git di rilascio regolari e per scoraggiare l'uso di una build PTB come guida quotidiana.

View file

@ -459,3 +459,4 @@ httpApi=HTTP API
isOnlySupportedLimit=は、$COUNT$ を超える接続がある場合、プロフェッショナルライセンスでのみサポートされる。 isOnlySupportedLimit=は、$COUNT$ を超える接続がある場合、プロフェッショナルライセンスでのみサポートされる。
areOnlySupportedLimit=$COUNT$ 以上の接続がある場合、プロフェッショナルライセンスでのみサポートされる。 areOnlySupportedLimit=$COUNT$ 以上の接続がある場合、プロフェッショナルライセンスでのみサポートされる。
enabled=有効にする enabled=有効にする
enableGitStoragePtbDisabled=Gitの同期をパブリックテストビルドでは無効にしているのは、通常のリリース用gitリポジトリとの使い回しを防ぎ、PTBビルドをデイリードライバーとして使わないようにするためだ。

View file

@ -459,3 +459,4 @@ httpApi=HTTP API
isOnlySupportedLimit=wordt alleen ondersteund met een professionele licentie bij meer dan $COUNT$ verbindingen isOnlySupportedLimit=wordt alleen ondersteund met een professionele licentie bij meer dan $COUNT$ verbindingen
areOnlySupportedLimit=worden alleen ondersteund met een professionele licentie bij meer dan $COUNT$ verbindingen areOnlySupportedLimit=worden alleen ondersteund met een professionele licentie bij meer dan $COUNT$ verbindingen
enabled=Ingeschakeld enabled=Ingeschakeld
enableGitStoragePtbDisabled=Git synchronisatie is uitgeschakeld voor publieke test builds om gebruik met reguliere release git repositories te voorkomen en om het gebruik van een PTB build als je dagelijkse driver te ontmoedigen.

View file

@ -459,3 +459,4 @@ httpApi=API HTTP
isOnlySupportedLimit=só é suportado com uma licença profissional se tiver mais de $COUNT$ ligações isOnlySupportedLimit=só é suportado com uma licença profissional se tiver mais de $COUNT$ ligações
areOnlySupportedLimit=só são suportados com uma licença profissional quando têm mais de $COUNT$ ligações areOnlySupportedLimit=só são suportados com uma licença profissional quando têm mais de $COUNT$ ligações
enabled=Ativado enabled=Ativado
enableGitStoragePtbDisabled=A sincronização do Git está desactivada para compilações de teste públicas para evitar a utilização com repositórios git de lançamento regulares e para desencorajar a utilização de uma compilação PTB como o teu condutor diário.

View file

@ -459,3 +459,4 @@ httpApi=HTTP API
isOnlySupportedLimit=поддерживается только профессиональной лицензией при наличии более $COUNT$ соединений isOnlySupportedLimit=поддерживается только профессиональной лицензией при наличии более $COUNT$ соединений
areOnlySupportedLimit=поддерживаются только профессиональной лицензией при наличии более чем $COUNT$ соединений areOnlySupportedLimit=поддерживаются только профессиональной лицензией при наличии более чем $COUNT$ соединений
enabled=Включено enabled=Включено
enableGitStoragePtbDisabled=Git-синхронизация отключена для публичных тестовых сборок, чтобы предотвратить их использование с обычными релизными git-репозиториями и не допустить использования PTB-сборки в качестве ежедневного драйвера.

View file

@ -460,3 +460,4 @@ httpApi=HTTP API
isOnlySupportedLimit=yalnızca $COUNT$ adresinden daha fazla bağlantıya sahip olunduğunda profesyonel lisans ile desteklenir isOnlySupportedLimit=yalnızca $COUNT$ adresinden daha fazla bağlantıya sahip olunduğunda profesyonel lisans ile desteklenir
areOnlySupportedLimit=yalnızca $COUNT$ adresinden daha fazla bağlantıya sahip olunduğunda profesyonel lisans ile desteklenir areOnlySupportedLimit=yalnızca $COUNT$ adresinden daha fazla bağlantıya sahip olunduğunda profesyonel lisans ile desteklenir
enabled=Etkin enabled=Etkin
enableGitStoragePtbDisabled=Git senkronizasyonu, normal sürüm git depoları ile kullanımı önlemek ve günlük sürücünüz olarak bir PTB derlemesini kullanmaktan vazgeçirmek için genel test derlemeleri için devre dışı bırakılmıştır.

View file

@ -459,3 +459,4 @@ httpApi=HTTP API
isOnlySupportedLimit=只有在连接数超过$COUNT$ 时才支持专业许可证 isOnlySupportedLimit=只有在连接数超过$COUNT$ 时才支持专业许可证
areOnlySupportedLimit=只有在连接数超过$COUNT$ 时才支持专业许可证 areOnlySupportedLimit=只有在连接数超过$COUNT$ 时才支持专业许可证
enabled=已启用 enabled=已启用
enableGitStoragePtbDisabled=公共测试版已禁用 Git 同步功能,以防止与常规发布版本的 git 仓库一起使用,并避免将公共测试版作为日常驱动程序使用。

View file

@ -157,7 +157,7 @@ serviceGroup.displayDescription=Gruppér flere tjenester i én kategori
initScript=Kører på shell init initScript=Kører på shell init
shellScript=Gør script tilgængeligt under shell-session shellScript=Gør script tilgængeligt under shell-session
fileScript=Gør det muligt at kalde et script med filargumenter i filbrowseren fileScript=Gør det muligt at kalde et script med filargumenter i filbrowseren
runScript=Kør script ... runScript=Kør script
copyUrl=Kopier URL copyUrl=Kopier URL
fixedServiceGroup.displayName=Service-gruppe fixedServiceGroup.displayName=Service-gruppe
fixedServiceGroup.displayDescription=Liste over tilgængelige tjenester på et system fixedServiceGroup.displayDescription=Liste over tilgængelige tjenester på et system

View file

@ -148,7 +148,7 @@ serviceGroup.displayDescription=Mehrere Dienste in einer Kategorie zusammenfasse
initScript=Auf der Shell init ausführen initScript=Auf der Shell init ausführen
shellScript=Skript während der Shell-Sitzung verfügbar machen shellScript=Skript während der Shell-Sitzung verfügbar machen
fileScript=Skriptaufruf mit Dateiargumenten im Dateibrowser zulassen fileScript=Skriptaufruf mit Dateiargumenten im Dateibrowser zulassen
runScript=Skript ausführen ... runScript=Skript ausführen
copyUrl=URL kopieren copyUrl=URL kopieren
fixedServiceGroup.displayName=Dienstgruppe fixedServiceGroup.displayName=Dienstgruppe
fixedServiceGroup.displayDescription=Liste der verfügbaren Dienste auf einem System fixedServiceGroup.displayDescription=Liste der verfügbaren Dienste auf einem System

View file

@ -146,7 +146,7 @@ serviceGroup.displayDescription=Group multiple services into one category
initScript=Run on shell init initScript=Run on shell init
shellScript=Make script available during shell session shellScript=Make script available during shell session
fileScript=Allow script to be called with file arguments in the file browser fileScript=Allow script to be called with file arguments in the file browser
runScript=Run script with runScript=Run script
copyUrl=Copy URL copyUrl=Copy URL
fixedServiceGroup.displayName=Service group fixedServiceGroup.displayName=Service group
fixedServiceGroup.displayDescription=List the available services on a system fixedServiceGroup.displayDescription=List the available services on a system

View file

@ -146,7 +146,7 @@ serviceGroup.displayDescription=Agrupa varios servicios en una categoría
initScript=Ejecutar en shell init initScript=Ejecutar en shell init
shellScript=Hacer que el script esté disponible durante la sesión shell shellScript=Hacer que el script esté disponible durante la sesión shell
fileScript=Permitir llamar a un script con argumentos de archivo en el explorador de archivos fileScript=Permitir llamar a un script con argumentos de archivo en el explorador de archivos
runScript=Ejecutar script ... runScript=Ejecutar script
copyUrl=Copiar URL copyUrl=Copiar URL
fixedServiceGroup.displayName=Grupo de servicios fixedServiceGroup.displayName=Grupo de servicios
fixedServiceGroup.displayDescription=Enumerar los servicios disponibles en un sistema fixedServiceGroup.displayDescription=Enumerar los servicios disponibles en un sistema

View file

@ -146,7 +146,7 @@ serviceGroup.displayDescription=Regrouper plusieurs services dans une même cat
initScript=Exécute sur le shell init initScript=Exécute sur le shell init
shellScript=Rendre le script disponible pendant la session shell shellScript=Rendre le script disponible pendant la session shell
fileScript=Permet d'appeler un script avec des arguments de fichier dans le navigateur de fichiers fileScript=Permet d'appeler un script avec des arguments de fichier dans le navigateur de fichiers
runScript=Exécute le script ... runScript=Exécuter un script
copyUrl=Copier l'URL copyUrl=Copier l'URL
fixedServiceGroup.displayName=Groupe de service fixedServiceGroup.displayName=Groupe de service
fixedServiceGroup.displayDescription=Liste les services disponibles sur un système fixedServiceGroup.displayDescription=Liste les services disponibles sur un système

View file

@ -146,7 +146,7 @@ serviceGroup.displayDescription=Raggruppa più servizi in un'unica categoria
initScript=Eseguire su shell init initScript=Eseguire su shell init
shellScript=Rendere disponibile lo script durante la sessione di shell shellScript=Rendere disponibile lo script durante la sessione di shell
fileScript=Consente di richiamare uno script con argomenti di file nel browser di file fileScript=Consente di richiamare uno script con argomenti di file nel browser di file
runScript=Esegui script ... runScript=Esegui script
copyUrl=Copia URL copyUrl=Copia URL
fixedServiceGroup.displayName=Gruppo di servizio fixedServiceGroup.displayName=Gruppo di servizio
fixedServiceGroup.displayDescription=Elenco dei servizi disponibili su un sistema fixedServiceGroup.displayDescription=Elenco dei servizi disponibili su un sistema

View file

@ -146,7 +146,7 @@ serviceGroup.displayDescription=Groepeer meerdere diensten in één categorie
initScript=Uitvoeren op shell init initScript=Uitvoeren op shell init
shellScript=Script beschikbaar maken tijdens shellsessie shellScript=Script beschikbaar maken tijdens shellsessie
fileScript=Laat toe dat een script wordt aangeroepen met bestandsargumenten in de bestandsbrowser fileScript=Laat toe dat een script wordt aangeroepen met bestandsargumenten in de bestandsbrowser
runScript=Script uitvoeren ... runScript=Script uitvoeren
copyUrl=URL kopiëren copyUrl=URL kopiëren
fixedServiceGroup.displayName=Servicegroep fixedServiceGroup.displayName=Servicegroep
fixedServiceGroup.displayDescription=Een lijst van beschikbare services op een systeem fixedServiceGroup.displayDescription=Een lijst van beschikbare services op een systeem

View file

@ -146,7 +146,7 @@ serviceGroup.displayDescription=Agrupa vários serviços numa categoria
initScript=Corre no shell init initScript=Corre no shell init
shellScript=Torna o script disponível durante a sessão da shell shellScript=Torna o script disponível durante a sessão da shell
fileScript=Permite que o script seja chamado com argumentos de ficheiro no navegador de ficheiros fileScript=Permite que o script seja chamado com argumentos de ficheiro no navegador de ficheiros
runScript=Executa o script ... runScript=Executa o script
copyUrl=Copia o URL copyUrl=Copia o URL
fixedServiceGroup.displayName=Grupo de serviços fixedServiceGroup.displayName=Grupo de serviços
fixedServiceGroup.displayDescription=Lista os serviços disponíveis num sistema fixedServiceGroup.displayDescription=Lista os serviços disponíveis num sistema

View file

@ -146,7 +146,7 @@ serviceGroup.displayDescription=Сгруппируйте несколько се
initScript=Запуск на shell init initScript=Запуск на shell init
shellScript=Сделать скрипт доступным во время сеанса оболочки shellScript=Сделать скрипт доступным во время сеанса оболочки
fileScript=Разрешить вызов скрипта с аргументами в виде файлов в браузере файлов fileScript=Разрешить вызов скрипта с аргументами в виде файлов в браузере файлов
runScript=Запустите скрипт ... runScript=Запуск скрипта
copyUrl=Копировать URL copyUrl=Копировать URL
fixedServiceGroup.displayName=Группа услуг fixedServiceGroup.displayName=Группа услуг
fixedServiceGroup.displayDescription=Список доступных сервисов в системе fixedServiceGroup.displayDescription=Список доступных сервисов в системе

View file

@ -146,7 +146,7 @@ serviceGroup.displayDescription=Birden fazla hizmeti tek bir kategoride gruplay
initScript=Kabuk başlangıcında çalıştır initScript=Kabuk başlangıcında çalıştır
shellScript=Kabuk oturumu sırasında komut dosyasını kullanılabilir hale getirme shellScript=Kabuk oturumu sırasında komut dosyasını kullanılabilir hale getirme
fileScript=Kodun dosya tarayıcısında dosya bağımsız değişkenleriyle çağrılmasına izin ver fileScript=Kodun dosya tarayıcısında dosya bağımsız değişkenleriyle çağrılmasına izin ver
runScript=Komut dosyasını çalıştır ... runScript=Komut dosyasını çalıştır
copyUrl=URL'yi kopyala copyUrl=URL'yi kopyala
fixedServiceGroup.displayName=Hizmet grubu fixedServiceGroup.displayName=Hizmet grubu
fixedServiceGroup.displayDescription=Bir sistemdeki mevcut hizmetleri listeleme fixedServiceGroup.displayDescription=Bir sistemdeki mevcut hizmetleri listeleme

View file

@ -146,7 +146,7 @@ serviceGroup.displayDescription=将多项服务归为一类
initScript=在 shell init 上运行 initScript=在 shell init 上运行
shellScript=在 shell 会话中提供脚本 shellScript=在 shell 会话中提供脚本
fileScript=允许在文件浏览器中使用文件参数调用脚本 fileScript=允许在文件浏览器中使用文件参数调用脚本
runScript=运行脚本 ... runScript=运行脚本
copyUrl=复制 URL copyUrl=复制 URL
fixedServiceGroup.displayName=服务组 fixedServiceGroup.displayName=服务组
fixedServiceGroup.displayDescription=列出系统中可用的服务 fixedServiceGroup.displayDescription=列出系统中可用的服务

View file

@ -357,3 +357,4 @@ containerActions=Container-handlinger
vmActions=VM-handlinger vmActions=VM-handlinger
dockerContextActions=Kontekst-handlinger dockerContextActions=Kontekst-handlinger
k8sPodActions=Pod-handlinger k8sPodActions=Pod-handlinger
openVnc=Sæt VNC op

View file

@ -335,3 +335,4 @@ containerActions=Container-Aktionen
vmActions=VM-Aktionen vmActions=VM-Aktionen
dockerContextActions=Kontextbezogene Aktionen dockerContextActions=Kontextbezogene Aktionen
k8sPodActions=Pod-Aktionen k8sPodActions=Pod-Aktionen
openVnc=VNC einrichten

View file

@ -331,3 +331,4 @@ containerActions=Acciones del contenedor
vmActions=Acciones VM vmActions=Acciones VM
dockerContextActions=Acciones contextuales dockerContextActions=Acciones contextuales
k8sPodActions=Acciones del pod k8sPodActions=Acciones del pod
openVnc=Configurar VNC

View file

@ -331,3 +331,4 @@ containerActions=Actions du conteneur
vmActions=Actions VM vmActions=Actions VM
dockerContextActions=Actions contextuelles dockerContextActions=Actions contextuelles
k8sPodActions=Actions de pods k8sPodActions=Actions de pods
openVnc=Configurer VNC

View file

@ -331,3 +331,4 @@ containerActions=Azioni del contenitore
vmActions=Azioni della VM vmActions=Azioni della VM
dockerContextActions=Azioni contestuali dockerContextActions=Azioni contestuali
k8sPodActions=Azioni del pod k8sPodActions=Azioni del pod
openVnc=Configurare VNC

View file

@ -331,3 +331,4 @@ containerActions=コンテナアクション
vmActions=VMアクション vmActions=VMアクション
dockerContextActions=コンテキストアクション dockerContextActions=コンテキストアクション
k8sPodActions=ポッドアクション k8sPodActions=ポッドアクション
openVnc=VNCを設定する

View file

@ -331,3 +331,4 @@ containerActions=Container acties
vmActions=VM-acties vmActions=VM-acties
dockerContextActions=Context acties dockerContextActions=Context acties
k8sPodActions=Pod acties k8sPodActions=Pod acties
openVnc=VNC instellen

View file

@ -331,3 +331,4 @@ containerActions=Acções de contentor
vmActions=Acções VM vmActions=Acções VM
dockerContextActions=Acções de contexto dockerContextActions=Acções de contexto
k8sPodActions=Acções de pod k8sPodActions=Acções de pod
openVnc=Configura o VNC

View file

@ -331,3 +331,4 @@ containerActions=Действия с контейнером
vmActions=Действия виртуальной машины vmActions=Действия виртуальной машины
dockerContextActions=Контекстные действия dockerContextActions=Контекстные действия
k8sPodActions=Действия в капсуле k8sPodActions=Действия в капсуле
openVnc=Настройте VNC

View file

@ -331,3 +331,4 @@ containerActions=Konteyner eylemleri
vmActions=VM eylemleri vmActions=VM eylemleri
dockerContextActions=Bağlam eylemleri dockerContextActions=Bağlam eylemleri
k8sPodActions=Pod eylemleri k8sPodActions=Pod eylemleri
openVnc=VNC'yi ayarlama

View file

@ -331,3 +331,4 @@ containerActions=容器操作
vmActions=虚拟机操作 vmActions=虚拟机操作
dockerContextActions=上下文操作 dockerContextActions=上下文操作
k8sPodActions=Pod 操作 k8sPodActions=Pod 操作
openVnc=设置 VNC

View file

@ -3,7 +3,10 @@ info:
title: XPipe API Documentation title: XPipe API Documentation
description: | description: |
The XPipe API provides programmatic access to XPipes features. The XPipe API provides programmatic access to XPipes features.
You can get started by either using this page as an API reference or alternatively import the OpenAPI definition file into your API client of choice:
<a download href="/openapi.yaml" style="font-size: 20px">OpenAPI .yaml specification</a>
The XPipe application will start up an HTTP server that can be used to send requests. The XPipe application will start up an HTTP server that can be used to send requests.
You can change the port of it in the settings menu. You can change the port of it in the settings menu.
Note that this server is HTTP-only for now as it runs only on localhost. HTTPS requests are not accepted. Note that this server is HTTP-only for now as it runs only on localhost. HTTPS requests are not accepted.
@ -15,8 +18,8 @@ info:
Any kind of passwords and other secrets are automatically provided by XPipe when establishing a shell connection. Any kind of passwords and other secrets are automatically provided by XPipe when establishing a shell connection.
If a required password is not stored and is set to be dynamically prompted, the running XPipe application will ask you to enter any required passwords. If a required password is not stored and is set to be dynamically prompted, the running XPipe application will ask you to enter any required passwords.
You can quickly get started by either using this page as an API reference or alternatively import the [OpenAPI definition file](/openapi.yaml) into your API client of choice.
See the authentication handshake below on how to authenticate prior to sending requests. See the authentication handshake below on how to authenticate prior to sending requests.
For development you can also skip the authentication step by disabling it in the settings menu.
termsOfService: https://docs.xpipe.io/terms-of-service termsOfService: https://docs.xpipe.io/terms-of-service
contact: contact:
name: XPipe - Contact us name: XPipe - Contact us