Compare commits
No commits in common. "34bec8fdaeb9f31d12db1f52208c0eb8a7c4f3b9" and "a027922b0e051b4eecc50ebbf96e511cae29664d" have entirely different histories.
34bec8fdae
...
a027922b0e
1 changed files with 44 additions and 43 deletions
|
@ -67,12 +67,8 @@ mod imp {
|
|||
|
||||
#[template_callback]
|
||||
pub(super) async fn on_authn_validate_activated(&self) {
|
||||
assert!(self.obj().authn_can_validate());
|
||||
self.obj().set_authn_can_validate(false);
|
||||
|
||||
assert!(self.obj().authn_can_edit());
|
||||
self.obj().set_authn_can_edit(false);
|
||||
|
||||
self.obj().set_status("Connecting...");
|
||||
|
||||
let api = match crate::subsonic::Client::with_password(
|
||||
|
@ -89,17 +85,51 @@ mod imp {
|
|||
}
|
||||
};
|
||||
|
||||
if let Err(err) = api.ping().await {
|
||||
self.obj().set_status(format!("Error: {err}"));
|
||||
self.obj().set_authn_can_validate(true);
|
||||
self.obj().set_authn_can_edit(true);
|
||||
return;
|
||||
match api.ping().await {
|
||||
Ok(()) => {
|
||||
self.obj().set_status("Connected");
|
||||
self.save().await;
|
||||
|
||||
// please REMOVEME once we've killed vala
|
||||
fn get_random_salt(length: usize) -> String {
|
||||
use rand::Rng;
|
||||
let mut rng = rand::thread_rng();
|
||||
std::iter::repeat(())
|
||||
// 0.9: s/distributions/distr
|
||||
.map(|()| rng.sample(rand::distributions::Alphanumeric))
|
||||
.map(char::from)
|
||||
.take(length)
|
||||
.collect::<String>()
|
||||
}
|
||||
let new_salt = get_random_salt(8);
|
||||
use md5::Digest;
|
||||
let mut hasher = md5::Md5::new();
|
||||
hasher.update(self.obj().password().as_bytes());
|
||||
hasher.update(new_salt.as_bytes());
|
||||
let new_token_bytes = hasher.finalize();
|
||||
let new_token = base16ct::lower::encode_string(&new_token_bytes);
|
||||
|
||||
let vala_api = crate::subsonic_vala::Client::with_token(
|
||||
&self.obj().server_url(),
|
||||
&self.obj().username(),
|
||||
&new_token,
|
||||
&new_salt,
|
||||
);
|
||||
self.obj().emit_by_name::<()>("connected", &[&vala_api]);
|
||||
}
|
||||
Err(err) => {
|
||||
self.obj().set_status(format!("Error: {err}"));
|
||||
self.obj().set_authn_can_validate(true);
|
||||
}
|
||||
}
|
||||
|
||||
self.obj().set_status("Connected");
|
||||
self.obj().set_authn_can_edit(true);
|
||||
}
|
||||
|
||||
async fn save(&self) {
|
||||
self.obj().set_authn_can_edit(false);
|
||||
|
||||
// FIXME: remove unwraps
|
||||
// TODO remove unwraps etc etc
|
||||
let keyring = oo7::Keyring::new().await.unwrap();
|
||||
let mut attributes = vec![("xdg:schema", crate::APP_ID.to_string())];
|
||||
// clear previous passwords
|
||||
|
@ -117,34 +147,7 @@ mod imp {
|
|||
.await
|
||||
.unwrap();
|
||||
|
||||
// please REMOVEME once we've killed vala
|
||||
fn get_random_salt(length: usize) -> String {
|
||||
use rand::Rng;
|
||||
let mut rng = rand::thread_rng();
|
||||
std::iter::repeat(())
|
||||
// 0.9: s/distributions/distr
|
||||
.map(|()| rng.sample(rand::distributions::Alphanumeric))
|
||||
.map(char::from)
|
||||
.take(length)
|
||||
.collect::<String>()
|
||||
}
|
||||
let new_salt = get_random_salt(8);
|
||||
use md5::Digest;
|
||||
let mut hasher = md5::Md5::new();
|
||||
hasher.update(self.obj().password().as_bytes());
|
||||
hasher.update(new_salt.as_bytes());
|
||||
let new_token_bytes = hasher.finalize();
|
||||
let new_token = base16ct::lower::encode_string(&new_token_bytes);
|
||||
|
||||
let vala_api = crate::subsonic_vala::Client::with_token(
|
||||
&self.obj().server_url(),
|
||||
&self.obj().username(),
|
||||
&new_token,
|
||||
&new_salt,
|
||||
);
|
||||
self.obj().set_authn_can_edit(true);
|
||||
|
||||
self.obj().emit_by_name::<()>("connected", &[&vala_api]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -164,11 +167,7 @@ impl Setup {
|
|||
#[weak(rename_to = self_)]
|
||||
self,
|
||||
async move {
|
||||
self_.set_server_url("");
|
||||
self_.set_username("");
|
||||
self_.set_password("");
|
||||
self_.set_authn_can_edit(false);
|
||||
self_.set_authn_can_validate(false);
|
||||
|
||||
// TODO remove unwraps, make sure authn_can_edit is set back to true
|
||||
let keyring = oo7::Keyring::new().await.unwrap();
|
||||
|
@ -177,6 +176,9 @@ impl Setup {
|
|||
|
||||
if items.is_empty() {
|
||||
// didn't find shit, leave all empty
|
||||
self_.set_server_url("");
|
||||
self_.set_username("");
|
||||
self_.set_password("");
|
||||
// TODO: onboarding
|
||||
self_.set_authn_can_edit(true);
|
||||
self_.set_authn_can_validate(true);
|
||||
|
@ -190,7 +192,6 @@ impl Setup {
|
|||
self_.set_password(String::from_utf8_lossy(&item.secret().await.unwrap()));
|
||||
|
||||
// first connection
|
||||
self_.set_authn_can_edit(true); // act as if the user had inputted this
|
||||
self_.set_authn_can_validate(true);
|
||||
self_.imp().on_authn_validate_activated().await;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue