diff --git a/Cargo.lock b/Cargo.lock
index 9823b06..ae95694 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -3988,7 +3988,7 @@ dependencies = [
[[package]]
name = "orbien-client"
-version = "3.1.0"
+version = "3.1.1"
dependencies = [
"anyhow",
"async-trait",
@@ -4009,7 +4009,7 @@ dependencies = [
[[package]]
name = "orbien-core"
-version = "3.1.0"
+version = "3.1.1"
dependencies = [
"anyhow",
"base64",
@@ -4041,7 +4041,7 @@ dependencies = [
[[package]]
name = "orbien-desktop"
-version = "3.1.0"
+version = "3.1.1"
dependencies = [
"anyhow",
"libc",
@@ -4059,7 +4059,7 @@ dependencies = [
[[package]]
name = "orbien-server"
-version = "3.1.0"
+version = "3.1.1"
dependencies = [
"anyhow",
"axum",
diff --git a/Cargo.toml b/Cargo.toml
index c0d560a..0c1dbad 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -8,7 +8,7 @@ members = [
]
[workspace.package]
-version = "3.1.0"
+version = "3.1.1"
edition = "2021"
license = "Apache-2.0"
authors = ["orbien"]
diff --git a/README.md b/README.md
index ff053a5..a762d4a 100644
--- a/README.md
+++ b/README.md
@@ -21,7 +21,7 @@
-
+
diff --git a/README_ZH.md b/README_ZH.md
index f195b43..6c82f98 100644
--- a/README_ZH.md
+++ b/README_ZH.md
@@ -21,7 +21,7 @@
-
+
diff --git a/client-java/orbien-client/pom.xml b/client-java/orbien-client/pom.xml
index c8c63ab..1fbda89 100644
--- a/client-java/orbien-client/pom.xml
+++ b/client-java/orbien-client/pom.xml
@@ -6,7 +6,7 @@
io.github.lxien
orbien
- 3.1.0
+ 3.1.1
orbien-client
diff --git a/client-java/orbien-client/src/main/java/io/github/lxien/orbien/client/OrbienClient.java b/client-java/orbien-client/src/main/java/io/github/lxien/orbien/client/OrbienClient.java
index 16c4651..5c5172d 100644
--- a/client-java/orbien-client/src/main/java/io/github/lxien/orbien/client/OrbienClient.java
+++ b/client-java/orbien-client/src/main/java/io/github/lxien/orbien/client/OrbienClient.java
@@ -31,7 +31,7 @@ import org.slf4j.LoggerFactory;
public final class OrbienClient implements AutoCloseable {
private static final Logger log = LoggerFactory.getLogger(OrbienClient.class);
- private static final String VERSION = "3.1.0";
+ private static final String VERSION = "3.1.1";
private final OrbienClientConfig config;
private final AtomicBoolean started = new AtomicBoolean(false);
diff --git a/client-java/orbien-spring-boot-demo/pom.xml b/client-java/orbien-spring-boot-demo/pom.xml
index 02e8eb0..bb3986d 100644
--- a/client-java/orbien-spring-boot-demo/pom.xml
+++ b/client-java/orbien-spring-boot-demo/pom.xml
@@ -6,7 +6,7 @@
io.github.lxien
orbien
- 3.1.0
+ 3.1.1
orbien-spring-boot-demo
diff --git a/client-java/orbien-spring-boot-starter/pom.xml b/client-java/orbien-spring-boot-starter/pom.xml
index 0494297..04e4771 100644
--- a/client-java/orbien-spring-boot-starter/pom.xml
+++ b/client-java/orbien-spring-boot-starter/pom.xml
@@ -7,7 +7,7 @@
io.github.lxien
orbien
- 3.1.0
+ 3.1.1
orbien-spring-boot-starter
diff --git a/client-java/pom.xml b/client-java/pom.xml
index 970a457..93d0ac4 100644
--- a/client-java/pom.xml
+++ b/client-java/pom.xml
@@ -6,7 +6,7 @@
io.github.lxien
orbien
- 3.1.0
+ 3.1.1
pom
orbien
diff --git a/desktop/src/main.rs b/desktop/src/main.rs
index ede1f37..c17840f 100644
--- a/desktop/src/main.rs
+++ b/desktop/src/main.rs
@@ -1,3 +1,4 @@
+#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
mod client_log_layer;
mod config_bridge;
mod i18n;
diff --git a/docs/docs/integrations/springboot.mdx b/docs/docs/integrations/springboot.mdx
index c71b464..2106d0a 100644
--- a/docs/docs/integrations/springboot.mdx
+++ b/docs/docs/integrations/springboot.mdx
@@ -19,13 +19,13 @@ import TabItem from '@theme/TabItem';
io.github.lxien
orbien-spring-boot-starter
- 3.1.0
+ 3.1.1
```
```groovy
- implementation("io.github.lxien:orbien-spring-boot-starter:3.1.0")
+ implementation("io.github.lxien:orbien-spring-boot-starter:3.1.1")
```
diff --git a/docs/i18n/en/docusaurus-plugin-content-docs/current/integrations/springboot.mdx b/docs/i18n/en/docusaurus-plugin-content-docs/current/integrations/springboot.mdx
index c993244..e672574 100644
--- a/docs/i18n/en/docusaurus-plugin-content-docs/current/integrations/springboot.mdx
+++ b/docs/i18n/en/docusaurus-plugin-content-docs/current/integrations/springboot.mdx
@@ -19,13 +19,13 @@ import TabItem from '@theme/TabItem';
io.github.lxien
orbien-spring-boot-starter
- 3.1.0
+ 3.1.1
```
```groovy
- implementation("io.github.lxien:orbien-spring-boot-starter:3.1.0")
+ implementation("io.github.lxien:orbien-spring-boot-starter:3.1.1")
```
diff --git a/docs/package.json b/docs/package.json
index bdfff7d..84dec6d 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -1,6 +1,6 @@
{
"name": "orbien-docs",
- "version": "3.1.0",
+ "version": "3.1.1",
"private": true,
"scripts": {
"docusaurus": "docusaurus",
diff --git a/docs/src/components/DownloadMatrix/index.tsx b/docs/src/components/DownloadMatrix/index.tsx
index 4e99f08..ef79d46 100644
--- a/docs/src/components/DownloadMatrix/index.tsx
+++ b/docs/src/components/DownloadMatrix/index.tsx
@@ -6,7 +6,7 @@ import styles from './styles.module.css';
const REPO = 'orbien-org/orbien';
-const FALLBACK_VERSION = '3.1.0';
+const FALLBACK_VERSION = '3.1.1';
type OsId = 'windows' | 'linux' | 'darwin' | 'freebsd';
type ArchId = 'amd64' | 'arm64';
diff --git a/server-ui/package-lock.json b/server-ui/package-lock.json
index b6aa863..72b68ea 100644
--- a/server-ui/package-lock.json
+++ b/server-ui/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "orbien-server-ui",
- "version": "3.1.0",
+ "version": "3.1.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "orbien-server-ui",
- "version": "3.1.0",
+ "version": "3.1.1",
"dependencies": {
"vue": "^3.5.22",
"vue-i18n": "^11.4.8",
diff --git a/server-ui/package.json b/server-ui/package.json
index 803328c..1d887a6 100644
--- a/server-ui/package.json
+++ b/server-ui/package.json
@@ -1,7 +1,7 @@
{
"name": "orbien-server-ui",
"private": true,
- "version": "3.1.0",
+ "version": "3.1.1",
"type": "module",
"scripts": {
"dev": "vite",
diff --git a/server/src/dashboard/routes.rs b/server/src/dashboard/routes.rs
index 523a22b..cbc85d6 100644
--- a/server/src/dashboard/routes.rs
+++ b/server/src/dashboard/routes.rs
@@ -1,9 +1,9 @@
use super::model::{
- ApiResponse, ClientInfo, Page, TunnelInfo, TunnelTrafficPoint, TunnelTrafficResp, SystemConfig,
- SystemInfo, SystemStatus,
+ ApiResponse, ClientInfo, Page, SystemConfig, SystemInfo, SystemStatus, TunnelInfo,
+ TunnelTrafficPoint, TunnelTrafficResp,
};
use super::DashState;
-use crate::metrics::{TunnelTrafficHistory, TrafficWindow};
+use crate::metrics::{TrafficWindow, TunnelTrafficHistory};
use axum::body::Body;
use axum::extract::{Path, Query, State};
use axum::http::{header, HeaderMap, HeaderValue, Request, StatusCode};
@@ -241,7 +241,11 @@ async fn get_client(
) -> Result>, StatusCode> {
let session_id = urlencoding_decode(&session_id);
let snap = state.svc.dashboard_snapshot().await;
- match snap.clients.into_iter().find(|c| c.session_id == session_id) {
+ match snap
+ .clients
+ .into_iter()
+ .find(|c| c.session_id == session_id)
+ {
Some(c) => Ok(Json(ApiResponse::ok(c))),
None => Err(StatusCode::NOT_FOUND),
}
@@ -305,7 +309,11 @@ async fn tunnel_traffic(
Query(q): Query,
) -> Result>, StatusCode> {
let name = urlencoding_decode(&name);
- match state.svc.metrics().tunnel_traffic(&name, traffic_window(&q)) {
+ match state
+ .svc
+ .metrics()
+ .tunnel_traffic(&name, traffic_window(&q))
+ {
Some(hist) => Ok(Json(ApiResponse::ok(traffic_resp(hist)))),
None => Err(StatusCode::NOT_FOUND),
}
diff --git a/server/src/main.rs b/server/src/main.rs
index befb72a..4d24325 100644
--- a/server/src/main.rs
+++ b/server/src/main.rs
@@ -2,8 +2,8 @@ mod access;
mod control;
mod dashboard;
mod metrics;
-mod tunnel;
mod service;
+mod tunnel;
use anyhow::Result;
use clap::Parser;
diff --git a/server/src/metrics/mem.rs b/server/src/metrics/mem.rs
index 557e786..c4ffd12 100644
--- a/server/src/metrics/mem.rs
+++ b/server/src/metrics/mem.rs
@@ -149,7 +149,11 @@ impl MemMetrics {
g.tunnels.get(name).map(|p| to_tunnel_snapshot(name, p))
}
- pub fn tunnel_traffic(&self, name: &str, window: TrafficWindow) -> Option {
+ pub fn tunnel_traffic(
+ &self,
+ name: &str,
+ window: TrafficWindow,
+ ) -> Option {
let g = self.state.lock().expect("metrics lock");
let p = g.tunnels.get(name)?;
Some(match window {
diff --git a/server/src/metrics/mod.rs b/server/src/metrics/mod.rs
index 53fc35f..788de46 100644
--- a/server/src/metrics/mod.rs
+++ b/server/src/metrics/mod.rs
@@ -4,7 +4,7 @@ mod hour_counter;
mod mem;
mod traits;
-pub use mem::{MemMetrics, TunnelTrafficHistory, TrafficWindow};
+pub use mem::{MemMetrics, TrafficWindow, TunnelTrafficHistory};
pub use traits::ServerMetrics;
pub const RESERVE_DAYS: usize = 7;
diff --git a/server/src/service/ingress.rs b/server/src/service/ingress.rs
index 8d5563c..9caed72 100644
--- a/server/src/service/ingress.rs
+++ b/server/src/service/ingress.rs
@@ -73,7 +73,10 @@ impl Service {
}
}
- pub(super) async fn run_kcp(self: Arc, mut listener: kcp_tokio::KcpListener) -> Result<()> {
+ pub(super) async fn run_kcp(
+ self: Arc,
+ mut listener: kcp_tokio::KcpListener,
+ ) -> Result<()> {
loop {
let (stream, peer) = transport::accept_kcp(&mut listener).await?;
tracing::debug!(%peer, transport = "kcp", "incoming connection");
diff --git a/server/src/service/mod.rs b/server/src/service/mod.rs
index 3ce0619..8c69a30 100644
--- a/server/src/service/mod.rs
+++ b/server/src/service/mod.rs
@@ -99,9 +99,7 @@ impl Service {
let gw = Arc::clone(gw);
let access = Arc::clone(&this.access);
let shutdown = Arc::clone(&gw_shutdown);
- set.spawn(
- async move { run_http_gw_listener(bind, port, gw, access, shutdown).await },
- );
+ set.spawn(async move { run_http_gw_listener(bind, port, gw, access, shutdown).await });
}
if let Some(ref gw) = this.https_gw {
@@ -110,9 +108,7 @@ impl Service {
let gw = Arc::clone(gw);
let access = Arc::clone(&this.access);
let shutdown = Arc::clone(&gw_shutdown);
- set.spawn(async move {
- run_https_gw_listener(bind, port, gw, access, shutdown).await
- });
+ set.spawn(async move { run_https_gw_listener(bind, port, gw, access, shutdown).await });
}
if this.cfg.quic_enabled() {
diff --git a/server/src/service/session_registry.rs b/server/src/service/session_registry.rs
index 392d8e1..ee5a493 100644
--- a/server/src/service/session_registry.rs
+++ b/server/src/service/session_registry.rs
@@ -152,7 +152,10 @@ impl Service {
c.push_data_conn(stream).await;
Ok(())
}
- None => Err(anyhow!("unknown session_id for data conn: {}", nw.session_id)),
+ None => Err(anyhow!(
+ "unknown session_id for data conn: {}",
+ nw.session_id
+ )),
}
}
}
diff --git a/server/src/tunnel/gw.rs b/server/src/tunnel/gw.rs
index f645b6e..12f29ab 100644
--- a/server/src/tunnel/gw.rs
+++ b/server/src/tunnel/gw.rs
@@ -121,10 +121,7 @@ pub fn normalize_host(host: &str) -> String {
.to_ascii_lowercase()
}
-pub fn build_domains(
- domains: &[String],
- root_domain: &str,
-) -> anyhow::Result> {
+pub fn build_domains(domains: &[String], root_domain: &str) -> anyhow::Result> {
let root = normalize_host(root_domain);
let entries: Vec = domains
.iter()
diff --git a/server/src/tunnel/http.rs b/server/src/tunnel/http.rs
index b7f532b..c984bcb 100644
--- a/server/src/tunnel/http.rs
+++ b/server/src/tunnel/http.rs
@@ -1,6 +1,6 @@
use super::gw::{
build_domains, expand_locations, normalize_host, route_basic_auth_ok, route_user_from_headers,
- HttpRoute, HttpGw,
+ HttpGw, HttpRoute,
};
use crate::access::{prepare_ingress, AccessPolicy};
use crate::control::Control;
@@ -42,21 +42,20 @@ impl HttpTunnel {
for domain in &domains {
for location in &locations {
- gw
- .register(
- domain,
- HttpRoute {
- tunnel_name: name.clone(),
- control: Arc::downgrade(&control),
- location: location.clone(),
- host_header_rewrite: rewrite.clone(),
- basic_auth_user: basic_auth_user.clone(),
- basic_auth_password: basic_auth_password.clone(),
- route_by_http_user: route_by_http_user.clone(),
- limiter: limiter.clone(),
- },
- )
- .await?;
+ gw.register(
+ domain,
+ HttpRoute {
+ tunnel_name: name.clone(),
+ control: Arc::downgrade(&control),
+ location: location.clone(),
+ host_header_rewrite: rewrite.clone(),
+ basic_auth_user: basic_auth_user.clone(),
+ basic_auth_password: basic_auth_password.clone(),
+ route_by_http_user: route_by_http_user.clone(),
+ limiter: limiter.clone(),
+ },
+ )
+ .await?;
}
}
diff --git a/server/src/tunnel/mod.rs b/server/src/tunnel/mod.rs
index 8048ae2..da7336f 100644
--- a/server/src/tunnel/mod.rs
+++ b/server/src/tunnel/mod.rs
@@ -1,13 +1,13 @@
+mod gw;
mod http;
mod https;
mod manager;
mod tcp;
mod udp;
-mod gw;
+pub use gw::HttpGw;
pub use http::{run_http_gw_listener, HttpTunnel};
-pub use https::{run_https_gw_listener, HttpsTunnel, HttpsGw};
-pub use manager::{format_local_addr, TunnelManager, TunnelSummary, RegisteredTunnel};
+pub use https::{run_https_gw_listener, HttpsGw, HttpsTunnel};
+pub use manager::{format_local_addr, RegisteredTunnel, TunnelManager, TunnelSummary};
pub use tcp::TcpTunnel;
pub use udp::UdpTunnel;
-pub use gw::HttpGw;