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, 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, 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(()) }