Files
tuliprox/src/api/api_utils.rs
T

51 lines
2.2 KiB
Rust
Raw Normal View History

2023-10-27 19:03:29 +02:00
use std::path::{Path};
use actix_web::http::header::{CACHE_CONTROL, HeaderValue};
use actix_web::{HttpRequest, HttpResponse, web};
2023-10-25 09:57:44 +02:00
use crate::api::api_model::{AppState, UserApiRequest};
use crate::model::api_proxy::{ApiProxyServerInfo, UserCredentials};
use crate::model::config::{Config, ConfigTarget};
pub(crate) async fn serve_file(file_path: &Path, req: &HttpRequest, mime_type: mime::Mime) -> HttpResponse {
if file_path.exists() {
2023-12-01 21:38:23 +01:00
if let Ok(file) = actix_files::NamedFile::open_async(file_path).await {
let mut result = file.set_content_type(mime_type)
2023-12-01 21:38:23 +01:00
.disable_content_disposition().into_response(req);
let headers = result.headers_mut();
headers.insert(CACHE_CONTROL, HeaderValue::from_bytes("no-cache".as_bytes()).unwrap());
return result;
}
}
2023-12-01 21:38:23 +01:00
HttpResponse::NoContent().finish()
}
pub(crate) fn get_user_target_by_credentials<'a>(username: &str, password: &str, api_req: &'a UserApiRequest,
app_state: &'a web::Data<AppState>) -> Option<(UserCredentials, &'a ConfigTarget)> {
if !username.is_empty() && !password.is_empty() {
2023-12-01 21:38:23 +01:00
app_state.config.get_target_for_user(username, password)
} else {
2023-10-25 21:07:38 +02:00
let token = api_req.token.as_str().trim();
if !token.is_empty() {
app_state.config.get_target_for_user_by_token(token)
} else {
None
}
}
2023-11-22 21:06:58 +01:00
}
pub(crate) fn get_user_target<'a>(api_req: &'a UserApiRequest, app_state: &'a web::Data<AppState>) -> Option<(UserCredentials, &'a ConfigTarget)> {
2023-11-22 21:06:58 +01:00
let username = api_req.username.as_str().trim();
let password = api_req.password.as_str().trim();
get_user_target_by_credentials(username, password, api_req, app_state)
}
pub(crate) fn get_user_server_info(cfg: &Config, user: &UserCredentials) -> ApiProxyServerInfo {
let server_info_list = cfg._api_proxy.read().unwrap().as_ref().unwrap().server.clone();
let server_info_name = match &user.server {
Some(server_name) => server_name.as_str(),
None => "default"
};
match server_info_list.iter().find(|c| c.name.eq(server_info_name)) {
Some(info) => info.clone(),
None => server_info_list.first().unwrap().clone(),
}
}