mirror of
https://github.com/Start9Labs/start-os.git
synced 2026-03-30 12:11:56 +00:00
* fix live-build resolv.conf * improved debuggability * wip: start-tunnel * fixes for trixie and tor * non-free-firmware on trixie * wip * web server WIP * wip: tls refactor * FE patchdb, mocks, and most endpoints * fix editing records and patch mocks * refactor complete * finish api * build and formatter update * minor change toi viewing addresses and fix build * fixes * more providers * endpoint for getting config * fix tests * api fixes * wip: separate port forward controller into parts * simplify iptables rules * bump sdk * misc fixes * predict next subnet and ip, use wan ips, and form validation * refactor: break big components apart and address todos (#3043) * refactor: break big components apart and address todos * starttunnel readme, fix pf mocks, fix adding tor domain in startos --------- Co-authored-by: Matt Hill <mattnine@protonmail.com> * better tui * tui tweaks * fix: address comments * better regex for subnet * fixes * better validation * handle rpc errors * build fixes * fix: address comments (#3044) * fix: address comments * fix unread notification mocks * fix row click for notification --------- Co-authored-by: Matt Hill <mattnine@protonmail.com> * fix raspi build * fix build * fix build * fix build * fix build * try to fix build * fix tests * fix tests * fix rsync tests * delete useless effectful test --------- Co-authored-by: Matt Hill <mattnine@protonmail.com> Co-authored-by: Alex Inkin <alexander@inkin.ru>
56 lines
1.4 KiB
Rust
56 lines
1.4 KiB
Rust
use std::net::SocketAddr;
|
|
|
|
use axum::extract::Request;
|
|
use axum::response::Response;
|
|
use imbl_value::json;
|
|
use rpc_toolkit::Middleware;
|
|
use serde::Deserialize;
|
|
|
|
#[derive(Clone, Default)]
|
|
pub struct ConnectInfo {
|
|
peer_addr: Option<SocketAddr>,
|
|
local_addr: Option<SocketAddr>,
|
|
}
|
|
impl ConnectInfo {
|
|
pub fn new() -> Self {
|
|
Self::default()
|
|
}
|
|
}
|
|
|
|
#[derive(Deserialize)]
|
|
pub struct Metadata {
|
|
get_connect_info: bool,
|
|
}
|
|
|
|
impl<Context: Send + Sync + 'static> Middleware<Context> for ConnectInfo {
|
|
type Metadata = Metadata;
|
|
async fn process_http_request(
|
|
&mut self,
|
|
_: &Context,
|
|
request: &mut Request,
|
|
) -> Result<(), Response> {
|
|
if let Some(axum::extract::ConnectInfo((peer, local))) = request.extensions().get().cloned()
|
|
{
|
|
self.peer_addr = Some(peer);
|
|
self.local_addr = Some(local);
|
|
}
|
|
Ok(())
|
|
}
|
|
async fn process_rpc_request(
|
|
&mut self,
|
|
_: &Context,
|
|
metadata: Self::Metadata,
|
|
request: &mut rpc_toolkit::RpcRequest,
|
|
) -> Result<(), rpc_toolkit::RpcResponse> {
|
|
if metadata.get_connect_info {
|
|
if let Some(peer_addr) = self.peer_addr {
|
|
request.params["__ConnectInfo_peer_addr"] = json!(peer_addr);
|
|
}
|
|
if let Some(local_addr) = self.local_addr {
|
|
request.params["__ConnectInfo_local_addr"] = json!(local_addr);
|
|
}
|
|
}
|
|
Ok(())
|
|
}
|
|
}
|