Incremental caching

This commit is contained in:
mdecimus
2025-04-09 09:56:54 +02:00
parent b9d93730c7
commit b396341240
121 changed files with 2247 additions and 2643 deletions

View File

@@ -25,6 +25,7 @@ parking_lot = "0.12"
ahash = { version = "0.8" }
md5 = "0.7.0"
bincode = "1.3.3"
compact_str = "0.9.0"
[features]

View File

@@ -14,6 +14,7 @@ use common::{
auth::AccessToken,
listener::{ServerInstance, limiter::InFlight},
};
use compact_str::CompactString;
use imap_proto::receiver::{CommandParser, Receiver};
use tokio::io::{AsyncRead, AsyncWrite};
@@ -131,7 +132,7 @@ pub enum ResponseCode {
Active,
NonExistent,
AlreadyExists,
Tag(String),
Tag(CompactString),
Warnings,
}

View File

@@ -23,7 +23,7 @@ mod tests {
(
vec!["Authenticate \"DIGEST-MD5\"\r\n"],
vec![Request {
tag: "".to_string(),
tag: "".into(),
command: Command::Authenticate,
tokens: vec![Token::Argument(b"DIGEST-MD5".to_vec())],
}],
@@ -34,7 +34,7 @@ mod tests {
"cnNwYXV0aD1lYTQwZjYwMzM1YzQyN2I1NTI3Yjg0ZGJhYmNkZmZmZA==\r\n",
],
vec![Request {
tag: "".to_string(),
tag: "".into(),
command: Command::Authenticate,
tokens: vec![
Token::Argument(b"GSSAPI".to_vec()),
@@ -47,7 +47,7 @@ mod tests {
(
vec!["Authenticate \"PLAIN\" \"QJIrweAPyo6Q1T9xu\"\r\n"],
vec![Request {
tag: "".to_string(),
tag: "".into(),
command: Command::Authenticate,
tokens: vec![
Token::Argument(b"PLAIN".to_vec()),
@@ -58,7 +58,7 @@ mod tests {
(
vec!["StartTls\r\n"],
vec![Request {
tag: "".to_string(),
tag: "".into(),
command: Command::StartTls,
tokens: vec![],
}],
@@ -66,7 +66,7 @@ mod tests {
(
vec!["HAVESPACE \"myscript\" 999999\r\n"],
vec![Request {
tag: "".to_string(),
tag: "".into(),
command: Command::HaveSpace,
tokens: vec![
Token::Argument(b"myscript".to_vec()),
@@ -81,7 +81,7 @@ mod tests {
"InvalidSieveCommand\r\n\r\n",
],
vec![Request {
tag: "".to_string(),
tag: "".into(),
command: Command::PutScript,
tokens: vec![
Token::Argument(b"foo".to_vec()),
@@ -92,7 +92,7 @@ mod tests {
(
vec!["Listscripts\r\n"],
vec![Request {
tag: "".to_string(),
tag: "".into(),
command: Command::ListScripts,
tokens: vec![],
}],
@@ -100,7 +100,7 @@ mod tests {
(
vec!["Setactive \"baz\"\r\n"],
vec![Request {
tag: "".to_string(),
tag: "".into(),
command: Command::SetActive,
tokens: vec![Token::Argument(b"baz".to_vec())],
}],
@@ -108,7 +108,7 @@ mod tests {
(
vec!["Renamescript \"foo\" \"bar\"\r\n"],
vec![Request {
tag: "".to_string(),
tag: "".into(),
command: Command::RenameScript,
tokens: vec![
Token::Argument(b"foo".to_vec()),
@@ -119,7 +119,7 @@ mod tests {
(
vec!["NOOP \"STARTTLS-SYNC-42\"\r\n"],
vec![Request {
tag: "".to_string(),
tag: "".into(),
command: Command::Noop,
tokens: vec![Token::Argument(b"STARTTLS-SYNC-42".to_vec())],
}],

View File

@@ -11,6 +11,7 @@ use common::{
},
listener::{SessionStream, limiter::LimiterResult},
};
use compact_str::CompactString;
use directory::Permission;
use imap_proto::{
protocol::authenticate::Mechanism,
@@ -31,7 +32,7 @@ impl<T: SessionStream> Session<T> {
let mut tokens = request.tokens.into_iter();
let mechanism = Mechanism::parse(&tokens.next().unwrap().unwrap_bytes())
.map_err(|err| trc::AuthEvent::Error.into_err().details(err))?;
let mut params: Vec<String> = tokens
let mut params: Vec<CompactString> = tokens
.filter_map(|token| token.unwrap_string().ok())
.collect();
@@ -53,7 +54,7 @@ impl<T: SessionStream> Session<T> {
})?
} else {
self.receiver.request = receiver::Request {
tag: String::new(),
tag: "".into(),
command: Command::Authenticate,
tokens: vec![receiver::Token::Argument(mechanism.into_bytes())],
};