53 lines
1.5 KiB
Rust
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(())
|
|
}
|