Radish alpha
r
Radicle desktop app
Radicle
Git (anonymous pull)
Log in to clone via SSH
Add authenticate command
Sebastian Martinez committed 1 year ago
commit cf2f43e4657742103cc9bfd841be0ed994546720
parent 029362787e232c2a75332df7df453f93b39f8ea7
2 files changed +28 -0
added src-tauri/src/auth.rs
@@ -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)?,
+
    }
+
}
modified src-tauri/src/lib.rs
@@ -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");
}