Skip to content

Commit 04d0c4f

Browse files
committed
feat: new identification system
1 parent 122dd68 commit 04d0c4f

1 file changed

Lines changed: 41 additions & 15 deletions

File tree

adapter/rest/src/main.rs

Lines changed: 41 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
use base::{
2-
extract_flow_setting_field,
32
runner::{ServerContext, ServerRunner},
43
store::FlowIdentifyResult,
54
traits::{IdentifiableFlow, LoadConfig, Server as ServerTrait},
@@ -36,12 +35,26 @@ struct RequestRoute {
3635

3736
impl IdentifiableFlow for RequestRoute {
3837
fn identify(&self, flow: &ValidationFlow) -> bool {
39-
let url = extract_flow_setting_field(&flow.settings, "HTTP_URL", "url");
40-
let regex_str = match url.as_deref() {
41-
Some(s) => s,
42-
None => return false,
38+
let regex_str = flow
39+
.settings
40+
.iter()
41+
.find(|s| s.flow_setting_id == "HTTP_URL")
42+
.and_then(|s| s.value.as_ref())
43+
.and_then(|v| v.kind.as_ref())
44+
.and_then(|k| match k {
45+
Kind::StringValue(s) => Some(s.as_str()),
46+
_ => None,
47+
});
48+
49+
let Some(regex_str) = regex_str else {
50+
return false;
4351
};
4452

53+
print!(
54+
"Comparing regex {} with literal route: {}",
55+
regex_str, self.url
56+
);
57+
4558
match regex::Regex::new(regex_str) {
4659
Ok(regex) => regex.is_match(&self.url),
4760
Err(err) => {
@@ -71,19 +84,32 @@ impl ServerTrait<HttpServerConfig> for HttpServer {
7184
move |request: HttpRequest| {
7285
let store = Arc::clone(&store);
7386
async move {
74-
let pattern = format!("*.*.REST.{}.{:?}", request.host, request.method);
75-
let route = RequestRoute {
76-
url: request.path.clone(),
77-
};
78-
79-
match store.get_possible_flow_match(pattern, route).await {
80-
FlowIdentifyResult::Single(flow) => {
81-
execute_flow(flow, request, store).await
87+
//Get slug => host/slug/real_path
88+
89+
let splits: Vec<_> = request.path.split("/").collect();
90+
let first = splits.first();
91+
92+
if let Some(slug) = first {
93+
let pattern = format!("REST.{}.*", slug);
94+
let route = RequestRoute {
95+
url: request.path.clone(),
96+
};
97+
98+
match store.get_possible_flow_match(pattern, route).await {
99+
FlowIdentifyResult::Single(flow) => {
100+
print!("Found flow: {}", flow.flow_id);
101+
execute_flow(flow, request, store).await
102+
}
103+
_ => Some(HttpResponse::internal_server_error(
104+
format!("No flow found for path: {}", request.path),
105+
HashMap::new(),
106+
)),
82107
}
83-
_ => Some(HttpResponse::internal_server_error(
108+
} else {
109+
Some(HttpResponse::internal_server_error(
84110
format!("No flow found for path: {}", request.path),
85111
HashMap::new(),
86-
)),
112+
))
87113
}
88114
}
89115
}

0 commit comments

Comments
 (0)