mirror of
https://seed.radicle.dev/rad:z4V1sjrXqjvFdnCUbxPFqd5p4DtH5.git
synced 2026-11-15 19:30:38 +08:00
Add authenticate command
Checks if there is a profile to be loaded, if the ssh agent is running and if there is a Radicle identity stored in the ssh-agent.
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
use anyhow::anyhow;
|
||||
use radicle::crypto::ssh;
|
||||
|
||||
use crate::{error::Error, AppState};
|
||||
|
||||
#[tauri::command]
|
||||
pub fn authenticate(ctx: tauri::State<AppState>) -> Result<(), Error> {
|
||||
let profile = &ctx.profile;
|
||||
|
||||
if !profile.keystore.is_encrypted()? {
|
||||
return Ok(());
|
||||
}
|
||||
match ssh::agent::Agent::connect() {
|
||||
Ok(mut agent) => {
|
||||
if agent.request_identities()?.contains(&profile.public_key) {
|
||||
return Ok(());
|
||||
} else {
|
||||
Err(Error::WithHint {
|
||||
err: anyhow!("Not able to find your keys in the ssh agent"),
|
||||
hint: "Make sure to run <code>rad auth</code> in your terminal to add your keys to the ssh-agent.",
|
||||
})?
|
||||
}
|
||||
}
|
||||
Err(e) if e.is_not_running() => Err(Error::WithHint { err: anyhow!("SSH Agent is not running"), hint: "For now we require the user to have an ssh agent running, since we don't have passphrase inputs yet." })?,
|
||||
Err(e) => Err(e)?,
|
||||
}
|
||||
}
|
||||
@@ -31,6 +31,7 @@ pub fn run() {
|
||||
})
|
||||
.plugin(tauri_plugin_shell::init())
|
||||
.plugin(tauri_plugin_window_state::Builder::default().build())
|
||||
.invoke_handler(tauri::generate_handler![authenticate])
|
||||
.run(tauri::generate_context!())
|
||||
.expect("error while running tauri application");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user