proxy: refactor gui-language logic
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
parent
e5e48b01ad
commit
af35bc8b9c
@ -28,7 +28,7 @@ use proxmox_sys::{task_log, task_warn};
|
|||||||
use pbs_datastore::DataStore;
|
use pbs_datastore::DataStore;
|
||||||
|
|
||||||
use proxmox_rest_server::{
|
use proxmox_rest_server::{
|
||||||
cleanup_old_tasks, extract_cookie, rotate_task_log_archive, ApiConfig, AuthError,
|
cleanup_old_tasks, cookie_from_header, rotate_task_log_archive, ApiConfig, AuthError,
|
||||||
RestEnvironment, RestServer, ServerAdapter, WorkerTask,
|
RestEnvironment, RestServer, ServerAdapter, WorkerTask,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -108,17 +108,23 @@ impl ServerAdapter for ProxmoxBackupProxyAdapter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn extract_lang_header(headers: &http::HeaderMap) -> Option<String> {
|
/// check for a cookie with the user-preferred language, fallback to the config one if not set or
|
||||||
if let Some(Ok(cookie)) = headers.get("COOKIE").map(|v| v.to_str()) {
|
/// not existing
|
||||||
return extract_cookie(cookie, "PBSLangCookie");
|
fn get_language(headers: &http::HeaderMap) -> String {
|
||||||
|
let exists = |l: &str| Path::new(&format!("/usr/share/pbs-i18n/pbs-lang-{}.js", l)).exists();
|
||||||
|
|
||||||
|
match cookie_from_header(headers, "PBSLangCookie") {
|
||||||
|
Some(cookie_lang) if exists(&cookie_lang) => cookie_lang,
|
||||||
|
_ => match proxmox_backup::config::node::config().map(|(cfg, _)| cfg.default_lang) {
|
||||||
|
Ok(Some(default_lang)) if exists(&default_lang) => default_lang,
|
||||||
|
_ => String::from(""),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
None
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn get_index_future(env: RestEnvironment, parts: Parts) -> Response<Body> {
|
async fn get_index_future(env: RestEnvironment, parts: Parts) -> Response<Body> {
|
||||||
let auth_id = env.get_auth_id();
|
let auth_id = env.get_auth_id();
|
||||||
let api = env.api_config();
|
let api = env.api_config();
|
||||||
let language = extract_lang_header(&parts.headers);
|
|
||||||
|
|
||||||
// fixme: make all IO async
|
// fixme: make all IO async
|
||||||
|
|
||||||
@ -155,27 +161,11 @@ async fn get_index_future(env: RestEnvironment, parts: Parts) -> Response<Body>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut lang = String::from("");
|
|
||||||
if let Some(language) = language {
|
|
||||||
if Path::new(&format!("/usr/share/pbs-i18n/pbs-lang-{}.js", language)).exists() {
|
|
||||||
lang = language;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if lang.is_empty() {
|
|
||||||
if let Ok((config, _)) = proxmox_backup::config::node::config() {
|
|
||||||
if let Some(default) = config.default_lang {
|
|
||||||
if Path::new(&format!("/usr/share/pbs-i18n/pbs-lang-{}.js", default)).exists() {
|
|
||||||
lang = default;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let data = json!({
|
let data = json!({
|
||||||
"NodeName": nodename,
|
"NodeName": nodename,
|
||||||
"UserName": user,
|
"UserName": user,
|
||||||
"CSRFPreventionToken": csrf_token,
|
"CSRFPreventionToken": csrf_token,
|
||||||
"language": lang,
|
"language": get_language(&parts.headers),
|
||||||
"debug": debug,
|
"debug": debug,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user