keyfork-prompt: add DefaultPromptManager
This commit is contained in:
parent
bfb44292f4
commit
920e04ba23
|
@ -1,13 +1,13 @@
|
|||
use std::{
|
||||
io::{BufRead, BufReader, Read, Write},
|
||||
io::{stderr, stdin, BufRead, BufReader, Read, Stderr, Stdin, Write},
|
||||
os::fd::AsRawFd,
|
||||
};
|
||||
|
||||
use crossterm::{
|
||||
cursor,
|
||||
event::{read, Event, KeyCode},
|
||||
style::{Print, PrintStyledContent, Stylize},
|
||||
terminal,
|
||||
cursor,
|
||||
tty::IsTty,
|
||||
QueueableCommand,
|
||||
};
|
||||
|
@ -57,9 +57,9 @@ where
|
|||
while let Some(line) = lines.next() {
|
||||
terminal.queue(Print(line))?;
|
||||
if lines.peek().is_some() {
|
||||
terminal
|
||||
.queue(cursor::MoveDown(1))?
|
||||
.queue(cursor::MoveToColumn(0))?;
|
||||
terminal
|
||||
.queue(cursor::MoveDown(1))?
|
||||
.queue(cursor::MoveToColumn(0))?;
|
||||
}
|
||||
}
|
||||
terminal.flush()?;
|
||||
|
@ -81,9 +81,9 @@ where
|
|||
while let Some(line) = lines.next() {
|
||||
terminal.queue(Print(line))?;
|
||||
if lines.peek().is_some() {
|
||||
terminal
|
||||
.queue(cursor::MoveDown(1))?
|
||||
.queue(cursor::MoveToColumn(0))?;
|
||||
terminal
|
||||
.queue(cursor::MoveDown(1))?
|
||||
.queue(cursor::MoveToColumn(0))?;
|
||||
}
|
||||
}
|
||||
terminal.flush()?;
|
||||
|
@ -128,9 +128,9 @@ where
|
|||
while let Some(line) = lines.next() {
|
||||
terminal.queue(Print(line))?;
|
||||
if lines.peek().is_some() {
|
||||
terminal
|
||||
.queue(cursor::MoveDown(1))?
|
||||
.queue(cursor::MoveToColumn(0))?;
|
||||
terminal
|
||||
.queue(cursor::MoveDown(1))?
|
||||
.queue(cursor::MoveToColumn(0))?;
|
||||
}
|
||||
}
|
||||
terminal
|
||||
|
@ -153,3 +153,9 @@ where
|
|||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
pub type DefaultPromptManager = PromptManager<Stdin, Stderr>;
|
||||
|
||||
pub fn default_prompt_manager() -> Result<DefaultPromptManager> {
|
||||
PromptManager::new(stdin(), stderr())
|
||||
}
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
use std::fs::File;
|
||||
|
||||
use keyfork_prompt::{Error as PromptError, PromptManager};
|
||||
use keyfork_prompt::{Error as PromptError, DefaultPromptManager, default_prompt_manager};
|
||||
|
||||
use super::openpgp::{
|
||||
self,
|
||||
|
@ -18,12 +16,6 @@ pub enum Error {
|
|||
#[error("Secret key was not found")]
|
||||
SecretKeyNotFound,
|
||||
|
||||
#[error("Could not find TTY when prompting")]
|
||||
NoTTY,
|
||||
|
||||
#[error("Could not open TTY: {0}")]
|
||||
Io(#[from] std::io::Error),
|
||||
|
||||
#[error("Prompt failed: {0}")]
|
||||
Prompt(#[from] PromptError),
|
||||
}
|
||||
|
@ -33,20 +25,15 @@ pub type Result<T, E = Error> = std::result::Result<T, E>;
|
|||
pub struct Keyring {
|
||||
full_certs: Vec<Cert>,
|
||||
root: Option<Cert>,
|
||||
pm: PromptManager<File, File>,
|
||||
pm: DefaultPromptManager,
|
||||
}
|
||||
|
||||
impl Keyring {
|
||||
pub fn new(certs: impl AsRef<[Cert]>) -> Result<Self> {
|
||||
let tty = std::env::vars()
|
||||
.filter(|(k, _v)| k.as_str() == "GPG_TTY")
|
||||
.next()
|
||||
.ok_or(Error::NoTTY)?
|
||||
.1;
|
||||
Ok(Self {
|
||||
full_certs: certs.as_ref().to_vec(),
|
||||
root: Default::default(),
|
||||
pm: PromptManager::new(File::open(&tty)?, File::options().write(true).open(&tty)?)?,
|
||||
pm: default_prompt_manager()?,
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
use std::{collections::HashSet, fs::File};
|
||||
use std::{collections::HashSet};
|
||||
|
||||
use keyfork_prompt::{Error as PromptError, PromptManager};
|
||||
use keyfork_prompt::{Error as PromptError, DefaultPromptManager, default_prompt_manager};
|
||||
|
||||
use super::openpgp::{
|
||||
self,
|
||||
|
@ -44,12 +44,6 @@ pub enum Error {
|
|||
#[error("Invalid PIN entered too many times")]
|
||||
InvalidPIN,
|
||||
|
||||
#[error("Could not find TTY when prompting")]
|
||||
NoTTY,
|
||||
|
||||
#[error("Could not open TTY: {0}")]
|
||||
Io(#[from] std::io::Error),
|
||||
|
||||
#[error("Prompt failed: {0}")]
|
||||
Prompt(#[from] PromptError),
|
||||
}
|
||||
|
@ -70,20 +64,15 @@ fn format_name(input: impl AsRef<str>) -> String {
|
|||
pub struct SmartcardManager {
|
||||
current_card: Option<Card<Open>>,
|
||||
root: Option<Cert>,
|
||||
pm: PromptManager<File, File>,
|
||||
pm: DefaultPromptManager,
|
||||
}
|
||||
|
||||
impl SmartcardManager {
|
||||
pub fn new() -> Result<Self> {
|
||||
let tty = std::env::vars()
|
||||
.filter(|(k, _v)| k.as_str() == "GPG_TTY")
|
||||
.next()
|
||||
.ok_or(Error::NoTTY)?
|
||||
.1;
|
||||
Ok(Self {
|
||||
current_card: None,
|
||||
root: None,
|
||||
pm: PromptManager::new(File::open(&tty)?, File::options().write(true).open(&tty)?)?,
|
||||
pm: default_prompt_manager()?,
|
||||
})
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue