git.delta.rocks / remowt / refs/commits / 960ee4bca68c

difftreelog

source

cmds/remowt-agent/src/askpass.rs1.2 KiBsourcehistory
1use std::borrow::Cow;2use std::io::Write as _;34use anyhow::Context as _;5use ui_prompt::bifrost::PromptEndpointsClient;6use ui_prompt::dbus::{DbusPrompterInterface, DbusPrompterProxy};7use ui_prompt::Source;8use zbus::Connection;910use remowt_link_shared::BifConfig;1112const BUS_NAME: &str = "lach.RemowtAskpass";13const PROMPTER_PATH: &str = "/lach/Askpass";1415pub async fn serve(16	conn: &Connection,17	prompter: PromptEndpointsClient<BifConfig>,18) -> anyhow::Result<()> {19	conn.object_server()20		.at(PROMPTER_PATH, DbusPrompterInterface(prompter))21		.await?;22	conn.request_name(BUS_NAME).await?;23	Ok(())24}2526pub async fn ask(prompt: &str, description: String) -> anyhow::Result<()> {27	let conn = Connection::session()28		.await29		.context("connecting to the session bus (DBUS_SESSION_BUS_ADDRESS)")?;30	let proxy = DbusPrompterProxy::builder(&conn)31		.destination(BUS_NAME)?32		.path(PROMPTER_PATH)?33		.build()34		.await?;3536	let password = proxy37		.prompt_text(38			false,39			prompt,40			&description,41			&[Source(Cow::Borrowed("remowt-askpass"))],42		)43		.await?;4445	let mut out = std::io::stdout().lock();46	out.write_all(password.as_bytes())?;47	out.write_all(b"\n")?;48	out.flush()?;49	Ok(())50}