[READ-ONLY] Mirror of https://github.com/FoxxMD/docker-proxy-filter. Filter the contents of Docker API responses
docker docker-socket-proxy filter
0

Configure Feed

Select the types of activity you want to include in your feed.

Implement multiple container name values

FoxxMD (Oct 7, 2025, 8:11 PM UTC) b9c01a22 81f65309

+16 -18
+16 -18
src/main.rs
··· 84 84 body: ntex::util::Bytes, 85 85 client: web::types::State<http::Client>, 86 86 forward_url: web::types::State<url::Url>, 87 - container_name: web::types::State<String>, 87 + container_names: web::types::State<Vec<String>>, 88 88 scrub_env: web::types::State<bool>, 89 89 data: web::types::State<AppStateWithContainerMap> 90 90 ) -> Result<web::HttpResponse, web::Error> { ··· 107 107 let containers = &res.json::<Vec<ContainerSummary>>().await.unwrap(); 108 108 109 109 let filtered_containers = containers.into_iter() 110 - .filter(|&con| is_container_named(con, &container_name.get_ref())) 110 + .filter(|&con| is_container_named(con, &container_names.get_ref())) 111 111 .collect::<Vec<&ContainerSummary>>(); 112 112 113 113 let fresp = web::HttpResponse::build(res.status()).json(&filtered_containers); ··· 137 137 138 138 match name_val { 139 139 Some(n) => { 140 - if n.contains(container_name.get_ref()) { //n.iter().any(|x| x.contains(container_name.get_ref())) { 140 + if container_names.get_ref().iter().any(|x| n.contains(x)) { 141 + //if n.contains(container_name.get_ref()) { //n.iter().any(|x| x.contains(container_name.get_ref())) { 141 142 142 143 if m.resource == "json" { 143 144 ··· 205 206 // match_container_get(&haystack).is_some() 206 207 // } 207 208 208 - fn is_container_named(container: &ContainerSummary, container_name: &String) -> bool { 209 - return Option::is_some(&container.names.clone().unwrap().iter().find(|&y| { 210 - return y.contains(container_name); 209 + fn is_container_named(container: &ContainerSummary, container_names: &Vec<String>) -> bool { 210 + return Option::is_some(&container.names.clone().unwrap().iter().find(|&y| { 211 + return container_names.iter().any(|z| y.contains(z)); 211 212 })); 212 213 } 213 214 ··· 254 255 let _log_guard = slog_stdlog::init().unwrap(); 255 256 256 257 257 - let proxy_url_env = env::var("PROXY_URL"); 258 258 let mut proxy_url: String = String::new(); 259 259 260 - match proxy_url_env { 260 + match env::var("PROXY_URL") { 261 261 Ok(val) => { 262 262 info!("PROXY_URL: {val}"); 263 263 proxy_url.push_str(&val); 264 264 }, 265 - Err(e) => { 265 + Err(_) => { 266 266 error!("Missing PROXY_URL"); 267 267 panic!(); 268 268 }, 269 269 } 270 270 271 - let container_name_env = env::var("CONTAINER_NAME"); 272 - let mut container_name: String = String::new(); 271 + let container_names: Vec<String>; 273 272 274 - match container_name_env { 273 + match env::var("CONTAINER_NAME") { 275 274 Ok(val) => { 276 - info!("CONTAINER_NAME: {val}"); 277 - container_name.push_str(&val); 275 + container_names = val.split(',').map(|x| x.trim().to_string()).collect(); 276 + info!("CONTAINER_NAMES: {}", container_names.join(" | ")); 278 277 }, 279 - Err(e) => { 278 + Err(_) => { 280 279 error!("Missing CONTAINER_NAME"); 281 280 panic!(); 282 281 }, ··· 288 287 info!("SCRUB_ENVS: {truthy}"); 289 288 truthy 290 289 }, 291 - Err(e) => { 290 + Err(_) => { 292 291 info!("SCRUB_ENVS: false"); 293 292 false 294 293 }, ··· 304 303 web::App::new() 305 304 .state(http::Client::new()) 306 305 .state(forward_url.clone()) 307 - .state(container_name.clone()) 308 - //.state(logger.clone()) 306 + .state(container_names.clone()) 309 307 .state(cm.clone()) 310 308 .state(scub_env.clone()) 311 309 .wrap(web::middleware::Logger::default())