pass_manager/src/commands/gen_password.rs

30 lines
1.1 KiB
Rust

use crate::prelude::*;
use arrayvec::ArrayString;
use cryptography::passwords::generate_passwords;
use std::fmt::Write;
use teloxide::types::ParseMode;
use tokio::task::spawn_blocking;
const MESSAGE_HEADER: &str = "Passwords:";
const PASSWORD_LENGTH: usize = 32;
const PASSWORD_PADDING_LENGTH: usize = 3;
const AMOUNT_OF_PASSWORDS: usize = 10;
type PasswordArray = [ArrayString<PASSWORD_LENGTH>; AMOUNT_OF_PASSWORDS];
const BUFFER_LENGTH: usize =
MESSAGE_HEADER.len() + (PASSWORD_LENGTH + PASSWORD_PADDING_LENGTH) * AMOUNT_OF_PASSWORDS;
/// Handles /`gen_password` command by generating 10 copyable passwords and sending them to the user
#[inline]
pub async fn gen_password(bot: Throttle<Bot>, msg: Message) -> crate::Result<()> {
let mut message: ArrayString<BUFFER_LENGTH> = MESSAGE_HEADER.try_into().unwrap();
let passwords: PasswordArray = spawn_blocking(generate_passwords).await?;
for password in passwords {
write!(message, "\n`{password}`").unwrap();
}
bot.send_message(msg.chat.id, message.as_str())
.parse_mode(ParseMode::MarkdownV2)
.reply_markup(deletion_markup())
.await?;
Ok(())
}