Magic DNS and easytier-web improvements (#856)

1. dns add macos system config
2. allow easytier-web serve dashboard and api in same port
This commit is contained in:
Sijie.Sun
2025-05-18 16:34:35 +08:00
committed by GitHub
parent 28fe6257be
commit 7c6daf7c56
7 changed files with 250 additions and 18 deletions
+19
View File
@@ -29,6 +29,12 @@ use crate::client_manager::storage::StorageToken;
use crate::client_manager::ClientManager;
use crate::db::Db;
/// Embed assets for web dashboard, build frontend first
#[cfg(feature = "embed")]
#[derive(rust_embed::RustEmbed, Clone)]
#[folder = "frontend/dist/"]
struct Assets;
pub struct RestfulServer {
bind_addr: SocketAddr,
client_mgr: Arc<ClientManager>,
@@ -38,6 +44,8 @@ pub struct RestfulServer {
delete_task: Option<ScopedTask<tower_sessions::session_store::Result<()>>>,
network_api: NetworkApi,
enable_web_embed: bool,
}
type AppStateInner = Arc<ClientManager>;
@@ -87,6 +95,7 @@ impl RestfulServer {
bind_addr: SocketAddr,
client_mgr: Arc<ClientManager>,
db: Db,
enable_web_embed: bool,
) -> anyhow::Result<Self> {
assert!(client_mgr.is_running());
@@ -99,6 +108,7 @@ impl RestfulServer {
serve_task: None,
delete_task: None,
network_api,
enable_web_embed,
})
}
@@ -219,6 +229,15 @@ impl RestfulServer {
.layer(tower_http::cors::CorsLayer::very_permissive())
.layer(compression_layer);
#[cfg(feature = "embed")]
let app = if self.enable_web_embed {
use axum_embed::ServeEmbed;
let service = ServeEmbed::<Assets>::new();
app.fallback_service(service)
} else {
app
};
let task = tokio::spawn(async move {
axum::serve(listener, app).await.unwrap();
});