Turn dc_ensure_secret_key_existy into something more rusty

This marks the function safe and returns Result, it also now returns
the ConfiguredAddr since it has to look this up anyway and it makes
testing more easy.  Turns out it reduces some duplicate SQL query in
some callers too.

More test code has been moved from dc_imex to test_utils as it's
more genrally applicable.
This commit is contained in:
Floris Bruynooghe
2019-08-03 23:39:10 +02:00
committed by Floris Bruynooghe
parent ff39fa0fed
commit f31f603c8b
9 changed files with 199 additions and 174 deletions

View File

@@ -584,7 +584,12 @@ impl<'a> Contact<'a> {
.unwrap_or_else(|_| std::ptr::null_mut())
}
pub fn get_encrinfo(context: &Context, contact_id: u32) -> String {
/// Returns a textual summary of the encryption state for the contact.
///
/// This function returns a string explaining the encryption state
/// of the contact and if the connection is encrypted the
/// fingerprints of the keys involved.
pub fn get_encrinfo(context: &Context, contact_id: u32) -> Result<String> {
let mut ret = String::new();
if let Ok(contact) = Contact::load_from_db(context, contact_id) {
@@ -603,7 +608,7 @@ impl<'a> Contact<'a> {
});
ret += &p;
if self_key.is_none() {
unsafe { dc_ensure_secret_key_exists(context) };
dc_ensure_secret_key_exists(context)?;
self_key = Key::from_self_public(context, &loginparam.addr, &context.sql);
}
let p = context.stock_str(StockMessage::FingerPrints);
@@ -646,7 +651,7 @@ impl<'a> Contact<'a> {
}
}
ret
Ok(ret)
}
/// Delete a contact. The contact is deleted from the local device. It may happen that this is not