feat: optimize find_matching_rule func (#840)
Signed-off-by: Gaius <gaius.qi@gmail.com>
This commit is contained in:
parent
6d27c92ac6
commit
0e220c4605
|
|
@ -332,9 +332,10 @@ pub async fn http_handler(
|
||||||
|
|
||||||
// If find the matching rule, proxy the request via the dfdaemon.
|
// If find the matching rule, proxy the request via the dfdaemon.
|
||||||
let request_uri = request.uri();
|
let request_uri = request.uri();
|
||||||
if let Some(rule) =
|
if let Some(rule) = find_matching_rule(
|
||||||
find_matching_rule(config.proxy.rules.clone(), request_uri.to_string().as_str())
|
config.proxy.rules.as_deref(),
|
||||||
{
|
request_uri.to_string().as_str(),
|
||||||
|
) {
|
||||||
info!(
|
info!(
|
||||||
"proxy HTTP request via dfdaemon by rule config for method: {}, uri: {}",
|
"proxy HTTP request via dfdaemon by rule config for method: {}, uri: {}",
|
||||||
request.method(),
|
request.method(),
|
||||||
|
|
@ -534,9 +535,10 @@ pub async fn upgraded_handler(
|
||||||
|
|
||||||
// If find the matching rule, proxy the request via the dfdaemon.
|
// If find the matching rule, proxy the request via the dfdaemon.
|
||||||
let request_uri = request.uri();
|
let request_uri = request.uri();
|
||||||
if let Some(rule) =
|
if let Some(rule) = find_matching_rule(
|
||||||
find_matching_rule(config.proxy.rules.clone(), request_uri.to_string().as_str())
|
config.proxy.rules.as_deref(),
|
||||||
{
|
request_uri.to_string().as_str(),
|
||||||
|
) {
|
||||||
info!(
|
info!(
|
||||||
"proxy HTTPS request via dfdaemon by rule config for method: {}, uri: {}",
|
"proxy HTTPS request via dfdaemon by rule config for method: {}, uri: {}",
|
||||||
request.method(),
|
request.method(),
|
||||||
|
|
@ -1068,8 +1070,16 @@ fn make_response_headers(
|
||||||
/// find_matching_rule returns whether the dfdaemon should be used to download the task.
|
/// find_matching_rule returns whether the dfdaemon should be used to download the task.
|
||||||
/// If the dfdaemon should be used, return the matched rule.
|
/// If the dfdaemon should be used, return the matched rule.
|
||||||
#[instrument(skip_all)]
|
#[instrument(skip_all)]
|
||||||
fn find_matching_rule(rules: Option<Vec<Rule>>, url: &str) -> Option<Rule> {
|
fn find_matching_rule(rules: Option<&[Rule]>, url: &str) -> Option<Rule> {
|
||||||
rules?.iter().find(|rule| rule.regex.is_match(url)).cloned()
|
if let Some(rules) = rules {
|
||||||
|
for rule in rules {
|
||||||
|
if rule.regex.is_match(url) {
|
||||||
|
return Some(rule.clone());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
/// make_error_response makes an error response with the given status and message.
|
/// make_error_response makes an error response with the given status and message.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue