|
|
|
@ -21,7 +21,7 @@ use std::{
|
|
|
|
|
fs::create_dir_all,
|
|
|
|
|
panic,
|
|
|
|
|
path::Path,
|
|
|
|
|
process::{exit, Command},
|
|
|
|
|
process::exit,
|
|
|
|
|
str::FromStr,
|
|
|
|
|
thread,
|
|
|
|
|
time::Duration,
|
|
|
|
@ -53,7 +53,10 @@ fn main() {
|
|
|
|
|
let extra_debug = matches!(level, LF::Trace | LF::Debug);
|
|
|
|
|
|
|
|
|
|
check_data_folder();
|
|
|
|
|
check_rsa_keys();
|
|
|
|
|
check_rsa_keys().unwrap_or_else(|_| {
|
|
|
|
|
error!("Error creating keys, exiting...");
|
|
|
|
|
exit(1);
|
|
|
|
|
});
|
|
|
|
|
check_web_vault();
|
|
|
|
|
|
|
|
|
|
create_icon_cache_folder();
|
|
|
|
@ -249,52 +252,29 @@ fn check_data_folder() {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn check_rsa_keys() {
|
|
|
|
|
fn check_rsa_keys()-> Result<(), crate::error::Error> {
|
|
|
|
|
// If the RSA keys don't exist, try to create them
|
|
|
|
|
if !util::file_exists(&CONFIG.private_rsa_key()) || !util::file_exists(&CONFIG.public_rsa_key()) {
|
|
|
|
|
info!("JWT keys don't exist, checking if OpenSSL is available...");
|
|
|
|
|
|
|
|
|
|
Command::new("openssl").arg("version").status().unwrap_or_else(|_| {
|
|
|
|
|
info!(
|
|
|
|
|
"Can't create keys because OpenSSL is not available, make sure it's installed and available on the PATH"
|
|
|
|
|
);
|
|
|
|
|
exit(1);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
info!("OpenSSL detected, creating keys...");
|
|
|
|
|
|
|
|
|
|
let key = CONFIG.rsa_key_filename();
|
|
|
|
|
|
|
|
|
|
let pem = format!("{}.pem", key);
|
|
|
|
|
let priv_der = format!("{}.der", key);
|
|
|
|
|
let pub_der = format!("{}.pub.der", key);
|
|
|
|
|
let priv_path = CONFIG.private_rsa_key();
|
|
|
|
|
let pub_path = CONFIG.public_rsa_key();
|
|
|
|
|
|
|
|
|
|
let mut success = Command::new("openssl")
|
|
|
|
|
.args(&["genrsa", "-out", &pem])
|
|
|
|
|
.status()
|
|
|
|
|
.expect("Failed to create private pem file")
|
|
|
|
|
.success();
|
|
|
|
|
if !util::file_exists(&priv_path) {
|
|
|
|
|
let rsa_key = openssl::rsa::Rsa::generate(2048)?;
|
|
|
|
|
|
|
|
|
|
success &= Command::new("openssl")
|
|
|
|
|
.args(&["rsa", "-in", &pem, "-outform", "DER", "-out", &priv_der])
|
|
|
|
|
.status()
|
|
|
|
|
.expect("Failed to create private der file")
|
|
|
|
|
.success();
|
|
|
|
|
let priv_key = rsa_key.private_key_to_pem()?;
|
|
|
|
|
crate::util::write_file(&priv_path, &priv_key)?;
|
|
|
|
|
info!("Private key created correctly.");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
success &= Command::new("openssl")
|
|
|
|
|
.args(&["rsa", "-in", &priv_der, "-inform", "DER"])
|
|
|
|
|
.args(&["-RSAPublicKey_out", "-outform", "DER", "-out", &pub_der])
|
|
|
|
|
.status()
|
|
|
|
|
.expect("Failed to create public der file")
|
|
|
|
|
.success();
|
|
|
|
|
if !util::file_exists(&pub_path) {
|
|
|
|
|
let rsa_key = openssl::rsa::Rsa::private_key_from_pem(&util::read_file(&priv_path)?)?;
|
|
|
|
|
|
|
|
|
|
if success {
|
|
|
|
|
info!("Keys created correctly.");
|
|
|
|
|
} else {
|
|
|
|
|
error!("Error creating keys, exiting...");
|
|
|
|
|
exit(1);
|
|
|
|
|
}
|
|
|
|
|
let pub_key = rsa_key.public_key_to_pem()?;
|
|
|
|
|
crate::util::write_file(&pub_path, &pub_key)?;
|
|
|
|
|
info!("Public key created correctly.");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
auth::load_keys();
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn check_web_vault() {
|
|
|
|
|