diff --git a/src/server/rest.rs b/src/server/rest.rs index 70c8b2c1..5577116b 100644 --- a/src/server/rest.rs +++ b/src/server/rest.rs @@ -313,7 +313,13 @@ pub async fn handle_api_request, token: Option, api: &Arc, parts: Parts) -> Response { +fn get_index( + userid: Option, + token: Option, + language: Option, + api: &Arc, + parts: Parts, +) -> Response { let nodename = proxmox::tools::nodename(); let userid = userid.as_ref().map(|u| u.as_str()).unwrap_or(""); @@ -333,10 +339,18 @@ fn get_index(userid: Option, token: Option, api: &Arc } } + 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; + } + } + let data = json!({ "NodeName": nodename, "UserName": userid, "CSRFPreventionToken": token, + "language": lang, "debug": debug, }); @@ -441,12 +455,14 @@ async fn handle_static_file_download(filename: PathBuf) -> Result (Option, Option) { +fn extract_auth_data(headers: &http::HeaderMap) -> (Option, Option, Option) { let mut ticket = None; + let mut language = None; if let Some(raw_cookie) = headers.get("COOKIE") { if let Ok(cookie) = raw_cookie.to_str() { ticket = tools::extract_cookie(cookie, "PBSAuthCookie"); + language = tools::extract_cookie(cookie, "PBSLangCookie"); } } @@ -455,7 +471,7 @@ fn extract_auth_data(headers: &http::HeaderMap) -> (Option, Option None, }; - (ticket, token) + (ticket, token, language) } fn check_auth( @@ -526,7 +542,7 @@ pub async fn handle_request(api: Arc, req: Request) -> Result rpcenv.set_user(Some(userid.to_string())), Err(err) => { @@ -573,20 +589,20 @@ pub async fn handle_request(api: Arc, req: Request) -> Result { let new_token = assemble_csrf_prevention_token(csrf_secret(), &userid); - return Ok(get_index(Some(userid), Some(new_token), &api, parts)); + return Ok(get_index(Some(userid), Some(new_token), language, &api, parts)); } _ => { tokio::time::delay_until(Instant::from_std(delay_unauth_time)).await; - return Ok(get_index(None, None, &api, parts)); + return Ok(get_index(None, None, language, &api, parts)); } } } else { - return Ok(get_index(None, None, &api, parts)); + return Ok(get_index(None, None, language, &api, parts)); } } else { let filename = api.find_alias(&components);