[Fix] Stability
This commit is contained in:
parent
dfe8e6efa7
commit
ad208fd298
12 changed files with 281 additions and 98 deletions
50
src/main.rs
50
src/main.rs
|
|
@ -8,7 +8,7 @@ mod rho;
|
|||
mod services;
|
||||
mod util;
|
||||
|
||||
use std::path::PathBuf;
|
||||
use std::{fmt::Write, path::PathBuf};
|
||||
|
||||
use dotenv::dotenv;
|
||||
use once_cell::sync::Lazy;
|
||||
|
|
@ -27,7 +27,7 @@ use crate::{
|
|||
omega::omega_connection::{OmegaConnection, start_task_cleanup_loop},
|
||||
rho::rho_manager::RhoManager,
|
||||
rho::server::start,
|
||||
util::logger::startup,
|
||||
util::logger::{PrintType, startup},
|
||||
};
|
||||
|
||||
const KEYRING_PATH: &str = "./omikron.mk";
|
||||
|
|
@ -71,6 +71,18 @@ async fn main() {
|
|||
return;
|
||||
}
|
||||
};
|
||||
let public_key = match omega_database_public_key(&keyring) {
|
||||
Ok(public_key) => public_key,
|
||||
Err(error) => {
|
||||
eprintln!("Unable to serialize public key for Omega: {error}");
|
||||
return;
|
||||
}
|
||||
};
|
||||
log!(
|
||||
0,
|
||||
PrintType::Omikron,
|
||||
"Omikron public_key for Omega enrollment: {public_key}"
|
||||
);
|
||||
|
||||
let omega_keyring = match keyring_for_omega(&keyring) {
|
||||
Ok(keyring) => keyring,
|
||||
|
|
@ -102,5 +114,37 @@ async fn main() {
|
|||
}
|
||||
|
||||
fn keyring_for_omega(keyring: &Keyring) -> Result<Keyring, String> {
|
||||
Keyring::from_bytes(&keyring.to_bytes()).map_err(|error| error.to_string())
|
||||
let bytes = keyring.try_to_bytes().map_err(|error| error.to_string())?;
|
||||
Keyring::from_bytes(&bytes).map_err(|error| error.to_string())
|
||||
}
|
||||
|
||||
fn omega_database_public_key(keyring: &Keyring) -> Result<String, String> {
|
||||
let public_key = keyring
|
||||
.public_key_bundle()
|
||||
.try_as_bytes()
|
||||
.map_err(|error| error.to_string())?;
|
||||
omega_database_blob_literal(&public_key)
|
||||
}
|
||||
|
||||
fn omega_database_blob_literal(public_key: &[u8]) -> Result<String, String> {
|
||||
let mut literal = String::with_capacity(3 + public_key.len() * 2);
|
||||
literal.push_str("X'");
|
||||
for byte in public_key {
|
||||
write!(&mut literal, "{byte:02X}").map_err(|error| error.to_string())?;
|
||||
}
|
||||
literal.push('\'');
|
||||
Ok(literal)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn public_key_blob_literal_is_valid_mysql_hex_syntax() {
|
||||
assert_eq!(
|
||||
omega_database_blob_literal(&[0x00, 0x1A, 0xFF]),
|
||||
Ok("X'001AFF'".to_string())
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue