Skip to content

Commit 53bac19

Browse files
authored
fix(api): fix provider proxy endpoint and proxies endpoint returning provider proxies (#837)
* some fixes * up
1 parent 74fc25d commit 53bac19

File tree

2 files changed

+21
-22
lines changed

2 files changed

+21
-22
lines changed

clash_lib/src/app/api/handlers/provider.rs

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ pub fn routes(outbound_manager: ThreadSafeOutboundManager) -> Router<Arc<AppStat
3838
.route("/healthcheck", get(get_proxy_delay))
3939
.layer(middleware::from_fn_with_state(
4040
state.clone(),
41-
find_provider_proxy_by_name,
41+
find_proxy_provider_proxy_by_name,
4242
))
4343
.with_state(state.clone()),
4444
)
@@ -72,21 +72,25 @@ async fn get_providers(State(state): State<ProviderState>) -> impl IntoResponse
7272
axum::response::Json(res)
7373
}
7474

75+
#[derive(Deserialize)]
76+
struct ProviderNamePath {
77+
provider_name: String,
78+
}
7579
async fn find_proxy_provider_by_name(
7680
State(state): State<ProviderState>,
77-
Path(name): Path<String>,
81+
Path(ProviderNamePath { provider_name }): Path<ProviderNamePath>,
7882
mut req: Request<axum::body::Body>,
7983
next: Next,
8084
) -> Response {
8185
let outbound_manager = state.outbound_manager.clone();
82-
match outbound_manager.get_proxy_provider(&name) {
86+
match outbound_manager.get_proxy_provider(&provider_name) {
8387
Some(provider) => {
8488
req.extensions_mut().insert(provider);
8589
next.run(req).await
8690
}
8791
_ => (
8892
StatusCode::NOT_FOUND,
89-
format!("proxy provider {} not found", name),
93+
format!("proxy provider {} not found", provider_name),
9094
)
9195
.into_response(),
9296
}
@@ -126,16 +130,19 @@ async fn provider_healthcheck(
126130
(StatusCode::ACCEPTED, "provider healthcheck")
127131
}
128132

129-
async fn find_provider_proxy_by_name(
133+
#[derive(Deserialize)]
134+
struct ProviderProxyPath {
135+
proxy_name: String,
136+
}
137+
async fn find_proxy_provider_proxy_by_name(
130138
Extension(provider): Extension<ThreadSafeProxyProvider>,
131-
Path(params): Path<HashMap<String, String>>,
139+
Path(ProviderProxyPath { proxy_name }): Path<ProviderProxyPath>,
132140
mut req: Request<axum::body::Body>,
133141
next: Next,
134142
) -> Response {
135-
let proxy = provider.read().await.proxies().await;
136-
let proxy = proxy
137-
.iter()
138-
.find(|x| Some(&x.name().to_string()) == params.get("proxy_name"));
143+
let provider = provider.read().await;
144+
let proxies = provider.proxies().await;
145+
let proxy = proxies.iter().find(|x| x.name() == proxy_name);
139146

140147
if let Some(proxy) = proxy {
141148
req.extensions_mut().insert(proxy.clone());
@@ -145,8 +152,8 @@ async fn find_provider_proxy_by_name(
145152
StatusCode::NOT_FOUND,
146153
format!(
147154
"proxy {} not found in provider {}",
148-
params.get("proxy_name").unwrap(),
149-
provider.read().await.name()
155+
proxy_name,
156+
provider.name()
150157
),
151158
)
152159
.into_response()

clash_lib/src/app/outbound/manager.rs

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -115,21 +115,13 @@ impl OutboundManager {
115115
self.selector_control.get(name).cloned()
116116
}
117117

118-
/// Get all proxies in the manager, including those from providers.
118+
/// Get all proxies in the manager, excluding those in providers.
119119
pub async fn get_proxies(&self) -> HashMap<String, Box<dyn Serialize + Send>> {
120120
let mut r = HashMap::new();
121121

122122
let proxy_manager = &self.proxy_manager;
123123

124-
let mut provider_handlers = HashMap::new();
125-
for provider in self.proxy_providers.values() {
126-
let proxies = provider.read().await.proxies().await;
127-
for proxy in proxies {
128-
provider_handlers.insert(proxy.name().to_owned(), proxy.clone());
129-
}
130-
}
131-
132-
for (k, v) in self.handlers.iter().chain(provider_handlers.iter()) {
124+
for (k, v) in self.handlers.iter() {
133125
let mut m = if let Some(g) = v.try_as_group_handler() {
134126
g.as_map().await
135127
} else {

0 commit comments

Comments
 (0)