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>
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.
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.
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.
For development you can also skip the authentication step by disabling it in the settings menu.
Base URLs:
* <a href="http://localhost:21721">http://localhost:21721</a>
* <a href="http://localhost:21723">http://localhost:21723</a>
Table of contents:
[TOC]
@ -128,7 +131,7 @@ const headers = {
'Accept':'application/json'
};
fetch('http://localhost:21721/handshake',
fetch('http://localhost:21723/handshake',
{
method: 'POST',
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())
```
```java
var uri = URI.create("http://localhost:21721/handshake");
var uri = URI.create("http://localhost:21723/handshake");
var client = HttpClient.newHttpClient();
var request = HttpRequest
.newBuilder()
@ -210,7 +213,7 @@ func main() {
}
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
client := &http.Client{}
@ -222,7 +225,7 @@ func main() {
```shell
# 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' \
--data '
{
@ -334,7 +337,7 @@ const headers = {
'Authorization':'Bearer {access-token}'
};
fetch('http://localhost:21721/connection/query',
fetch('http://localhost:21723/connection/query',
{
method: 'POST',
body: inputBody,
@ -363,14 +366,14 @@ data = """
"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())
```
```java
var uri = URI.create("http://localhost:21721/connection/query");
var uri = URI.create("http://localhost:21723/connection/query");
var client = HttpClient.newHttpClient();
var request = HttpRequest
.newBuilder()
@ -409,7 +412,7 @@ func main() {
}
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
client := &http.Client{}
@ -421,7 +424,7 @@ func main() {
```shell
# 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}' \
--data '
{
@ -489,7 +492,7 @@ const headers = {
'Authorization':'Bearer {access-token}'
};
fetch('http://localhost:21721/shell/start',
fetch('http://localhost:21723/shell/start',
{
method: 'POST',
body: inputBody,
@ -515,14 +518,14 @@ data = """
"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())
```
```java
var uri = URI.create("http://localhost:21721/shell/start");
var uri = URI.create("http://localhost:21723/shell/start");
var client = HttpClient.newHttpClient();
var request = HttpRequest
.newBuilder()
@ -557,7 +560,7 @@ func main() {
}
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
client := &http.Client{}
@ -569,7 +572,7 @@ func main() {
```shell
# 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}' \
--data '
{
@ -635,7 +638,7 @@ const headers = {
'Authorization':'Bearer {access-token}'
};
fetch('http://localhost:21721/shell/stop',
fetch('http://localhost:21723/shell/stop',
{
method: 'POST',
body: inputBody,
@ -661,14 +664,14 @@ data = """
"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())
```
```java
var uri = URI.create("http://localhost:21721/shell/stop");
var uri = URI.create("http://localhost:21723/shell/stop");
var client = HttpClient.newHttpClient();
var request = HttpRequest
.newBuilder()
@ -703,7 +706,7 @@ func main() {
}
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
client := &http.Client{}
@ -715,7 +718,7 @@ func main() {
```shell
# 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}' \
--data '
{
@ -805,7 +808,7 @@ const headers = {
'Authorization':'Bearer {access-token}'
};
fetch('http://localhost:21721/shell/exec',
fetch('http://localhost:21723/shell/exec',
{
method: 'POST',
body: inputBody,
@ -833,14 +836,14 @@ data = """
"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())
```
```java
var uri = URI.create("http://localhost:21721/shell/exec");
var uri = URI.create("http://localhost:21723/shell/exec");
var client = HttpClient.newHttpClient();
var request = HttpRequest
.newBuilder()
@ -878,7 +881,7 @@ func main() {
}
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
client := &http.Client{}
@ -890,7 +893,7 @@ func main() {
```shell
# 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}' \
--data '
{

View file

@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
import io.xpipe.beacon.api.HandshakeExchange;
import io.xpipe.core.util.JacksonMapper;
import io.xpipe.core.util.XPipeInstallation;
import lombok.SneakyThrows;
import java.io.IOException;
import java.net.URI;
@ -80,13 +81,30 @@ public class BeaconClient {
try {
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;
} catch (IOException 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 {
ObjectNode node = JacksonMapper.getDefault().valueToTree(req);
var prov = BeaconInterface.byRequest(req);

View file

@ -88,7 +88,7 @@ project.ext {
arch = getArchName()
privateExtensions = file("$rootDir/private_extensions.txt").exists() ? file("$rootDir/private_extensions.txt").readLines() : []
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()
versionString = rawVersion + (isFullRelease || isStage ? '' : '-SNAPSHOT')
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.
## 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. 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.
## 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
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 map = new LinkedHashMap<String, SimpleScriptStore>();
for (SimpleScriptStore script : scripts) {
if (!script.isFileScript()) {
continue;
}
if (script.assemble(sc) == null) {
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
areOnlySupportedLimit=understøttes kun med en professionel licens, når man har mere end $COUNT$ forbindelser
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
areOnlySupportedLimit=werden nur mit einer professionellen Lizenz unterstützt, wenn mehr als $COUNT$ Verbindungen bestehen
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
areOnlySupportedLimit=sólo son compatibles con una licencia profesional cuando tienen más de $COUNT$ conexiones
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
areOnlySupportedLimit=ne sont pris en charge qu'avec une licence professionnelle lorsqu'il y a plus de $COUNT$ connexions
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
areOnlySupportedLimit=sono supportati solo con una licenza professionale quando ci sono più di $COUNT$ connessioni
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$ を超える接続がある場合、プロフェッショナルライセンスでのみサポートされる。
areOnlySupportedLimit=$COUNT$ 以上の接続がある場合、プロフェッショナルライセンスでのみサポートされる。
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
areOnlySupportedLimit=worden alleen ondersteund met een professionele licentie bij meer dan $COUNT$ verbindingen
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
areOnlySupportedLimit=só são suportados com uma licença profissional quando têm mais de $COUNT$ ligações
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$ соединений
areOnlySupportedLimit=поддерживаются только профессиональной лицензией при наличии более чем $COUNT$ соединений
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
areOnlySupportedLimit=yalnızca $COUNT$ adresinden daha fazla bağlantıya sahip olunduğunda profesyonel lisans ile desteklenir
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$ 时才支持专业许可证
areOnlySupportedLimit=只有在连接数超过$COUNT$ 时才支持专业许可证
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
shellScript=Gør script tilgængeligt under shell-session
fileScript=Gør det muligt at kalde et script med filargumenter i filbrowseren
runScript=Kør script ...
runScript=Kør script
copyUrl=Kopier URL
fixedServiceGroup.displayName=Service-gruppe
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
shellScript=Skript während der Shell-Sitzung verfügbar machen
fileScript=Skriptaufruf mit Dateiargumenten im Dateibrowser zulassen
runScript=Skript ausführen ...
runScript=Skript ausführen
copyUrl=URL kopieren
fixedServiceGroup.displayName=Dienstgruppe
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
shellScript=Make script available during shell session
fileScript=Allow script to be called with file arguments in the file browser
runScript=Run script with
runScript=Run script
copyUrl=Copy URL
fixedServiceGroup.displayName=Service group
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
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
runScript=Ejecutar script ...
runScript=Ejecutar script
copyUrl=Copiar URL
fixedServiceGroup.displayName=Grupo de servicios
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
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
runScript=Exécute le script ...
runScript=Exécuter un script
copyUrl=Copier l'URL
fixedServiceGroup.displayName=Groupe de service
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
shellScript=Rendere disponibile lo script durante la sessione di shell
fileScript=Consente di richiamare uno script con argomenti di file nel browser di file
runScript=Esegui script ...
runScript=Esegui script
copyUrl=Copia URL
fixedServiceGroup.displayName=Gruppo di servizio
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
shellScript=Script beschikbaar maken tijdens shellsessie
fileScript=Laat toe dat een script wordt aangeroepen met bestandsargumenten in de bestandsbrowser
runScript=Script uitvoeren ...
runScript=Script uitvoeren
copyUrl=URL kopiëren
fixedServiceGroup.displayName=Servicegroep
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
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
runScript=Executa o script ...
runScript=Executa o script
copyUrl=Copia o URL
fixedServiceGroup.displayName=Grupo de serviços
fixedServiceGroup.displayDescription=Lista os serviços disponíveis num sistema

View file

@ -146,7 +146,7 @@ serviceGroup.displayDescription=Сгруппируйте несколько се
initScript=Запуск на shell init
shellScript=Сделать скрипт доступным во время сеанса оболочки
fileScript=Разрешить вызов скрипта с аргументами в виде файлов в браузере файлов
runScript=Запустите скрипт ...
runScript=Запуск скрипта
copyUrl=Копировать URL
fixedServiceGroup.displayName=Группа услуг
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
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
runScript=Komut dosyasını çalıştır ...
runScript=Komut dosyasını çalıştır
copyUrl=URL'yi kopyala
fixedServiceGroup.displayName=Hizmet grubu
fixedServiceGroup.displayDescription=Bir sistemdeki mevcut hizmetleri listeleme

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -3,6 +3,9 @@ info:
title: XPipe API Documentation
description: |
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.
You can change the port of it in the settings menu.
@ -15,8 +18,8 @@ info:
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.
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.
For development you can also skip the authentication step by disabling it in the settings menu.
termsOfService: https://docs.xpipe.io/terms-of-service
contact:
name: XPipe - Contact us