|
@ -1,7 +1,7 @@ |
|
|
use once_cell::sync::Lazy; |
|
|
use once_cell::sync::Lazy; |
|
|
use serde::de::DeserializeOwned; |
|
|
use serde::de::DeserializeOwned; |
|
|
use serde_json::Value; |
|
|
use serde_json::Value; |
|
|
use std::{env, process::Command, time::Duration}; |
|
|
use std::{env, time::Duration}; |
|
|
|
|
|
|
|
|
use reqwest::{blocking::Client, header::USER_AGENT}; |
|
|
use reqwest::{blocking::Client, header::USER_AGENT}; |
|
|
use rocket::{ |
|
|
use rocket::{ |
|
@ -68,7 +68,6 @@ static CAN_BACKUP: Lazy<bool> = Lazy::new(|| { |
|
|
DbConnType::from_url(&CONFIG.database_url()) |
|
|
DbConnType::from_url(&CONFIG.database_url()) |
|
|
.map(|t| t == DbConnType::sqlite) |
|
|
.map(|t| t == DbConnType::sqlite) |
|
|
.unwrap_or(false) |
|
|
.unwrap_or(false) |
|
|
&& Command::new("sqlite3").arg("-version").status().is_ok() |
|
|
|
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
#[get("/")] |
|
|
#[get("/")] |
|
@ -502,9 +501,17 @@ fn diagnostics(_token: AdminToken, ip_header: IpHeader, conn: DbConn) -> ApiResu |
|
|
use std::net::ToSocketAddrs; |
|
|
use std::net::ToSocketAddrs; |
|
|
|
|
|
|
|
|
// Get current running versions
|
|
|
// Get current running versions
|
|
|
let vault_version_path = format!("{}/{}", CONFIG.web_vault_folder(), "version.json"); |
|
|
let web_vault_version: WebVaultVersion = match read_file_string(&format!("{}/{}", CONFIG.web_vault_folder(), "bwrs-version.json")) { |
|
|
let vault_version_str = read_file_string(&vault_version_path)?; |
|
|
Ok(s) => serde_json::from_str(&s)?, |
|
|
let web_vault_version: WebVaultVersion = serde_json::from_str(&vault_version_str)?; |
|
|
_ => { |
|
|
|
|
|
match read_file_string(&format!("{}/{}", CONFIG.web_vault_folder(), "version.json")) { |
|
|
|
|
|
Ok(s) => serde_json::from_str(&s)?, |
|
|
|
|
|
_ => { |
|
|
|
|
|
WebVaultVersion{version: String::from("Version file missing")} |
|
|
|
|
|
}, |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
// Execute some environment checks
|
|
|
// Execute some environment checks
|
|
|
let running_within_docker = is_running_in_docker(); |
|
|
let running_within_docker = is_running_in_docker(); |
|
@ -557,9 +564,10 @@ fn diagnostics(_token: AdminToken, ip_header: IpHeader, conn: DbConn) -> ApiResu |
|
|
|
|
|
|
|
|
let diagnostics_json = json!({ |
|
|
let diagnostics_json = json!({ |
|
|
"dns_resolved": dns_resolved, |
|
|
"dns_resolved": dns_resolved, |
|
|
"web_vault_version": web_vault_version.version, |
|
|
|
|
|
"latest_release": latest_release, |
|
|
"latest_release": latest_release, |
|
|
"latest_commit": latest_commit, |
|
|
"latest_commit": latest_commit, |
|
|
|
|
|
"web_vault_enabled": &CONFIG.web_vault_enabled(), |
|
|
|
|
|
"web_vault_version": web_vault_version.version, |
|
|
"latest_web_build": latest_web_build, |
|
|
"latest_web_build": latest_web_build, |
|
|
"running_within_docker": running_within_docker, |
|
|
"running_within_docker": running_within_docker, |
|
|
"has_http_access": has_http_access, |
|
|
"has_http_access": has_http_access, |
|
@ -571,6 +579,7 @@ fn diagnostics(_token: AdminToken, ip_header: IpHeader, conn: DbConn) -> ApiResu |
|
|
"db_type": *DB_TYPE, |
|
|
"db_type": *DB_TYPE, |
|
|
"db_version": get_sql_server_version(&conn), |
|
|
"db_version": get_sql_server_version(&conn), |
|
|
"admin_url": format!("{}/diagnostics", admin_url(Referer(None))), |
|
|
"admin_url": format!("{}/diagnostics", admin_url(Referer(None))), |
|
|
|
|
|
"server_time_local": Local::now().format("%Y-%m-%d %H:%M:%S %Z").to_string(), |
|
|
"server_time": Utc::now().format("%Y-%m-%d %H:%M:%S UTC").to_string(), // Run the date/time check as the last item to minimize the difference
|
|
|
"server_time": Utc::now().format("%Y-%m-%d %H:%M:%S UTC").to_string(), // Run the date/time check as the last item to minimize the difference
|
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
@ -596,11 +605,11 @@ fn delete_config(_token: AdminToken) -> EmptyResult { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
#[post("/config/backup_db")] |
|
|
#[post("/config/backup_db")] |
|
|
fn backup_db(_token: AdminToken) -> EmptyResult { |
|
|
fn backup_db(_token: AdminToken, conn: DbConn) -> EmptyResult { |
|
|
if *CAN_BACKUP { |
|
|
if *CAN_BACKUP { |
|
|
backup_database() |
|
|
backup_database(&conn) |
|
|
} else { |
|
|
} else { |
|
|
err!("Can't back up current DB (either it's not SQLite or the 'sqlite' binary is not present)"); |
|
|
err!("Can't back up current DB (Only SQLite supports this feature)"); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|