use std::path::PathBuf;
use crate::xdg::Env;
pub struct LoginHolder {
pub bz: crate::config_edit::brazen::RealBzRunner,
pub rows: Vec<crate::config_edit::brazen::ProviderRowView>,
pub run: Option<crate::login::LoginRun>,
pub wall: Vec<(String, String)>,
pub workspace: Option<PathBuf>,
creds_dir: PathBuf,
}
impl LoginHolder {
pub fn new(wall: &Env, workspace: Option<&std::path::Path>) -> Self {
let mut holder = Self {
workspace: workspace.map(std::path::Path::to_path_buf),
bz: crate::config_edit::brazen::RealBzRunner::resolve(wall),
rows: Vec::new(),
run: None,
wall: crate::world::wall::pairs_of(wall),
creds_dir: crate::config_edit::brazen::BrazenPaths::of(wall)
.map(|p| p.credentials_dir)
.unwrap_or_default(),
};
holder.ask();
holder
}
pub fn ask(&mut self) {
use crate::config_edit::brazen::{BzRunner, credential_presence, row_views};
let rows = self.bz.providers();
let creds = credential_presence(&self.creds_dir, &rows, &crate::config_edit::RealFileIo);
self.rows = row_views(&rows, &creds);
}
}