git.delta.rocks / remowt / refs/commits / eadb0bb3c19e

difftreelog

feat auto prompter

ymurrvruYaroslav Bolyukin3 days agoparent: #751b8f1.patch.diff
in: trunk

9 files changed

modifiedCargo.lockdiffbeforeafterboth
308308
309[[package]]309[[package]]
310name = "bifrostlink"310name = "bifrostlink"
311version = "0.2.3"311version = "0.2.4"
312source = "registry+https://github.com/rust-lang/crates.io-index"312source = "registry+https://github.com/rust-lang/crates.io-index"
313checksum = "704657867d2107831c57edd363726440c86675464b5fc113702854e17062cafc"313checksum = "ad2d0e30a2aa432b78f41f9676572f88201d4dc73bc2b7bc90704d2e02b7d062"
314dependencies = [314dependencies = [
315 "async-trait",315 "async-trait",
316 "async_fn_traits",316 "async_fn_traits",
327327
328[[package]]328[[package]]
329name = "bifrostlink-macros"329name = "bifrostlink-macros"
330version = "0.2.3"330version = "0.2.4"
331source = "registry+https://github.com/rust-lang/crates.io-index"331source = "registry+https://github.com/rust-lang/crates.io-index"
332checksum = "158308eb569b467c0116680f79d0ecc389f4d540f6d5a0c9279bfe79b1cd5bdb"332checksum = "e2121559c45cbe89c4f8d1d741360d5b028577254f6beca053dc02332da85b43"
333dependencies = [333dependencies = [
334 "proc-macro2",334 "proc-macro2",
335 "quote",335 "quote",
338338
339[[package]]339[[package]]
340name = "bifrostlink-ports"340name = "bifrostlink-ports"
341version = "0.2.3"341version = "0.2.4"
342source = "registry+https://github.com/rust-lang/crates.io-index"342source = "registry+https://github.com/rust-lang/crates.io-index"
343checksum = "7612993f0bd8bc6a71867461266567212a35a716b2a5aef5f9967ab08c891782"343checksum = "e9395c4ccca497b0c50583e6de57aca921c046ae0c10f56030cd2c5a20db05f8"
344dependencies = [344dependencies = [
345 "bifrostlink",345 "bifrostlink",
346 "bytes",346 "bytes",
18351835
1836[[package]]1836[[package]]
1837name = "polkit-backend"1837name = "polkit-backend"
1838version = "0.1.3"1838version = "0.1.4"
1839dependencies = [1839dependencies = [
1840 "anyhow",1840 "anyhow",
1841 "clap",1841 "clap",
20552055
2056[[package]]2056[[package]]
2057name = "remowt-agent"2057name = "remowt-agent"
2058version = "0.1.3"2058version = "0.1.4"
2059dependencies = [2059dependencies = [
2060 "anyhow",2060 "anyhow",
2061 "bifrostlink",2061 "bifrostlink",
20832083
2084[[package]]2084[[package]]
2085name = "remowt-client"2085name = "remowt-client"
2086version = "0.1.3"2086version = "0.1.4"
2087dependencies = [2087dependencies = [
2088 "anyhow",2088 "anyhow",
2089 "bifrostlink",2089 "bifrostlink",
21062106
2107[[package]]2107[[package]]
2108name = "remowt-endpoints"2108name = "remowt-endpoints"
2109version = "0.1.3"2109version = "0.1.4"
2110dependencies = [2110dependencies = [
2111 "anyhow",2111 "anyhow",
2112 "bifrostlink",2112 "bifrostlink",
21242124
2125[[package]]2125[[package]]
2126name = "remowt-link-shared"2126name = "remowt-link-shared"
2127version = "0.1.3"2127version = "0.1.4"
2128dependencies = [2128dependencies = [
2129 "bifrostlink",2129 "bifrostlink",
2130 "bytes",2130 "bytes",
21382138
2139[[package]]2139[[package]]
2140name = "remowt-plugin"2140name = "remowt-plugin"
2141version = "0.1.3"2141version = "0.1.4"
2142dependencies = [2142dependencies = [
2143 "anyhow",2143 "anyhow",
2144 "bifrostlink",2144 "bifrostlink",
21522152
2153[[package]]2153[[package]]
2154name = "remowt-polkit-shared"2154name = "remowt-polkit-shared"
2155version = "0.1.3"2155version = "0.1.4"
2156dependencies = [2156dependencies = [
2157 "nix",2157 "nix",
2158 "serde",2158 "serde",
21612161
2162[[package]]2162[[package]]
2163name = "remowt-ssh"2163name = "remowt-ssh"
2164version = "0.1.3"2164version = "0.1.4"
2165dependencies = [2165dependencies = [
2166 "anyhow",2166 "anyhow",
2167 "async-trait",2167 "async-trait",
21892189
2190[[package]]2190[[package]]
2191name = "remowt-ui-prompt"2191name = "remowt-ui-prompt"
2192version = "0.1.3"2192version = "0.1.4"
2193dependencies = [2193dependencies = [
2194 "anyhow",
2194 "bifrostlink",2195 "bifrostlink",
2195 "bifrostlink-macros",2196 "bifrostlink-macros",
2196 "serde",2197 "serde",
modifiedCargo.tomldiffbeforeafterboth
3resolver = "2"3resolver = "2"
44
5[workspace.package]5[workspace.package]
6version = "0.1.3"6version = "0.1.4"
7license = "MIT"7license = "MIT"
8edition = "2021"8edition = "2021"
9repository = "https://git.delta.rocks/r/remowt"9repository = "https://git.delta.rocks/r/remowt"
52thiserror = "2.0.18"52thiserror = "2.0.18"
5353
54[profile.release]54[profile.release]
55strip = true
56panic = "abort"55panic = "abort"
57opt-level = "z"56opt-level = "z"
58lto = true57lto = true
modifiedcmds/remowt-agent/src/askpass.rsdiffbeforeafterboth
2use std::io::Write as _;2use std::io::Write as _;
33
4use anyhow::Context as _;4use anyhow::Context as _;
5use remowt_ui_prompt::bifrost::PromptEndpointsClient;
6use remowt_ui_prompt::dbus::{DbusPrompterInterface, DbusPrompterProxy};5use remowt_ui_prompt::dbus::{DbusPrompterInterface, DbusPrompterProxy, BUS_NAME, PROMPTER_PATH};
7use remowt_ui_prompt::Source;6use remowt_ui_prompt::{Prompter, Source};
8use zbus::Connection;7use tracing::debug;
9
10use remowt_link_shared::BifConfig;8use zbus::Connection;
11
12const BUS_NAME: &str = "lach.RemowtAskpass";
13const PROMPTER_PATH: &str = "/lach/Askpass";
149
15pub async fn serve(10pub async fn serve<P>(conn: &Connection, prompter: P) -> anyhow::Result<()>
16 conn: &Connection,11where
17 prompter: PromptEndpointsClient<BifConfig>,12 P: Prompter + 'static,
18) -> anyhow::Result<()> {13{
19 conn.object_server()14 conn.object_server()
20 .at(PROMPTER_PATH, DbusPrompterInterface(prompter))15 .at(PROMPTER_PATH, DbusPrompterInterface(prompter))
21 .await?;16 .await?;
22 conn.request_name(BUS_NAME).await?;17 match conn.request_name(BUS_NAME).await {
18 Ok(()) => {}
19 Err(zbus::Error::NameTaken) => {
20 debug!("{BUS_NAME} already owned, chaining to upstream");
21 }
22 Err(e) => return Err(e.into()),
23 }
23 Ok(())24 Ok(())
24}25}
2526
modifiedcmds/remowt-agent/src/main.rsdiffbeforeafterboth
12use bifrostlink_ports::unix_socket::from_socket;12use bifrostlink_ports::unix_socket::from_socket;
13use clap::Parser;13use clap::Parser;
14use remowt_endpoints::{fs::Fs, nix_daemon::NixDaemon, pty::Pty, subprocess::Subprocess, systemd::Systemd};14use remowt_endpoints::{
15 fs::Fs, nix_daemon::NixDaemon, pty::Pty, subprocess::Subprocess, systemd::Systemd,
16};
15use remowt_link_shared::{editor::EditorEndpointsClient, Address, BifConfig};17use remowt_link_shared::{editor::EditorEndpointsClient, Address, BifConfig};
16use remowt_polkit_shared::{emphasize, BackendRequest, Identity, PidDisplay};18use remowt_polkit_shared::{emphasize, BackendRequest, Identity, PidDisplay};
250 }252 }
251}253}
252async fn main_real() -> anyhow::Result<()> {254async fn main_real() -> anyhow::Result<()> {
253 let conn = Connection::system().await?;255 let system_conn = Connection::system().await?;
254 let helper = SocketHelper {256 let helper = SocketHelper {
255 fallback: SuidHelper,257 fallback: SuidHelper,
256 };258 };
257 register_auth_agent(&conn, Agent::new(helper, RofiPrompter)).await?;259 register_auth_agent(&system_conn, Agent::new(helper, RofiPrompter)).await?;
258260
259 let _conn = conn;261 let session_conn = Connection::session().await?;
262 askpass::serve(&session_conn, RofiPrompter).await?;
263
264 let _keep_alive = (system_conn, session_conn);
260 pending().await265 pending().await
261}266}
262async fn main_real_agent(267async fn main_real_agent(
modifiedcmds/remowt-ssh/src/main.rsdiffbeforeafterboth
13use remowt_client::editor::SshEditor;13use remowt_client::editor::SshEditor;
14use remowt_client::{AgentBundle, Remowt};14use remowt_client::{AgentBundle, Remowt};
15use remowt_link_shared::editor::serve_editor;15use remowt_link_shared::editor::serve_editor;
16use remowt_ui_prompt::bifrost::serve_prompts;16use remowt_ui_prompt::auto::AutoPrompter;
17use remowt_ui_prompt::rofi::RofiPrompter;17use remowt_ui_prompt::bifrost::serve_prompts;
18use remowt_ui_prompt::{PrependSourcePrompter, Source};18use remowt_ui_prompt::{PrependSourcePrompter, Source};
19use tokio::io::unix::AsyncFd;19use tokio::io::unix::AsyncFd;
20use tokio::io::{AsyncRead, ReadBuf};20use tokio::io::{AsyncRead, ReadBuf};
61 serve_prompts(61 serve_prompts(
62 &mut rpc,62 &mut rpc,
63 PrependSourcePrompter {63 PrependSourcePrompter {
64 prompter: RofiPrompter,64 prompter: AutoPrompter::new().await,
65 source: match opts {65 source: match opts {
66 Opts::Ssh { host, .. } => vec![Source(Cow::Owned(format!("ssh host: {}", host)))],66 Opts::Ssh { host, .. } => vec![Source(Cow::Owned(format!("ssh host: {}", host)))],
67 Opts::Local { .. } => vec![],67 Opts::Local { .. } => vec![],
modifiedcrates/remowt-ui-prompt/Cargo.tomldiffbeforeafterboth
6license.workspace = true6license.workspace = true
77
8[dependencies]8[dependencies]
9anyhow.workspace = true
9bifrostlink.workspace = true10bifrostlink.workspace = true
10bifrostlink-macros.workspace = true11bifrostlink-macros.workspace = true
11serde.workspace = true12serde.workspace = true
addedcrates/remowt-ui-prompt/src/auto.rsdiffbeforeafterboth

no changes

modifiedcrates/remowt-ui-prompt/src/dbus.rsdiffbeforeafterboth
5use crate::{BlockingPrompter, Result};5use crate::{BlockingPrompter, Result};
6use crate::{Error, Prompter};6use crate::{Error, Prompter};
7
8pub const BUS_NAME: &str = "lach.RemowtAskpass";
9pub const PROMPTER_PATH: &str = "/lach/Askpass";
710
8pub struct DbusPrompterInterface<P>(pub P);11pub struct DbusPrompterInterface<P>(pub P);
912
10#[interface(name = "lach.PolkitInputHandler")]13#[interface(name = "lach.PolkitInputHandler")]
11impl<P: Prompter + Send + Sync + 'static> DbusPrompterInterface<P> {14impl<P: Prompter + Send + Sync + 'static> DbusPrompterInterface<P> {
12 async fn prompt_radio(15 async fn prompt_enum(
13 &self,16 &self,
14 prompt: &str,17 prompt: &str,
15 description: &str,18 description: &str,
19 variants: Vec<String>,
16 source: Vec<Source>,20 source: Vec<Source>,
17 ) -> fdo::Result<bool> {21 ) -> fdo::Result<u32> {
22 let variants: Vec<&str> = variants.iter().map(|v| v.as_str()).collect();
18 Ok(self.0.prompt_radio(prompt, description, &source).await?)23 Ok(self
24 .0
25 .prompt_enum(prompt, description, &variants, &source)
26 .await?)
19 }27 }
20 async fn prompt_text(28 async fn prompt_text(
modifiedcrates/remowt-ui-prompt/src/lib.rsdiffbeforeafterboth
3use std::future::Future;3use std::future::Future;
4use std::result;4use std::result;
55
6pub mod auto;
6pub mod bifrost;7pub mod bifrost;
7pub mod dbus;8pub mod dbus;
8pub mod rofi;9pub mod rofi;