[Fix] Stability

This commit is contained in:
Alex Emmet 2026-08-28 13:16:57 +02:00
commit ad208fd298
No known key found for this signature in database
12 changed files with 281 additions and 98 deletions

View file

@ -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())
);
}
}