diff --git a/CHANGELOG.md b/CHANGELOG.md index 4fae8fac..feba55a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,22 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +## [0.8.3] - 2024-07-01 + +To upgrade replace the `stalwart-mail` binary and then upgrade to the latest web-admin. + +## Added +- Two-factor authentication with Time-based One-Time Passwords (#436) +- Application passwords (#479). + +### Changed +- DANE success on EndEntity match regardless of TrustAnchor validation. + +### Fixed +- Fix ManageSieve GETSCRIPT response: Add missing CRLF (#563) +- Do not return CAPABILITIES after ManageSieve AUTH=PLAIN SASL exchange (#548) +- POP3 QUIT must write a response (#568) + ## [0.8.2] - 2024-06-22 To upgrade replace the `stalwart-mail` binary and then upgrade to the latest web-admin and spam filter versions. diff --git a/Cargo.lock b/Cargo.lock index 2255547d..e01ac8bc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1016,7 +1016,7 @@ dependencies = [ [[package]] name = "common" -version = "0.8.2" +version = "0.8.3" dependencies = [ "ahash 0.8.11", "arc-swap", @@ -1614,7 +1614,7 @@ dependencies = [ [[package]] name = "directory" -version = "0.8.2" +version = "0.8.3" dependencies = [ "ahash 0.8.11", "argon2", @@ -2926,7 +2926,7 @@ checksum = "edcd27d72f2f071c64249075f42e205ff93c9a4c5f6c6da53e79ed9f9832c285" [[package]] name = "imap" -version = "0.8.2" +version = "0.8.3" dependencies = [ "ahash 0.8.11", "common", @@ -3128,7 +3128,7 @@ dependencies = [ [[package]] name = "jmap" -version = "0.8.2" +version = "0.8.3" dependencies = [ "aes", "aes-gcm", @@ -3565,7 +3565,7 @@ dependencies = [ [[package]] name = "mail-server" -version = "0.8.2" +version = "0.8.3" dependencies = [ "common", "directory", @@ -3585,7 +3585,7 @@ dependencies = [ [[package]] name = "managesieve" -version = "0.8.2" +version = "0.8.3" dependencies = [ "ahash 0.8.11", "bincode", @@ -3862,7 +3862,7 @@ dependencies = [ [[package]] name = "nlp" -version = "0.8.2" +version = "0.8.3" dependencies = [ "ahash 0.8.11", "bincode", @@ -4418,7 +4418,7 @@ dependencies = [ [[package]] name = "pop3" -version = "0.8.2" +version = "0.8.3" dependencies = [ "common", "imap", @@ -5589,7 +5589,7 @@ checksum = "b84345e4c9bd703274a082fb80caaa99b7612be48dfaa1dd9266577ec412309d" [[package]] name = "se_common" -version = "0.8.2" +version = "0.8.3" dependencies = [ "common", "tracing", @@ -5597,7 +5597,7 @@ dependencies = [ [[package]] name = "se_licensing" -version = "0.8.2" +version = "0.8.3" dependencies = [ "base64 0.22.1", "ring 0.17.8", @@ -5975,7 +5975,7 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "smtp" -version = "0.8.2" +version = "0.8.3" dependencies = [ "ahash 0.8.11", "bincode", @@ -6092,7 +6092,7 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "stalwart-cli" -version = "0.8.2" +version = "0.8.3" dependencies = [ "clap", "console", @@ -6123,7 +6123,7 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "store" -version = "0.8.2" +version = "0.8.3" dependencies = [ "ahash 0.8.11", "arc-swap", @@ -7063,7 +7063,7 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "utils" -version = "0.8.2" +version = "0.8.3" dependencies = [ "ahash 0.8.11", "base64 0.22.1", diff --git a/README.md b/README.md index 82b9d7ee..8d176196 100644 --- a/README.md +++ b/README.md @@ -94,6 +94,7 @@ Key features: - Encryption at rest with **S/MIME** or **OpenPGP**. - Automatic TLS certificate provisioning with [ACME](https://datatracker.ietf.org/doc/html/rfc8555) using `TLS-ALPN-01`, `DNS-01` or `HTTP-01` challenges. - OAuth 2.0 [authorization code](https://www.rfc-editor.org/rfc/rfc8628) and [device authorization](https://www.rfc-editor.org/rfc/rfc8628) flows. + - Two-factor authentication with Time-based One-Time Passwords (2FA-TOTP) and Application passwords (App Passwords). - Automated blocking of hosts that cause multiple authentication errors (aka **fail2ban**). - Access Control Lists (ACLs). - Rate limiting. @@ -135,6 +136,12 @@ Part of the development of this project was funded through the [NGI0 Entrust Fun If you find the project useful you can help by [becoming a sponsor](https://liberapay.com/stalwartlabs). Thank you! +## Sponsors + +These are our open-source sponsors. If you would like to support our work, please consider [becoming a sponsor](https://github.com/sponsors/stalwartlabs). + + + ## License This project is dual-licensed under the **GNU Affero General Public License v3.0** (AGPL-3.0; as published by the Free Software Foundation) and the **Stalwart Enterprise License v1 (SELv1)**: diff --git a/crates/cli/Cargo.toml b/crates/cli/Cargo.toml index 02bbadab..76524df6 100644 --- a/crates/cli/Cargo.toml +++ b/crates/cli/Cargo.toml @@ -5,7 +5,7 @@ authors = ["Stalwart Labs Ltd. "] license = "AGPL-3.0-only OR LicenseRef-SEL" repository = "https://github.com/stalwartlabs/cli" homepage = "https://github.com/stalwartlabs/cli" -version = "0.8.2" +version = "0.8.3" edition = "2021" readme = "README.md" resolver = "2" diff --git a/crates/common/Cargo.toml b/crates/common/Cargo.toml index 9c749bb3..5995593a 100644 --- a/crates/common/Cargo.toml +++ b/crates/common/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "common" -version = "0.8.2" +version = "0.8.3" edition = "2021" resolver = "2" diff --git a/crates/directory/Cargo.toml b/crates/directory/Cargo.toml index dfe7694a..35ecd0e3 100644 --- a/crates/directory/Cargo.toml +++ b/crates/directory/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "directory" -version = "0.8.2" +version = "0.8.3" edition = "2021" resolver = "2" diff --git a/crates/imap/Cargo.toml b/crates/imap/Cargo.toml index b06e8462..04ba395c 100644 --- a/crates/imap/Cargo.toml +++ b/crates/imap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "imap" -version = "0.8.2" +version = "0.8.3" edition = "2021" resolver = "2" diff --git a/crates/jmap/Cargo.toml b/crates/jmap/Cargo.toml index 5b1cca6a..0a123199 100644 --- a/crates/jmap/Cargo.toml +++ b/crates/jmap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "jmap" -version = "0.8.2" +version = "0.8.3" edition = "2021" resolver = "2" diff --git a/crates/jmap/src/api/management/principal.rs b/crates/jmap/src/api/management/principal.rs index 096fa366..8168e42a 100644 --- a/crates/jmap/src/api/management/principal.rs +++ b/crates/jmap/src/api/management/principal.rs @@ -60,7 +60,7 @@ pub enum AccountAuthRequest { SetPassword { password: String }, EnableOtpAuth { url: String }, DisableOtpAuth { url: Option }, - AddAppPassword { name: String }, + AddAppPassword { name: String, password: String }, RemoveAppPassword { name: String }, } @@ -443,9 +443,11 @@ impl JMAP { PrincipalAction::RemoveItem, url.unwrap_or_else(|| "otpauth://".to_string()), ), - AccountAuthRequest::AddAppPassword { name } => (PrincipalAction::AddItem, name), + AccountAuthRequest::AddAppPassword { name, password } => { + (PrincipalAction::AddItem, format!("$app${name}${password}")) + } AccountAuthRequest::RemoveAppPassword { name } => { - (PrincipalAction::RemoveItem, name) + (PrincipalAction::RemoveItem, format!("$app${name}")) } }; diff --git a/crates/main/Cargo.toml b/crates/main/Cargo.toml index 5d5f1bec..21f6dbd9 100644 --- a/crates/main/Cargo.toml +++ b/crates/main/Cargo.toml @@ -7,7 +7,7 @@ homepage = "https://stalw.art" keywords = ["imap", "jmap", "smtp", "email", "mail", "server"] categories = ["email"] license = "AGPL-3.0-only OR LicenseRef-SEL" -version = "0.8.2" +version = "0.8.3" edition = "2021" resolver = "2" diff --git a/crates/managesieve/Cargo.toml b/crates/managesieve/Cargo.toml index f9518eae..7a164593 100644 --- a/crates/managesieve/Cargo.toml +++ b/crates/managesieve/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "managesieve" -version = "0.8.2" +version = "0.8.3" edition = "2021" resolver = "2" diff --git a/crates/nlp/Cargo.toml b/crates/nlp/Cargo.toml index 8ced76be..229e0f4a 100644 --- a/crates/nlp/Cargo.toml +++ b/crates/nlp/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nlp" -version = "0.8.2" +version = "0.8.3" edition = "2021" resolver = "2" diff --git a/crates/pop3/Cargo.toml b/crates/pop3/Cargo.toml index 7fe31036..ad5defc7 100644 --- a/crates/pop3/Cargo.toml +++ b/crates/pop3/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pop3" -version = "0.8.2" +version = "0.8.3" edition = "2021" resolver = "2" diff --git a/crates/se-common/Cargo.toml b/crates/se-common/Cargo.toml index f2ebccd8..689004ec 100644 --- a/crates/se-common/Cargo.toml +++ b/crates/se-common/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "se_common" -version = "0.8.2" +version = "0.8.3" edition = "2021" license = "LicenseRef-SEL" resolver = "2" diff --git a/crates/se-licensing/Cargo.toml b/crates/se-licensing/Cargo.toml index 50be1ecd..07e3711f 100644 --- a/crates/se-licensing/Cargo.toml +++ b/crates/se-licensing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "se_licensing" -version = "0.8.2" +version = "0.8.3" edition = "2021" license = "LicenseRef-SEL" resolver = "2" diff --git a/crates/smtp/Cargo.toml b/crates/smtp/Cargo.toml index d62c285f..b4c0f0af 100644 --- a/crates/smtp/Cargo.toml +++ b/crates/smtp/Cargo.toml @@ -7,7 +7,7 @@ homepage = "https://stalw.art/smtp" keywords = ["smtp", "email", "mail", "server"] categories = ["email"] license = "AGPL-3.0-only OR LicenseRef-SEL" -version = "0.8.2" +version = "0.8.3" edition = "2021" resolver = "2" diff --git a/crates/store/Cargo.toml b/crates/store/Cargo.toml index ac0a3d81..b0899694 100644 --- a/crates/store/Cargo.toml +++ b/crates/store/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "store" -version = "0.8.2" +version = "0.8.3" edition = "2021" resolver = "2" diff --git a/crates/utils/Cargo.toml b/crates/utils/Cargo.toml index f6a10b87..24998325 100644 --- a/crates/utils/Cargo.toml +++ b/crates/utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "utils" -version = "0.8.2" +version = "0.8.3" edition = "2021" resolver = "2"