Added new callback types

This commit is contained in:
StNicolay 2023-07-25 17:44:12 +03:00
parent c682fd310b
commit 64a5435dc3
Signed by: StNicolay
GPG Key ID: 9693D04DCD962B0D
8 changed files with 168 additions and 70 deletions

107
Cargo.lock generated
View File

@ -93,9 +93,9 @@ dependencies = [
[[package]]
name = "anyhow"
version = "1.0.71"
version = "1.0.72"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8"
checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854"
[[package]]
name = "aquamarine"
@ -135,18 +135,18 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.25",
"syn 2.0.27",
]
[[package]]
name = "async-trait"
version = "0.1.71"
version = "0.1.72"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a564d521dd56509c4c47480d00b80ee55f7e385ae48db5744c67ad50c92d2ebf"
checksum = "cc6dde6e4ed435a4c1ee4e73592f5ba9da2151af10076cc04858746af9352d09"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.25",
"syn 2.0.27",
]
[[package]]
@ -571,9 +571,9 @@ dependencies = [
[[package]]
name = "either"
version = "1.8.1"
version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
[[package]]
name = "encoding_rs"
@ -730,7 +730,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.25",
"syn 2.0.27",
]
[[package]]
@ -1076,9 +1076,9 @@ dependencies = [
[[package]]
name = "itoa"
version = "1.0.8"
version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62b02a5381cc465bd3041d84623d0fa3b66738b52b8e2fc3bab8ad63ab032f4a"
checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
[[package]]
name = "js-sys"
@ -1263,9 +1263,9 @@ dependencies = [
[[package]]
name = "num-traits"
version = "0.2.15"
version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
dependencies = [
"autocfg",
"libm",
@ -1379,10 +1379,12 @@ version = "0.1.0"
dependencies = [
"anyhow",
"arrayvec",
"base64",
"cryptography",
"dotenv",
"entity",
"futures",
"hex",
"itertools 0.11.0",
"log",
"migration",
@ -1392,6 +1394,7 @@ dependencies = [
"sea-orm",
"serde",
"serde_json",
"sha2",
"teloxide",
"thiserror",
"tokio",
@ -1411,9 +1414,9 @@ dependencies = [
[[package]]
name = "paste"
version = "1.0.13"
version = "1.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b4b27ab7be369122c218afc2079489cdcb4b517c0a3fc386ff11e1fedfcc2b35"
checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
[[package]]
name = "pbkdf2"
@ -1457,7 +1460,7 @@ checksum = "ec2e072ecce94ec471b13398d5402c188e76ac03cf74dd1a975161b23a3f6d9c"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.25",
"syn 2.0.27",
]
[[package]]
@ -1556,9 +1559,9 @@ dependencies = [
[[package]]
name = "proc-macro2"
version = "1.0.64"
version = "1.0.66"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78803b62cbf1f46fde80d7c0e803111524b9877184cfe7c3033659490ac7a7da"
checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
dependencies = [
"unicode-ident",
]
@ -1585,9 +1588,9 @@ dependencies = [
[[package]]
name = "quote"
version = "1.0.29"
version = "1.0.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105"
checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965"
dependencies = [
"proc-macro2",
]
@ -1910,15 +1913,15 @@ dependencies = [
[[package]]
name = "rustversion"
version = "1.0.13"
version = "1.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc31bd9b61a32c31f9650d18add92aa83a49ba979c143eefd27fe7177b05bd5f"
checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
[[package]]
name = "ryu"
version = "1.0.14"
version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fe232bdf6be8c8de797b22184ee71118d63780ea42ac85b61d1baa6d3b782ae9"
checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
[[package]]
name = "salsa20"
@ -1931,9 +1934,9 @@ dependencies = [
[[package]]
name = "scopeguard"
version = "1.1.0"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
name = "scrypt"
@ -2109,35 +2112,35 @@ checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b"
[[package]]
name = "semver"
version = "1.0.17"
version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918"
[[package]]
name = "serde"
version = "1.0.171"
version = "1.0.175"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "30e27d1e4fd7659406c492fd6cfaf2066ba8773de45ca75e855590f856dc34a9"
checksum = "5d25439cd7397d044e2748a6fe2432b5e85db703d6d097bd014b3c0ad1ebff0b"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.171"
version = "1.0.175"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "389894603bd18c46fa56231694f8d827779c0951a667087194cf9de94ed24682"
checksum = "b23f7ade6f110613c0d63858ddb8b94c1041f550eab58a16b371bdf2c9c80ab4"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.25",
"syn 2.0.27",
]
[[package]]
name = "serde_json"
version = "1.0.102"
version = "1.0.103"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b5062a995d481b2308b6064e9af76011f2921c35f97b0468811ed9f6cd91dfed"
checksum = "d03b412469450d4404fe8499a268edd7f8b79fecb074b0d812ad64ca21f4031b"
dependencies = [
"itoa",
"ryu",
@ -2363,9 +2366,9 @@ dependencies = [
[[package]]
name = "stringprep"
version = "0.1.2"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ee348cb74b87454fff4b551cbf727025810a004f88aeacae7f85b87f4e9a1c1"
checksum = "db3737bde7edce97102e0e2b15365bf7a20bfdb5f60f4f9e8d7004258a51a8da"
dependencies = [
"unicode-bidi",
"unicode-normalization",
@ -2396,9 +2399,9 @@ dependencies = [
[[package]]
name = "syn"
version = "2.0.25"
version = "2.0.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "15e3fc8c0c74267e2df136e5e5fb656a464158aa57624053375eb9c8c6e25ae2"
checksum = "b60f673f44a8255b9c8c657daf66a596d435f2da81a555b06dc644d080ba45e0"
dependencies = [
"proc-macro2",
"quote",
@ -2504,22 +2507,22 @@ dependencies = [
[[package]]
name = "thiserror"
version = "1.0.43"
version = "1.0.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a35fc5b8971143ca348fa6df4f024d4d55264f3468c71ad1c2f365b0a4d58c42"
checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
version = "1.0.43"
version = "1.0.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "463fe12d7993d3b327787537ce8dd4dfa058de32fc2b195ef3cde03dc4771e8f"
checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.25",
"syn 2.0.27",
]
[[package]]
@ -2601,7 +2604,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.25",
"syn 2.0.27",
]
[[package]]
@ -2686,7 +2689,7 @@ checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.25",
"syn 2.0.27",
]
[[package]]
@ -2748,9 +2751,9 @@ checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
[[package]]
name = "unicode-ident"
version = "1.0.10"
version = "1.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22049a19f4a68748a168c0fc439f9516686aa045927ff767eca0a85101fb6e73"
checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
[[package]]
name = "unicode-normalization"
@ -2803,9 +2806,9 @@ dependencies = [
[[package]]
name = "uuid"
version = "1.4.0"
version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d023da39d1fde5a8a3fe1f3e01ca9632ada0a63e9797de55a879d6e2236277be"
checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d"
dependencies = [
"getrandom",
"serde",
@ -2859,7 +2862,7 @@ dependencies = [
"once_cell",
"proc-macro2",
"quote",
"syn 2.0.25",
"syn 2.0.27",
"wasm-bindgen-shared",
]
@ -2893,7 +2896,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.25",
"syn 2.0.27",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]

View File

@ -14,20 +14,31 @@ members = [".", "migration", "entity", "cryptography"]
[dependencies]
anyhow = "1"
arrayvec = "0.7"
base64 = "0.21"
cryptography = { version = "0.1", path = "cryptography" }
dotenv = "0.15"
entity = { version = "0.1", path = "entity" }
futures = "0.3"
hex = "0.4"
itertools = "0.11"
log = "0.4"
migration = { version = "0.2", path = "migration" }
parking_lot = "0.12"
pretty_env_logger = "0.5"
rustc-hash = "1"
sea-orm = { version = "0.11", features = ["sqlx-mysql", "runtime-tokio-rustls"] }
sea-orm = { version = "0.11", features = [
"sqlx-mysql",
"runtime-tokio-rustls",
] }
serde = "1"
serde_json = "1"
teloxide = { version = "0.12", features = ["macros", "ctrlc_handler", "rustls", "throttle"], default-features = false }
sha2 = "0.10"
teloxide = { version = "0.12", features = [
"macros",
"ctrlc_handler",
"rustls",
"throttle",
], default-features = false }
thiserror = "1"
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
trim-in-place = "0.1"

View File

@ -12,7 +12,10 @@ pbkdf2 = "0.12.1"
thiserror = "1.0.40"
entity = { version = "0.1.0", path = "../entity" }
chacha20poly1305 = { version = "0.10.1", features = ["std"] }
rand = { version = "0.8.5", default-features = false, features = ["std_rng", "std"] }
rand = { version = "0.8.5", default-features = false, features = [
"std_rng",
"std",
] }
sea-orm = "0.11.3"
bitflags = "2.3.1"
arrayvec = "0.7.2"

View File

@ -2,7 +2,7 @@ use crate::prelude::*;
use teloxide::{dispatching::DpHandlerDescription, dptree::Handler};
/// Deletes the message from the callback
async fn run(bot: Throttle<Bot>, q: CallbackQuery) -> crate::Result<()> {
pub async fn delete_message(bot: Throttle<Bot>, q: CallbackQuery) -> crate::Result<()> {
if let Some(msg) = q.message {
if bot.delete_message(msg.chat.id, msg.id).await.is_err() {
bot.send_message(msg.chat.id, "Error deleting the message")
@ -13,14 +13,3 @@ async fn run(bot: Throttle<Bot>, q: CallbackQuery) -> crate::Result<()> {
bot.answer_callback_query(q.id).await?;
Ok(())
}
/// Filters the delete_message callbacks
fn filter(q: CallbackQuery) -> bool {
matches!(q.data.as_deref(), Some("delete_message"))
}
/// Gets a handler for deleting the message
#[inline]
pub fn get_handler() -> Handler<'static, DependencyMap, crate::Result<()>, DpHandlerDescription> {
dptree::filter(filter).endpoint(run)
}

View File

@ -1,3 +1,76 @@
//! This module consists of endpoints to handle callbacks
pub mod delete_message;
mod delete_message;
pub use delete_message::delete_message;
use crate::errors::InvalidCommand;
use base64::{engine::general_purpose::STANDARD_NO_PAD as B64_ENGINE, Engine as _};
use std::str::FromStr;
use teloxide::types::{CallbackQuery, Message};
type NameHash = [u8; 32];
#[derive(Clone, Copy)]
pub enum AlterableField {
Name,
Login,
Pass,
}
#[derive(Clone, Copy)]
pub enum CallbackCommand {
DeleteMessage,
Get(NameHash),
GetMenu,
GetAccounts,
Decrypt(NameHash),
Hide(NameHash),
Alter(NameHash, AlterableField),
DeleteAccount(NameHash),
}
impl CallbackCommand {
pub fn from_query(q: CallbackQuery) -> Option<Self> {
q.message.as_ref()?;
q.data.and_then(|text| text.parse().ok())
}
}
impl FromStr for CallbackCommand {
type Err = crate::errors::InvalidCommand;
fn from_str(s: &str) -> Result<Self, Self::Err> {
use AlterableField::*;
use CallbackCommand::*;
match s {
"delete_message" => return Ok(DeleteMessage),
"get_menu" => return Ok(GetMenu),
"get_accounts" => return Ok(GetAccounts),
_ => (),
};
let mut substrings = s.split(' ');
let (command, name) = match (substrings.next(), substrings.next(), substrings.next()) {
(Some(command), Some(name), None) => (command, name),
_ => return Err(InvalidCommand::InvalidParams),
};
let mut name_arr = [0; 32];
if B64_ENGINE.decode_slice(name, &mut name_arr)? != 32 {
return Err(InvalidCommand::OutputTooShort);
};
match command {
"get" => Ok(Get(name_arr)),
"decrypt" => Ok(Decrypt(name_arr)),
"hide" => Ok(Hide(name_arr)),
"an" => Ok(Alter(name_arr, Name)),
"al" => Ok(Alter(name_arr, Login)),
"ap" => Ok(Alter(name_arr, Pass)),
"delete" => Ok(DeleteAccount(name_arr)),
_ => Err(InvalidCommand::InvalidParams),
}
}
}

View File

@ -5,3 +5,13 @@ pub struct NoUserInfo;
#[derive(thiserror::Error, Debug)]
#[error("Handler was already used")]
pub struct HandlerUsed;
#[derive(thiserror::Error, Debug)]
pub enum InvalidCommand {
#[error("Invalid params")]
InvalidParams,
#[error("Not enough bytes in the name's hash")]
OutputTooShort,
#[error("Error decoding the values: {0}")]
NameDecodingError(#[from] base64::DecodeSliceError),
}

View File

@ -1,3 +1,5 @@
#![allow(unused)]
mod callbacks;
mod commands;
mod default;
@ -18,6 +20,8 @@ use sea_orm::Database;
use std::env;
use teloxide::{adaptors::throttle::Limits, dispatching::dialogue::InMemStorage, filter_command};
use crate::callbacks::CallbackCommand;
fn get_dispatcher(
token: String,
db: DatabaseConnection,
@ -55,8 +59,9 @@ fn get_dispatcher(
.branch(command_handler)
.endpoint(default::default);
let callback_handler =
Update::filter_callback_query().chain(callbacks::delete_message::get_handler());
let callback_handler = Update::filter_callback_query()
.filter_map(CallbackCommand::from_query)
.branch(case![CallbackCommand::DeleteMessage].endpoint(callbacks::delete_message));
let handler = dptree::entry()
.branch(message_handler)

View File

@ -1,4 +1,8 @@
use crate::prelude::*;
use base64::{engine::general_purpose::STANDARD as B64_ENGINE, Engine as _};
use futures::future;
use itertools::Itertools;
use sha2::{Digest, Sha256};
use teloxide::types::{InlineKeyboardButton, InlineKeyboardMarkup, KeyboardButton, KeyboardMarkup};
/// Creates a markup of all user's account names