pass_manager/src/handlers/commands/set_master_pass.rs
2023-05-04 20:51:36 +03:00

53 lines
1.5 KiB
Rust

use crate::{
entity::{master_pass, prelude::*},
handlers::{utils::package_handler, MainDialogue, State},
};
use sea_orm::prelude::*;
use teloxide::{adaptors::Throttle, prelude::*};
use tokio::task;
async fn get_master_pass(
bot: Throttle<Bot>,
msg: Message,
db: DatabaseConnection,
dialogue: MainDialogue,
previous: Message,
master_password: String,
) -> crate::Result<()> {
let _ = bot.delete_message(previous.chat.id, previous.id).await;
dialogue.exit().await?;
let user_id = msg.from().unwrap().id.0;
let model = task::spawn_blocking(move || {
master_pass::ActiveModel::from_unencrypted(user_id, &master_password)
})
.await??;
model.insert(&db).await?;
bot.send_message(msg.chat.id, "Success").await?;
Ok(())
}
pub async fn set_master_pass(
bot: Throttle<Bot>,
msg: Message,
dialogue: MainDialogue,
db: DatabaseConnection,
) -> crate::Result<()> {
let user_id = msg.from().unwrap().id.0;
if MasterPass::exists(user_id, &db).await? {
bot.send_message(msg.chat.id, "Master password already exists")
.await?;
return Ok(());
}
let previous = bot
.send_message(msg.chat.id, "Send new master password")
.await?;
dialogue
.update(State::GetPassword(package_handler(
move |bot, msg, db, dialogue, master_pass| {
get_master_pass(bot, msg, db, dialogue, previous, master_pass)
},
)))
.await?;
Ok(())
}