replace deps edit and rpassword with dialoguer

This commit is contained in:
2024-08-07 16:43:26 +02:00
parent 404e5371e3
commit f75d2fee7a
4 changed files with 77 additions and 83 deletions

View File

@@ -1,5 +1,6 @@
use anyhow::{anyhow, Context};
use clap::Parser;
use dialoguer::Editor;
use indoc::indoc;
use itertools::Itertools;
use prettytable::{Cell, Row, Table};
@@ -494,27 +495,32 @@ pub async fn edit_permissions(
longest_database_name,
);
let result = edit::edit_with_builder(
format!(
"{}\n{}\n{}",
comment,
header.join(" "),
if permission_data.is_empty() {
format!("# {}", example_line)
} else {
permission_data
.iter()
.map(|perm| {
format_privileges_line(perm, longest_username, longest_database_name)
})
.join("\n")
}
),
edit::Builder::new()
.prefix("database-permissions")
.suffix(".tsv")
.rand_bytes(10),
)?;
// TODO: handle errors better here
let result = Editor::new()
.extension("tsv")
.edit(
format!(
"{}\n{}\n{}",
comment,
header.join(" "),
if permission_data.is_empty() {
format!("# {}", example_line)
} else {
permission_data
.iter()
.map(|perm| {
format_privileges_line(
perm,
longest_username,
longest_database_name,
)
})
.join("\n")
}
)
.as_str(),
)?
.unwrap();
parse_permission_data_from_editor(result)
.context("Could not parse permission data from editor")?

View File

@@ -2,6 +2,7 @@ use std::vec;
use anyhow::Context;
use clap::Parser;
use dialoguer::{Confirm, Password};
use sqlx::MySqlConnection;
use crate::core::{common::close_database_connection, user_operations::validate_user_name};
@@ -101,20 +102,14 @@ async fn drop_users(args: UserDeleteArgs, conn: &mut MySqlConnection) -> anyhow:
}
pub fn read_password_from_stdin_with_double_check(username: &str) -> anyhow::Result<String> {
let pass1 = rpassword::prompt_password(format!("New MySQL password for user '{}': ", username))
.context("Failed to read password")?;
let pass2 = rpassword::prompt_password(format!(
"Retype new MySQL password for user '{}': ",
username
))
.context("Failed to read password")?;
if pass1 != pass2 {
anyhow::bail!("Passwords do not match");
}
Ok(pass1)
Password::new()
.with_prompt(format!("New MySQL password for user '{}'", username))
.with_confirmation(
format!("Retype new MySQL password for user '{}'", username),
"Passwords do not match",
)
.interact()
.map_err(Into::into)
}
async fn change_password_for_user(