Initial implementation: relay server + common protocol + client stub
This commit is contained in:
commit
7285a33cff
17 changed files with 926 additions and 0 deletions
62
crates/server/src/main.rs
Normal file
62
crates/server/src/main.rs
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
mod session;
|
||||
mod ws_handler;
|
||||
mod api;
|
||||
mod auth;
|
||||
|
||||
use std::sync::Arc;
|
||||
use axum::{
|
||||
Router,
|
||||
routing::{get, post},
|
||||
middleware,
|
||||
};
|
||||
use tokio::net::TcpListener;
|
||||
use tracing::info;
|
||||
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
|
||||
|
||||
use session::SessionStore;
|
||||
use auth::require_api_key;
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct AppState {
|
||||
pub sessions: Arc<SessionStore>,
|
||||
pub api_key: String,
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> anyhow::Result<()> {
|
||||
tracing_subscriber::registry()
|
||||
.with(tracing_subscriber::EnvFilter::try_from_default_env()
|
||||
.unwrap_or_else(|_| "helios_server=debug,tower_http=info".into()))
|
||||
.with(tracing_subscriber::fmt::layer())
|
||||
.init();
|
||||
|
||||
let api_key = std::env::var("HELIOS_API_KEY")
|
||||
.unwrap_or_else(|_| "dev-secret".to_string());
|
||||
|
||||
let bind_addr = std::env::var("HELIOS_BIND")
|
||||
.unwrap_or_else(|_| "0.0.0.0:3000".to_string());
|
||||
|
||||
let state = AppState {
|
||||
sessions: Arc::new(SessionStore::new()),
|
||||
api_key,
|
||||
};
|
||||
|
||||
let protected = Router::new()
|
||||
.route("/sessions", get(api::list_sessions))
|
||||
.route("/sessions/:id/screenshot", post(api::request_screenshot))
|
||||
.route("/sessions/:id/exec", post(api::request_exec))
|
||||
.route("/sessions/:id/click", post(api::request_click))
|
||||
.route("/sessions/:id/type", post(api::request_type))
|
||||
.route("/sessions/:id/label", post(api::set_label))
|
||||
.layer(middleware::from_fn_with_state(state.clone(), require_api_key));
|
||||
|
||||
let app = Router::new()
|
||||
.route("/ws", get(ws_handler::ws_upgrade))
|
||||
.merge(protected)
|
||||
.with_state(state);
|
||||
|
||||
info!("helios-server listening on {bind_addr}");
|
||||
let listener = TcpListener::bind(&bind_addr).await?;
|
||||
axum::serve(listener, app).await?;
|
||||
Ok(())
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue