Change sbot::init to not panic and instead return an error

This commit is contained in:
notplants 2022-07-12 13:13:22 +02:00
parent f41f8b55d2
commit e9667a57be
3 changed files with 29 additions and 13 deletions

View File

@ -1,6 +1,6 @@
[package] [package]
name = "golgi" name = "golgi"
version = "0.2.2" version = "0.2.3"
edition = "2021" edition = "2021"
authors = ["Max Fowler <max@mfowler.info>", "Andrew Reid <glyph@mycelial.technology>"] authors = ["Max Fowler <max@mfowler.info>", "Andrew Reid <glyph@mycelial.technology>"]
readme = "README.md" readme = "README.md"

View File

@ -34,6 +34,8 @@ pub enum GolgiError {
Rpc(RpcError), Rpc(RpcError),
/// Go-sbot error. /// Go-sbot error.
Sbot(String), Sbot(String),
/// Error initializing Go-sbot.
SbotInit(String),
/// SSB sigil-link error. /// SSB sigil-link error.
SigilLink(String), SigilLink(String),
/// JSON serialization or deserialization error. /// JSON serialization or deserialization error.
@ -57,6 +59,7 @@ impl std::error::Error for GolgiError {
GolgiError::Feed(ref err) => Some(err), GolgiError::Feed(ref err) => Some(err),
GolgiError::Rpc(ref err) => Some(err), GolgiError::Rpc(ref err) => Some(err),
GolgiError::Sbot(_) => None, GolgiError::Sbot(_) => None,
GolgiError::SbotInit(_) => None,
GolgiError::SigilLink(_) => None, GolgiError::SigilLink(_) => None,
GolgiError::SerdeJson(ref err) => Some(err), GolgiError::SerdeJson(ref err) => Some(err),
GolgiError::ContentType(_) => None, GolgiError::ContentType(_) => None,
@ -78,6 +81,9 @@ impl std::fmt::Display for GolgiError {
// then have the core display msg be: "SSB RPC error: {}", context // then have the core display msg be: "SSB RPC error: {}", context
GolgiError::Rpc(ref err) => write!(f, "SSB RPC failure: {}", err), GolgiError::Rpc(ref err) => write!(f, "SSB RPC failure: {}", err),
GolgiError::Sbot(ref err) => write!(f, "Sbot returned an error response: {}", err), GolgiError::Sbot(ref err) => write!(f, "Sbot returned an error response: {}", err),
GolgiError::SbotInit(ref err) => {
write!(f, "Sbot encountered an initialization error: {}", err)
}
GolgiError::SigilLink(ref context) => write!(f, "SSB blob ID error: {}", context), GolgiError::SigilLink(ref context) => write!(f, "SSB blob ID error: {}", context),
GolgiError::SerdeJson(_) => write!(f, "Failed to serialize JSON slice"), GolgiError::SerdeJson(_) => write!(f, "Failed to serialize JSON slice"),
//GolgiError::WhoAmI(ref err) => write!(f, "{}", err), //GolgiError::WhoAmI(ref err) => write!(f, "{}", err),

View File

@ -75,25 +75,35 @@ impl Sbot {
}; };
let OwnedIdentity { pk, sk, id } = match keystore { let OwnedIdentity { pk, sk, id } = match keystore {
Keystore::Patchwork => keystore::from_patchwork_local() Keystore::Patchwork => keystore::from_patchwork_local().await.map_err(|_err| {
.await GolgiError::SbotInit(
.expect("couldn't read local patchwork secret from default location"), "couldn't read local patchwork secret from default location".to_string(),
Keystore::GoSbot => keystore::from_gosbot_local() )
.await })?,
.expect("couldn't read local go-sbot secret from default location"), Keystore::GoSbot => keystore::from_gosbot_local().await.map_err(|_err| {
GolgiError::SbotInit(
"couldn't read local go-sbot secret from default location".to_string(),
)
})?,
Keystore::CustomGoSbot(key_path) => { Keystore::CustomGoSbot(key_path) => {
keystore::from_custom_gosbot_keypath(key_path.to_string()) keystore::from_custom_gosbot_keypath(key_path.to_string())
.await .await
.unwrap_or_else(|_| { .map_err(|_err| {
panic!("couldn't read local go-sbot secret from: {}", key_path) GolgiError::SbotInit(format!(
}) "couldn't read local go-sbot secret from: {}",
key_path
))
})?
} }
Keystore::CustomPatchwork(key_path) => { Keystore::CustomPatchwork(key_path) => {
keystore::from_custom_patchwork_keypath(key_path.to_string()) keystore::from_custom_patchwork_keypath(key_path.to_string())
.await .await
.unwrap_or_else(|_| { .map_err(|_err| {
panic!("couldn't read local patchwork secret from: {}", key_path) GolgiError::SbotInit(format!(
}) "couldn't read local patchwork secret from: {}",
key_path
))
})?
} }
}; };