diff --git a/crates/musicus_backend/src/lib.rs b/crates/musicus_backend/src/lib.rs
index 5b6995b..d6f2f89 100644
--- a/crates/musicus_backend/src/lib.rs
+++ b/crates/musicus_backend/src/lib.rs
@@ -74,7 +74,7 @@ impl Backend {
}
}
- if let Some(data) = secure::load_login_data()? {
+ if let Some(data) = Self::load_login_data().await? {
self.client.set_login_data(data);
}
@@ -95,7 +95,7 @@ impl Backend {
/// Set the user credentials to use.
pub async fn set_login_data(&self, data: LoginData) -> Result<()> {
- secure::store_login_data(data.clone()).await?;
+ Self::store_login_data(data.clone()).await?;
self.client.set_login_data(data);
Ok(())
}
diff --git a/crates/musicus_backend/src/secure.rs b/crates/musicus_backend/src/secure.rs
index 702015f..02c34e4 100644
--- a/crates/musicus_backend/src/secure.rs
+++ b/crates/musicus_backend/src/secure.rs
@@ -1,71 +1,80 @@
-use crate::Result;
+use crate::{Backend, Result};
use musicus_client::LoginData;
use futures_channel::oneshot;
use secret_service::{Collection, EncryptionType, SecretService};
use std::collections::HashMap;
use std::thread;
-/// Savely store the user's current login credentials.
-pub async fn store_login_data(data: LoginData) -> Result<()> {
- let (sender, receiver) = oneshot::channel();
- thread::spawn(move || sender.send(store_login_data_priv(data)).unwrap());
- receiver.await?
-}
-
-/// Savely store the user's current login credentials.
-fn store_login_data_priv(data: LoginData) -> Result<()> {
- let ss = SecretService::new(EncryptionType::Dh)?;
- let collection = get_collection(&ss)?;
-
- let key = "musicus-login-data";
- delete_secrets(&collection, key)?;
-
- let mut attributes = HashMap::new();
- attributes.insert("username", data.username.as_str());
- collection.create_item(key, attributes, data.password.as_bytes(), true, "text/plain")?;
-
- Ok(())
-}
-
-/// Get the login credentials from secret storage.
-pub fn load_login_data() -> Result