mirror of
https://codeberg.org/icewind/haze.git
synced 2026-06-03 17:14:08 +02:00
push: add all local ips as trusted proxies
This commit is contained in:
parent
761fe285a7
commit
6a043913fa
6 changed files with 116 additions and 45 deletions
95
Cargo.lock
generated
95
Cargo.lock
generated
|
|
@ -105,7 +105,7 @@ checksum = "d556ec1359574147ec0c4fc5eb525f3f23263a592b1a9c07e0a75b427de55c97"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.99",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -364,7 +364,7 @@ dependencies = [
|
|||
"heck",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.99",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -444,7 +444,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.99",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -462,7 +462,7 @@ dependencies = [
|
|||
"once_cell",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.99",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -541,7 +541,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.99",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -649,6 +649,7 @@ dependencies = [
|
|||
"hyper-reverse-proxy",
|
||||
"hyper-util",
|
||||
"itertools",
|
||||
"local-ip-address",
|
||||
"maplit",
|
||||
"miette",
|
||||
"opener",
|
||||
|
|
@ -952,7 +953,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.99",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -1119,6 +1120,18 @@ version = "0.7.5"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856"
|
||||
|
||||
[[package]]
|
||||
name = "local-ip-address"
|
||||
version = "0.6.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "656b3b27f8893f7bbf9485148ff9a65f019e3f33bd5cdc87c83cab16b3fd9ec8"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"neli",
|
||||
"thiserror 2.0.12",
|
||||
"windows-sys 0.59.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "log"
|
||||
version = "0.4.26"
|
||||
|
|
@ -1171,7 +1184,7 @@ checksum = "bf45bf44ab49be92fd1227a3be6fc6f617f1a337c06af54981048574d8783147"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.99",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -1200,6 +1213,31 @@ dependencies = [
|
|||
"windows-sys 0.52.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "neli"
|
||||
version = "0.6.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "93062a0dce6da2517ea35f301dfc88184ce18d3601ec786a727a87bf535deca9"
|
||||
dependencies = [
|
||||
"byteorder",
|
||||
"libc",
|
||||
"log",
|
||||
"neli-proc-macros",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "neli-proc-macros"
|
||||
version = "0.1.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0c8034b7fbb6f9455b2a96c19e6edf8dc9fc34c70449938d8ee3b4df363f61fe"
|
||||
dependencies = [
|
||||
"either",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"serde",
|
||||
"syn 1.0.109",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "normpath"
|
||||
version = "1.3.0"
|
||||
|
|
@ -1301,7 +1339,7 @@ dependencies = [
|
|||
"regex",
|
||||
"regex-syntax",
|
||||
"structmeta",
|
||||
"syn",
|
||||
"syn 2.0.99",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -1544,7 +1582,7 @@ checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.99",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -1577,7 +1615,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.99",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -1694,7 +1732,7 @@ dependencies = [
|
|||
"proc-macro2",
|
||||
"quote",
|
||||
"structmeta-derive",
|
||||
"syn",
|
||||
"syn 2.0.99",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -1705,7 +1743,7 @@ checksum = "152a0b65a590ff6c3da95cabe2353ee04e6167c896b28e3b14478c2636c922fc"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.99",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -1729,6 +1767,17 @@ version = "3.0.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b7401a30af6cb5818bb64852270bb722533397edcfc7344954a38f420819ece2"
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "1.0.109"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.99"
|
||||
|
|
@ -1757,7 +1806,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.99",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -1829,7 +1878,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.99",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -1840,7 +1889,7 @@ checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.99",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -1919,7 +1968,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.99",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -2017,7 +2066,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.99",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -2163,7 +2212,7 @@ dependencies = [
|
|||
"log",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.99",
|
||||
"wasm-bindgen-shared",
|
||||
]
|
||||
|
||||
|
|
@ -2198,7 +2247,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.99",
|
||||
"wasm-bindgen-backend",
|
||||
"wasm-bindgen-shared",
|
||||
]
|
||||
|
|
@ -2423,7 +2472,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.99",
|
||||
"synstructure",
|
||||
]
|
||||
|
||||
|
|
@ -2445,7 +2494,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.99",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -2465,7 +2514,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.99",
|
||||
"synstructure",
|
||||
]
|
||||
|
||||
|
|
@ -2488,5 +2537,5 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.99",
|
||||
]
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ tracing-subscriber = "0.3.18"
|
|||
atty = "0.2.14"
|
||||
git2 = { version = "0.20.0", default-features = false }
|
||||
itertools = { version = "0.14.0", features = ["use_alloc"] }
|
||||
local-ip-address = "0.6.5"
|
||||
|
||||
hyper-reverse-proxy = { version = "0.5.2-dev", git = "https://github.com/chpio/hyper-reverse-proxy", rev = "6934877eb74465204f605cc1c05ca5a9772db7c0" }
|
||||
hyper = "1.6.0"
|
||||
|
|
|
|||
|
|
@ -57,7 +57,11 @@ impl ActiveInstances {
|
|||
let service = cloud
|
||||
.services()
|
||||
.find(|service| service.name() == service_name)?;
|
||||
let ip = service.get_ip(&self.docker, &cloud.id).await.ok()??;
|
||||
let ip = service
|
||||
.get_ips(&self.docker, &cloud.id)
|
||||
.await
|
||||
.ok()?
|
||||
.next()?;
|
||||
SocketAddr::new(ip, service.proxy_port())
|
||||
} else {
|
||||
SocketAddr::new(
|
||||
|
|
|
|||
|
|
@ -36,7 +36,9 @@ use enum_dispatch::enum_dispatch;
|
|||
use miette::{IntoDiagnostic, Report, Result, WrapErr};
|
||||
use serde_json::Value;
|
||||
use std::collections::HashMap;
|
||||
use std::iter::empty;
|
||||
use std::net::IpAddr;
|
||||
use std::str::FromStr;
|
||||
use std::time::Duration;
|
||||
use tokio::time::{sleep, timeout};
|
||||
|
||||
|
|
@ -128,9 +130,13 @@ pub trait ServiceTrait {
|
|||
.wrap_err("Timeout after 30 seconds")?
|
||||
}
|
||||
|
||||
async fn get_ip(&self, docker: &Docker, cloud_id: &str) -> Result<Option<IpAddr>> {
|
||||
async fn get_ips(
|
||||
&self,
|
||||
docker: &Docker,
|
||||
cloud_id: &str,
|
||||
) -> Result<Box<dyn Iterator<Item = IpAddr>>> {
|
||||
let Some(container) = self.container_name(cloud_id) else {
|
||||
return Ok(None);
|
||||
return Ok(Box::new(empty()));
|
||||
};
|
||||
docker
|
||||
.start_container::<String>(&container, None)
|
||||
|
|
@ -151,20 +157,16 @@ pub trait ServiceTrait {
|
|||
..
|
||||
})
|
||||
) {
|
||||
info.network_settings
|
||||
let ips: Vec<_> = info
|
||||
.network_settings
|
||||
.unwrap()
|
||||
.networks
|
||||
.unwrap()
|
||||
.values()
|
||||
.next()
|
||||
.unwrap()
|
||||
.ip_address
|
||||
.clone()
|
||||
.unwrap()
|
||||
.parse()
|
||||
.into_diagnostic()
|
||||
.map(Some)
|
||||
.wrap_err("Invalid ip address")
|
||||
.filter_map(|network| network.ip_address.clone())
|
||||
.filter_map(|address| IpAddr::from_str(&address).ok())
|
||||
.collect();
|
||||
Ok(Box::new(ips.into_iter()))
|
||||
} else {
|
||||
Err(Report::msg("service not started"))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ impl ServiceTrait for Oc {
|
|||
cloud_id: &str,
|
||||
config: &HazeConfig,
|
||||
) -> Result<Vec<String>> {
|
||||
if let Some(ip) = self.get_ip(docker, cloud_id).await? {
|
||||
if let Some(ip) = self.get_ips(docker, cloud_id).await?.next() {
|
||||
let container = self.container_name(cloud_id).unwrap();
|
||||
let addr = config.proxy.addr(&container, ip);
|
||||
println!("OC running on {addr}");
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ use crate::service::ServiceTrait;
|
|||
use bollard::container::{Config, CreateContainerOptions, NetworkingConfig};
|
||||
use bollard::models::{EndpointSettings, HostConfig};
|
||||
use bollard::Docker;
|
||||
use local_ip_address::list_afinet_netifas;
|
||||
use maplit::hashmap;
|
||||
use miette::{IntoDiagnostic, Result};
|
||||
|
||||
|
|
@ -87,14 +88,28 @@ impl ServiceTrait for NotifyPush {
|
|||
cloud_id: &str,
|
||||
config: &HazeConfig,
|
||||
) -> Result<Vec<String>> {
|
||||
let ip = self.get_ip(docker, cloud_id).await?.unwrap();
|
||||
let addr = config
|
||||
.proxy
|
||||
.addr_with_port(&self.container_name(cloud_id).unwrap(), ip, 7867);
|
||||
Ok(vec![
|
||||
format!("occ config:system:set trusted_proxies 1 --value {}", ip),
|
||||
format!("occ notify_push:setup {}", addr),
|
||||
])
|
||||
let mut ips: Vec<_> = self.get_ips(docker, cloud_id).await?.collect();
|
||||
if let Ok(local_interfaces) = list_afinet_netifas() {
|
||||
ips.extend(local_interfaces.into_iter().map(|(_, ip)| ip));
|
||||
}
|
||||
|
||||
let mut commands: Vec<_> = ips
|
||||
.iter()
|
||||
.enumerate()
|
||||
.map(|(i, ip)| {
|
||||
format!(
|
||||
"occ config:system:set trusted_proxies {} --value {ip}",
|
||||
i + 1
|
||||
)
|
||||
})
|
||||
.collect();
|
||||
|
||||
let addr =
|
||||
config
|
||||
.proxy
|
||||
.addr_with_port(&self.container_name(cloud_id).unwrap(), ips[0], 7867);
|
||||
commands.push(format!("occ notify_push:setup {}", addr));
|
||||
Ok(commands)
|
||||
}
|
||||
|
||||
fn proxy_port(&self) -> u16 {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue