diff --git a/Cargo.lock b/Cargo.lock index e28313f..fe234f5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1596,9 +1596,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.28" +version = "1.0.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488" +checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105" dependencies = [ "proc-macro2", ] @@ -1891,9 +1891,9 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" +checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" dependencies = [ "base64", ] @@ -2997,9 +2997,9 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.48.0" +version = "0.48.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f" dependencies = [ "windows_aarch64_gnullvm", "windows_aarch64_msvc", diff --git a/src/callbacks/delete_message.rs b/src/callbacks/delete_message.rs index 9f0f91c..49d9d77 100644 --- a/src/callbacks/delete_message.rs +++ b/src/callbacks/delete_message.rs @@ -1,5 +1,5 @@ -use crate::markups::deletion_markup; -use teloxide::{adaptors::Throttle, dispatching::DpHandlerDescription, prelude::*}; +use crate::prelude::*; +use teloxide::{dispatching::DpHandlerDescription, dptree::Handler}; /// Deletes the message from the callback async fn run(bot: Throttle, q: CallbackQuery) -> crate::Result<()> { diff --git a/src/commands/add_account.rs b/src/commands/add_account.rs index dc10d3b..f6f132e 100644 --- a/src/commands/add_account.rs +++ b/src/commands/add_account.rs @@ -1,9 +1,4 @@ -use crate::{ - errors::NoUserInfo, markups::deletion_markup, models::DecryptedAccount, Handler, MainDialogue, - State, -}; -use sea_orm::prelude::*; -use teloxide::{adaptors::Throttle, prelude::*}; +use crate::prelude::*; use tokio::task::spawn_blocking; /// Gets the name of the master password, encryptes the account and adds it to the DB diff --git a/src/commands/cancel.rs b/src/commands/cancel.rs index 8ed2a22..40afe72 100644 --- a/src/commands/cancel.rs +++ b/src/commands/cancel.rs @@ -1,5 +1,4 @@ -use crate::markups::deletion_markup; -use teloxide::{adaptors::Throttle, prelude::*}; +use crate::prelude::*; /// Handles /cancel command when there's no active state pub async fn cancel(bot: Throttle, msg: Message) -> crate::Result<()> { diff --git a/src/commands/delete.rs b/src/commands/delete.rs index 03e450e..294694d 100644 --- a/src/commands/delete.rs +++ b/src/commands/delete.rs @@ -1,11 +1,4 @@ -use crate::{ - errors::NoUserInfo, - markups::{self, deletion_markup}, - Handler, MainDialogue, State, -}; -use entity::prelude::*; -use sea_orm::prelude::*; -use teloxide::{adaptors::Throttle, prelude::*}; +use crate::prelude::*; /// Gets the master password and deletes the account. /// Although it doesn't use the master password, we get it to be sure that it's the user who used that command @@ -53,7 +46,7 @@ pub async fn delete( db: DatabaseConnection, ) -> crate::Result<()> { let user_id = msg.from().ok_or(NoUserInfo)?.id.0; - let markup = markups::account_markup(user_id, &db).await?; + let markup = account_markup(user_id, &db).await?; if markup.keyboard.is_empty() { bot.send_message(msg.chat.id, "No accounts found") .reply_markup(deletion_markup()) diff --git a/src/commands/delete_all.rs b/src/commands/delete_all.rs index f3cf43a..3096e61 100644 --- a/src/commands/delete_all.rs +++ b/src/commands/delete_all.rs @@ -1,7 +1,4 @@ -use crate::{errors::NoUserInfo, markups::deletion_markup, Handler, MainDialogue, State}; -use entity::prelude::*; -use sea_orm::DatabaseConnection; -use teloxide::{adaptors::Throttle, prelude::*}; +use crate::prelude::*; use tokio::join; /// Gets the master password, deletes the accounts and the master password from DB. diff --git a/src/commands/export.rs b/src/commands/export.rs index 67c0b72..9f80ed1 100644 --- a/src/commands/export.rs +++ b/src/commands/export.rs @@ -1,15 +1,7 @@ -use crate::{ - errors::NoUserInfo, - markups::deletion_markup, - models::{DecryptedAccount, User}, - Handler, MainDialogue, State, -}; -use entity::prelude::*; -use futures::TryStreamExt; +use crate::prelude::*; use parking_lot::Mutex; -use sea_orm::DatabaseConnection; use std::sync::Arc; -use teloxide::{adaptors::Throttle, prelude::*, types::InputFile}; +use teloxide::types::InputFile; use tokio::task::spawn_blocking; /// Decryptes the account on a worker thread and adds it to the accounts vector diff --git a/src/commands/gen_password.rs b/src/commands/gen_password.rs index 6a6d52e..4cb75e8 100644 --- a/src/commands/gen_password.rs +++ b/src/commands/gen_password.rs @@ -1,8 +1,8 @@ -use crate::markups::deletion_markup; +use crate::prelude::*; use arrayvec::ArrayString; use cryptography::passwords::generate_passwords; use std::fmt::Write; -use teloxide::{adaptors::Throttle, prelude::*, types::ParseMode}; +use teloxide::types::ParseMode; use tokio::task::spawn_blocking; const MESSAGE_HEADER: &str = "Passwords:"; diff --git a/src/commands/get_account.rs b/src/commands/get_account.rs index d5427e1..dd101c7 100644 --- a/src/commands/get_account.rs +++ b/src/commands/get_account.rs @@ -1,12 +1,5 @@ -use crate::{ - errors::NoUserInfo, - markups::{self, deletion_markup}, - Handler, MainDialogue, State, -}; -use cryptography::prelude::*; -use entity::prelude::*; -use sea_orm::DatabaseConnection; -use teloxide::{adaptors::Throttle, prelude::*, types::ParseMode}; +use crate::prelude::*; +use teloxide::types::ParseMode; use tokio::task::spawn_blocking; /// Gets the master password, decryptes the account and sends it to the user with copyable fields @@ -68,7 +61,7 @@ pub async fn get_account( db: DatabaseConnection, ) -> crate::Result<()> { let user_id = msg.from().ok_or(NoUserInfo)?.id.0; - let markup = markups::account_markup(user_id, &db).await?; + let markup = account_markup(user_id, &db).await?; if markup.keyboard.is_empty() { bot.send_message(msg.chat.id, "No accounts found") .reply_markup(deletion_markup()) diff --git a/src/commands/get_accounts.rs b/src/commands/get_accounts.rs index d5000b6..673395f 100644 --- a/src/commands/get_accounts.rs +++ b/src/commands/get_accounts.rs @@ -1,9 +1,7 @@ -use crate::{errors::NoUserInfo, markups::deletion_markup}; -use entity::prelude::*; -use futures::{future, TryStreamExt}; -use sea_orm::DatabaseConnection; +use crate::prelude::*; +use futures::future; use std::fmt::Write; -use teloxide::{adaptors::Throttle, prelude::*, types::ParseMode}; +use teloxide::types::ParseMode; /// Handles /get_accounts command by sending the list of copyable account names to the user pub async fn get_accounts( diff --git a/src/commands/help.rs b/src/commands/help.rs index 8658cde..895ff21 100644 --- a/src/commands/help.rs +++ b/src/commands/help.rs @@ -1,5 +1,5 @@ -use crate::{markups::deletion_markup, Command}; -use teloxide::{adaptors::Throttle, prelude::*, utils::command::BotCommands}; +use crate::prelude::*; +use teloxide::utils::command::BotCommands; /// Handles the help command by sending the passwords descryptions pub async fn help(bot: Throttle, msg: Message) -> crate::Result<()> { diff --git a/src/commands/import.rs b/src/commands/import.rs index a85a68d..2708ec6 100644 --- a/src/commands/import.rs +++ b/src/commands/import.rs @@ -1,15 +1,8 @@ -use crate::{ - errors::NoUserInfo, - markups::deletion_markup, - models::{DecryptedAccount, User}, - Handler, MainDialogue, State, -}; -use futures::{stream, StreamExt}; +use crate::prelude::*; +use futures::stream; use itertools::Itertools; use parking_lot::Mutex; -use sea_orm::prelude::*; use std::sync::Arc; -use teloxide::{adaptors::Throttle, prelude::*}; use tokio::task::spawn_blocking; /// Ecryptes the account and adds it to the database diff --git a/src/commands/mod.rs b/src/commands/mod.rs index 64cab9e..6abbbc2 100644 --- a/src/commands/mod.rs +++ b/src/commands/mod.rs @@ -25,6 +25,7 @@ pub use help::help; pub use import::import; pub use set_master_pass::set_master_pass; pub use start::start; + use teloxide::macros::BotCommands; #[derive(BotCommands, Clone, Copy)] diff --git a/src/commands/set_master_pass.rs b/src/commands/set_master_pass.rs index faf81bd..a9a0eb9 100644 --- a/src/commands/set_master_pass.rs +++ b/src/commands/set_master_pass.rs @@ -1,9 +1,5 @@ -use crate::{errors::NoUserInfo, markups::deletion_markup, Handler, MainDialogue, State}; -use cryptography::prelude::*; -use entity::prelude::*; -use sea_orm::prelude::*; -use teloxide::{adaptors::Throttle, prelude::*}; -use tokio::task; +use crate::prelude::*; +use tokio::task::spawn_blocking; /// Actually sets the master password async fn get_master_pass( @@ -15,7 +11,7 @@ async fn get_master_pass( ) -> crate::Result<()> { dialogue.exit().await?; let user_id = msg.from().ok_or(NoUserInfo)?.id.0; - let model = task::spawn_blocking(move || { + let model = spawn_blocking(move || { master_pass::ActiveModel::from_unencrypted(user_id, &master_password) }) .await?; diff --git a/src/commands/start.rs b/src/commands/start.rs index 78e8f16..eb3fe02 100644 --- a/src/commands/start.rs +++ b/src/commands/start.rs @@ -1,4 +1,4 @@ -use teloxide::{adaptors::Throttle, prelude::*}; +use crate::prelude::*; /// Handles /start command by sending the greeting message pub async fn start(bot: Throttle, msg: Message) -> crate::Result<()> { diff --git a/src/default.rs b/src/default.rs index 4b836b3..8d7d1cf 100644 --- a/src/default.rs +++ b/src/default.rs @@ -1,5 +1,4 @@ -use crate::markups::deletion_markup; -use teloxide::{adaptors::Throttle, prelude::*}; +use crate::prelude::*; /// Handles the messages which weren't matched by any commands or states pub async fn default(bot: Throttle, msg: Message) -> crate::Result<()> { diff --git a/src/main.rs b/src/main.rs index bc45871..ea889a7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,22 +5,17 @@ mod errors; mod markups; mod master_password_check; mod models; +mod prelude; mod state; mod utils; use anyhow::{Error, Result}; -use commands::Command; use dotenv::dotenv; use migration::{Migrator, MigratorTrait}; -use sea_orm::{prelude::*, Database}; -use state::{Handler, MainDialogue, State}; +use prelude::*; +use sea_orm::Database; use std::env; -use teloxide::{ - adaptors::{throttle::Limits, Throttle}, - dispatching::dialogue::InMemStorage, - filter_command, - prelude::*, -}; +use teloxide::{adaptors::throttle::Limits, dispatching::dialogue::InMemStorage, filter_command}; fn get_dispatcher( token: String, diff --git a/src/markups.rs b/src/markups.rs index 160273d..bcd2a65 100644 --- a/src/markups.rs +++ b/src/markups.rs @@ -1,6 +1,4 @@ -use entity::prelude::Account; -use futures::TryStreamExt; -use sea_orm::prelude::*; +use crate::prelude::*; use teloxide::types::{InlineKeyboardButton, InlineKeyboardMarkup, KeyboardButton, KeyboardMarkup}; /// Creates a markup of all user's account names diff --git a/src/master_password_check.rs b/src/master_password_check.rs index e7336d7..a7c47c9 100644 --- a/src/master_password_check.rs +++ b/src/master_password_check.rs @@ -1,9 +1,6 @@ -use crate::errors::NoUserInfo; -use crate::markups::deletion_markup; -use entity::prelude::*; -use sea_orm::DatabaseConnection; +use crate::prelude::*; use std::sync::Arc; -use teloxide::{adaptors::Throttle, dispatching::DpHandlerDescription, prelude::*}; +use teloxide::{dispatching::DpHandlerDescription, dptree::Handler}; /// A wierd filter that checks for the existance of a master password. /// diff --git a/src/models.rs b/src/models.rs index abebf25..7ba2a69 100644 --- a/src/models.rs +++ b/src/models.rs @@ -1,11 +1,8 @@ //! Models to export and import the accounts -use cryptography::prelude::*; -use entity::prelude::*; +use crate::prelude::*; use serde::{Deserialize, Serialize}; -use crate::utils::validate_field; - #[derive(Serialize, Deserialize)] pub struct DecryptedAccount { pub name: String, diff --git a/src/prelude.rs b/src/prelude.rs new file mode 100644 index 0000000..ab70bf6 --- /dev/null +++ b/src/prelude.rs @@ -0,0 +1,14 @@ +pub(crate) use crate::{ + commands::Command, + errors::*, + markups::*, + models::*, + state::State, + state::{Handler, MainDialogue, PackagedHandler}, + utils::*, +}; +pub(crate) use cryptography::prelude::*; +pub(crate) use entity::prelude::*; +pub(crate) use futures::{StreamExt, TryStreamExt}; +pub(crate) use sea_orm::prelude::*; +pub(crate) use teloxide::{adaptors::Throttle, prelude::*}; diff --git a/src/state/generic.rs b/src/state/generic.rs index e9ee319..987c551 100644 --- a/src/state/generic.rs +++ b/src/state/generic.rs @@ -1,7 +1,5 @@ -use crate::{errors::HandlerUsed, markups::deletion_markup, utils::delete_optional}; +use crate::prelude::*; use futures::future::BoxFuture; -use sea_orm::prelude::*; -use teloxide::{adaptors::Throttle, prelude::*}; /// A generic state handler. It checks for "/cancel" messages and runs the provided validation function #[inline] @@ -9,10 +7,10 @@ pub async fn generic( bot: Throttle, msg: Message, db: DatabaseConnection, - dialogue: crate::MainDialogue, + dialogue: MainDialogue, check: F, no_text_message: impl Into, - next: super::PackagedHandler, + next: PackagedHandler, ) -> crate::Result<()> where for<'a> F: FnOnce( diff --git a/src/state/get_existing_name.rs b/src/state/get_existing_name.rs index d4ab7a6..3492192 100644 --- a/src/state/get_existing_name.rs +++ b/src/state/get_existing_name.rs @@ -1,12 +1,4 @@ -use crate::{ - errors::{HandlerUsed, NoUserInfo}, - markups::{account_markup, deletion_markup}, - utils::delete_optional, - MainDialogue, -}; -use entity::prelude::*; -use sea_orm::DatabaseConnection; -use teloxide::{adaptors::Throttle, prelude::*}; +use crate::prelude::*; /// Checks that the account with that name exists #[inline] @@ -33,7 +25,7 @@ pub async fn get_existing_name( msg: Message, db: DatabaseConnection, dialogue: MainDialogue, - next: super::PackagedHandler, + next: PackagedHandler, ) -> crate::Result<()> { let user_id = msg.from().ok_or(NoUserInfo)?.id.0; let mut handler = next.lock().await; diff --git a/src/state/get_login.rs b/src/state/get_login.rs index b1dbfdb..2f88907 100644 --- a/src/state/get_login.rs +++ b/src/state/get_login.rs @@ -1,6 +1,4 @@ -use crate::{utils::validate_field, MainDialogue}; -use sea_orm::prelude::*; -use teloxide::{adaptors::Throttle, prelude::*}; +use crate::prelude::*; /// Function to handle GetLogin state pub async fn get_login( @@ -8,7 +6,7 @@ pub async fn get_login( msg: Message, db: DatabaseConnection, dialogue: MainDialogue, - next: super::PackagedHandler, + next: PackagedHandler, ) -> crate::Result<()> { super::generic::generic( bot, diff --git a/src/state/get_master_pass.rs b/src/state/get_master_pass.rs index 65a099f..4122f68 100644 --- a/src/state/get_master_pass.rs +++ b/src/state/get_master_pass.rs @@ -1,9 +1,5 @@ -use crate::{errors::NoUserInfo, MainDialogue}; -use cryptography::prelude::*; -use entity::prelude::*; +use crate::prelude::*; use log::error; -use sea_orm::DatabaseConnection; -use teloxide::{adaptors::Throttle, prelude::*}; use tokio::task::spawn_blocking; /// Returns true if the provided master password is valid @@ -48,7 +44,7 @@ pub async fn get_master_pass( msg: Message, db: DatabaseConnection, dialogue: MainDialogue, - next: super::PackagedHandler, + next: PackagedHandler, ) -> crate::Result<()> { super::generic::generic( bot, diff --git a/src/state/get_new_master_pass.rs b/src/state/get_new_master_pass.rs index f906825..c1a3b3f 100644 --- a/src/state/get_new_master_pass.rs +++ b/src/state/get_new_master_pass.rs @@ -1,7 +1,5 @@ -use crate::MainDialogue; +use crate::prelude::*; use cryptography::passwords::{check_master_pass, PasswordValidity}; -use sea_orm::DatabaseConnection; -use teloxide::{adaptors::Throttle, prelude::*}; #[inline] fn process_validity(validity: PasswordValidity) -> Result<(), String> { @@ -56,7 +54,7 @@ pub async fn get_new_master_pass( msg: Message, db: DatabaseConnection, dialogue: MainDialogue, - next: super::PackagedHandler, + next: PackagedHandler, ) -> crate::Result<()> { super::generic::generic( bot, diff --git a/src/state/get_new_name.rs b/src/state/get_new_name.rs index 5dacf62..c067bbc 100644 --- a/src/state/get_new_name.rs +++ b/src/state/get_new_name.rs @@ -1,7 +1,4 @@ -use crate::{errors::NoUserInfo, utils::validate_field, MainDialogue}; -use entity::prelude::*; -use sea_orm::prelude::*; -use teloxide::{adaptors::Throttle, prelude::*}; +use crate::prelude::*; /// Validates a new account #[inline] @@ -34,7 +31,7 @@ pub async fn get_new_name( msg: Message, db: DatabaseConnection, dialogue: MainDialogue, - next: super::PackagedHandler, + next: PackagedHandler, ) -> crate::Result<()> { super::generic::generic( bot, diff --git a/src/state/get_password.rs b/src/state/get_password.rs index 87770d4..0d7a69b 100644 --- a/src/state/get_password.rs +++ b/src/state/get_password.rs @@ -1,7 +1,4 @@ -use sea_orm::prelude::*; -use teloxide::{adaptors::Throttle, prelude::*}; - -use crate::{utils::validate_field, MainDialogue}; +use crate::prelude::*; /// Function to handle GetPassword state pub async fn get_password( @@ -9,7 +6,7 @@ pub async fn get_password( msg: Message, db: DatabaseConnection, dialogue: MainDialogue, - next: super::PackagedHandler, + next: PackagedHandler, ) -> crate::Result<()> { super::generic::generic( bot, diff --git a/src/state/get_user.rs b/src/state/get_user.rs index 62092da..d4400e4 100644 --- a/src/state/get_user.rs +++ b/src/state/get_user.rs @@ -1,17 +1,9 @@ -use crate::{ - errors::{HandlerUsed, NoUserInfo}, - markups::deletion_markup, - models::{DecryptedAccount, User}, - utils::delete_optional, - MainDialogue, -}; -use entity::prelude::*; -use futures::{future::try_join, TryStreamExt}; +use crate::prelude::*; +use futures::future::try_join; use itertools::Itertools; use rustc_hash::FxHashSet; -use sea_orm::prelude::*; use std::fmt::Write; -use teloxide::{adaptors::Throttle, net::Download, prelude::*, types::Document}; +use teloxide::{net::Download, types::Document}; use tokio::task::spawn_blocking; use trim_in_place::TrimInPlace; @@ -119,7 +111,7 @@ pub async fn get_user( msg: Message, db: DatabaseConnection, dialogue: MainDialogue, - next: super::PackagedHandler, + next: PackagedHandler, ) -> crate::Result<()> { let user_id = msg.from().ok_or(NoUserInfo)?.id.0; let mut handler = next.lock().await; diff --git a/src/state/handler.rs b/src/state/handler.rs index dd6ed97..ef72550 100644 --- a/src/state/handler.rs +++ b/src/state/handler.rs @@ -1,8 +1,6 @@ -use crate::MainDialogue; +use crate::prelude::*; use futures::future::BoxFuture; -use sea_orm::prelude::*; use std::{future::Future, sync::Arc}; -use teloxide::{adaptors::Throttle, prelude::*}; use tokio::sync::Mutex; type DynHanlder = Box< diff --git a/src/state/mod.rs b/src/state/mod.rs index a8168b1..7259deb 100644 --- a/src/state/mod.rs +++ b/src/state/mod.rs @@ -19,8 +19,8 @@ pub use get_password::get_password; pub use get_user::get_user; pub use handler::{Handler, PackagedHandler}; -use crate::models::User; -use teloxide::{dispatching::dialogue::InMemStorage, prelude::*}; +use crate::prelude::*; +use teloxide::dispatching::dialogue::InMemStorage; #[derive(Default, Clone)] pub enum State { diff --git a/src/utils.rs b/src/utils.rs index d41b1e1..ae00dad 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -1,4 +1,4 @@ -use teloxide::{adaptors::Throttle, prelude::*}; +use crate::prelude::*; /// Deletes the message ignoring the errors #[inline]