replace deps edit
and rpassword
with dialoguer
This commit is contained in:
@@ -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")?
|
||||
|
@@ -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(
|
||||
|
Reference in New Issue
Block a user