Spaces:
Running
Running
neon_arch commited on
Commit ·
38ba4bd
1
Parent(s): 64c4d2c
♻️ refactor(routes): serve the new maud file for search page and remove unwanted functions and pass values to the maud html template directly (#302)
Browse files- src/server/routes/search.rs +30 -37
src/server/routes/search.rs
CHANGED
|
@@ -6,13 +6,12 @@ use crate::{
|
|
| 6 |
handler::paths::{file_path, FileType},
|
| 7 |
models::{
|
| 8 |
aggregation_models::SearchResults,
|
| 9 |
-
engine_models::EngineHandler,
|
| 10 |
server_models::{Cookie, SearchParams},
|
| 11 |
},
|
| 12 |
results::aggregator::aggregate,
|
| 13 |
};
|
| 14 |
use actix_web::{get, web, HttpRequest, HttpResponse};
|
| 15 |
-
use handlebars::Handlebars;
|
| 16 |
use regex::Regex;
|
| 17 |
use std::{
|
| 18 |
fs::File,
|
|
@@ -20,19 +19,6 @@ use std::{
|
|
| 20 |
};
|
| 21 |
use tokio::join;
|
| 22 |
|
| 23 |
-
/// Handles the route of any other accessed route/page which is not provided by the
|
| 24 |
-
/// website essentially the 404 error page.
|
| 25 |
-
pub async fn not_found(
|
| 26 |
-
hbs: web::Data<Handlebars<'_>>,
|
| 27 |
-
config: web::Data<Config>,
|
| 28 |
-
) -> Result<HttpResponse, Box<dyn std::error::Error>> {
|
| 29 |
-
let page_content: String = hbs.render("404", &config.style)?;
|
| 30 |
-
|
| 31 |
-
Ok(HttpResponse::Ok()
|
| 32 |
-
.content_type("text/html; charset=utf-8")
|
| 33 |
-
.body(page_content))
|
| 34 |
-
}
|
| 35 |
-
|
| 36 |
/// Handles the route of search page of the `websurfx` meta search engine website and it takes
|
| 37 |
/// two search url parameters `q` and `page` where `page` parameter is optional.
|
| 38 |
///
|
|
@@ -49,7 +35,6 @@ pub async fn not_found(
|
|
| 49 |
/// ```
|
| 50 |
#[get("/search")]
|
| 51 |
pub async fn search(
|
| 52 |
-
hbs: web::Data<Handlebars<'_>>,
|
| 53 |
req: HttpRequest,
|
| 54 |
config: web::Data<Config>,
|
| 55 |
cache: web::Data<SharedCache>,
|
|
@@ -58,7 +43,7 @@ pub async fn search(
|
|
| 58 |
match ¶ms.q {
|
| 59 |
Some(query) => {
|
| 60 |
if query.trim().is_empty() {
|
| 61 |
-
return Ok(HttpResponse::
|
| 62 |
.insert_header(("location", "/"))
|
| 63 |
.finish());
|
| 64 |
}
|
|
@@ -112,10 +97,17 @@ pub async fn search(
|
|
| 112 |
)
|
| 113 |
);
|
| 114 |
|
| 115 |
-
|
| 116 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 117 |
}
|
| 118 |
-
None => Ok(HttpResponse::
|
| 119 |
.insert_header(("location", "/"))
|
| 120 |
.finish()),
|
| 121 |
}
|
|
@@ -150,7 +142,7 @@ async fn results(
|
|
| 150 |
// check if fetched cache results was indeed fetched or it was an error and if so
|
| 151 |
// handle the data accordingly.
|
| 152 |
match cached_results {
|
| 153 |
-
Ok(results) => Ok(results),
|
| 154 |
Err(_) => {
|
| 155 |
let mut safe_search_level: u8 = match config.safe_search {
|
| 156 |
3..=4 => config.safe_search,
|
|
@@ -171,8 +163,6 @@ async fn results(
|
|
| 171 |
|
| 172 |
if _flag {
|
| 173 |
results.set_disallowed();
|
| 174 |
-
results.add_style(&config.style);
|
| 175 |
-
results.set_page_query(query);
|
| 176 |
cache.cache_results(&results, &url).await?;
|
| 177 |
results.set_safe_search_level(safe_search_level);
|
| 178 |
return Ok(results);
|
|
@@ -221,23 +211,27 @@ async fn results(
|
|
| 221 |
true => {
|
| 222 |
let mut search_results = SearchResults::default();
|
| 223 |
search_results.set_no_engines_selected();
|
| 224 |
-
search_results.set_page_query(query);
|
| 225 |
search_results
|
| 226 |
}
|
| 227 |
}
|
| 228 |
}
|
| 229 |
-
None =>
|
| 230 |
-
|
| 231 |
-
|
| 232 |
-
|
| 233 |
-
|
| 234 |
-
|
| 235 |
-
|
| 236 |
-
|
| 237 |
-
|
| 238 |
-
|
| 239 |
-
|
| 240 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 241 |
};
|
| 242 |
if results.engine_errors_info().is_empty()
|
| 243 |
&& results.results().is_empty()
|
|
@@ -245,7 +239,6 @@ async fn results(
|
|
| 245 |
{
|
| 246 |
results.set_filtered();
|
| 247 |
}
|
| 248 |
-
results.add_style(&config.style);
|
| 249 |
cache
|
| 250 |
.cache_results(&results, &(format!("{url}{safe_search_level}")))
|
| 251 |
.await?;
|
|
|
|
| 6 |
handler::paths::{file_path, FileType},
|
| 7 |
models::{
|
| 8 |
aggregation_models::SearchResults,
|
| 9 |
+
engine_models::{EngineError, EngineHandler},
|
| 10 |
server_models::{Cookie, SearchParams},
|
| 11 |
},
|
| 12 |
results::aggregator::aggregate,
|
| 13 |
};
|
| 14 |
use actix_web::{get, web, HttpRequest, HttpResponse};
|
|
|
|
| 15 |
use regex::Regex;
|
| 16 |
use std::{
|
| 17 |
fs::File,
|
|
|
|
| 19 |
};
|
| 20 |
use tokio::join;
|
| 21 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 22 |
/// Handles the route of search page of the `websurfx` meta search engine website and it takes
|
| 23 |
/// two search url parameters `q` and `page` where `page` parameter is optional.
|
| 24 |
///
|
|
|
|
| 35 |
/// ```
|
| 36 |
#[get("/search")]
|
| 37 |
pub async fn search(
|
|
|
|
| 38 |
req: HttpRequest,
|
| 39 |
config: web::Data<Config>,
|
| 40 |
cache: web::Data<SharedCache>,
|
|
|
|
| 43 |
match ¶ms.q {
|
| 44 |
Some(query) => {
|
| 45 |
if query.trim().is_empty() {
|
| 46 |
+
return Ok(HttpResponse::TemporaryRedirect()
|
| 47 |
.insert_header(("location", "/"))
|
| 48 |
.finish());
|
| 49 |
}
|
|
|
|
| 97 |
)
|
| 98 |
);
|
| 99 |
|
| 100 |
+
Ok(HttpResponse::Ok().body(
|
| 101 |
+
crate::templates::views::search::search(
|
| 102 |
+
&config.style.colorscheme,
|
| 103 |
+
&config.style.theme,
|
| 104 |
+
query,
|
| 105 |
+
&results?,
|
| 106 |
+
)
|
| 107 |
+
.0,
|
| 108 |
+
))
|
| 109 |
}
|
| 110 |
+
None => Ok(HttpResponse::TemporaryRedirect()
|
| 111 |
.insert_header(("location", "/"))
|
| 112 |
.finish()),
|
| 113 |
}
|
|
|
|
| 142 |
// check if fetched cache results was indeed fetched or it was an error and if so
|
| 143 |
// handle the data accordingly.
|
| 144 |
match cached_results {
|
| 145 |
+
Ok(results) => Ok(dbg!(results.clone())),
|
| 146 |
Err(_) => {
|
| 147 |
let mut safe_search_level: u8 = match config.safe_search {
|
| 148 |
3..=4 => config.safe_search,
|
|
|
|
| 163 |
|
| 164 |
if _flag {
|
| 165 |
results.set_disallowed();
|
|
|
|
|
|
|
| 166 |
cache.cache_results(&results, &url).await?;
|
| 167 |
results.set_safe_search_level(safe_search_level);
|
| 168 |
return Ok(results);
|
|
|
|
| 211 |
true => {
|
| 212 |
let mut search_results = SearchResults::default();
|
| 213 |
search_results.set_no_engines_selected();
|
|
|
|
| 214 |
search_results
|
| 215 |
}
|
| 216 |
}
|
| 217 |
}
|
| 218 |
+
None => aggregate(
|
| 219 |
+
query,
|
| 220 |
+
page,
|
| 221 |
+
config.aggregator.random_delay,
|
| 222 |
+
config.debug,
|
| 223 |
+
&config
|
| 224 |
+
.upstream_search_engines
|
| 225 |
+
.clone()
|
| 226 |
+
.into_iter()
|
| 227 |
+
.filter_map(|(key, value)| value.then_some(key))
|
| 228 |
+
.map(|engine| EngineHandler::new(&engine))
|
| 229 |
+
.collect::<Result<Vec<EngineHandler>, error_stack::Report<EngineError>>>(
|
| 230 |
+
)?,
|
| 231 |
+
config.request_timeout,
|
| 232 |
+
safe_search_level,
|
| 233 |
+
)
|
| 234 |
+
.await?,
|
| 235 |
};
|
| 236 |
if results.engine_errors_info().is_empty()
|
| 237 |
&& results.results().is_empty()
|
|
|
|
| 239 |
{
|
| 240 |
results.set_filtered();
|
| 241 |
}
|
|
|
|
| 242 |
cache
|
| 243 |
.cache_results(&results, &(format!("{url}{safe_search_level}")))
|
| 244 |
.await?;
|