mirror of
https://github.com/soywod/himalaya.git
synced 2024-11-24 20:10:23 +00:00
remove imap and smtp auth serde flatten
This commit is contained in:
parent
cfc88118bb
commit
a2fa0dcf55
4 changed files with 75 additions and 46 deletions
18
CHANGELOG.md
18
CHANGELOG.md
|
@ -28,6 +28,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
- Added `accounts.<name>.envelope.list.table.flagged-char` account config option to customize the char used for flagged envelopes (defaults to `!`).
|
- Added `accounts.<name>.envelope.list.table.flagged-char` account config option to customize the char used for flagged envelopes (defaults to `!`).
|
||||||
- Added `accounts.<name>.envelope.list.table.attachment-char` account config option to customize the char used for envelopes with at least one attachment (defaults to `@`).
|
- Added `accounts.<name>.envelope.list.table.attachment-char` account config option to customize the char used for envelopes with at least one attachment (defaults to `@`).
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Refactored IMAP and SMTP auth config API
|
||||||
|
|
||||||
|
The IMAP and SMTP auth config option is now explicit, in order to improve error messages:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
# before
|
||||||
|
imap.password.cmd = "pass show example"
|
||||||
|
smtp.oauth2.method = "xoauth2"
|
||||||
|
|
||||||
|
# after
|
||||||
|
imap.auth.type = "password"
|
||||||
|
imap.auth.cmd = "pass show example"
|
||||||
|
smtp.auth.type = "oauth2"
|
||||||
|
smtp.auth.method = "xoauth2"
|
||||||
|
```
|
||||||
|
|
||||||
## [1.0.0-beta.4] - 2024-04-16
|
## [1.0.0-beta.4] - 2024-04-16
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
4
Cargo.lock
generated
4
Cargo.lock
generated
|
@ -1232,7 +1232,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "email-lib"
|
name = "email-lib"
|
||||||
version = "0.25.0"
|
version = "0.25.0"
|
||||||
source = "git+https://github.com/pimalaya/core#45efcdc68797efdbdf7ee23a1e77b84ff32c2925"
|
source = "git+https://github.com/pimalaya/core#520796c592c4d52236b597b34819e0f817686378"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"chrono",
|
"chrono",
|
||||||
|
@ -2891,7 +2891,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oauth-lib"
|
name = "oauth-lib"
|
||||||
version = "0.1.1"
|
version = "0.1.1"
|
||||||
source = "git+https://github.com/pimalaya/core#45efcdc68797efdbdf7ee23a1e77b84ff32c2925"
|
source = "git+https://github.com/pimalaya/core#520796c592c4d52236b597b34819e0f817686378"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"log",
|
"log",
|
||||||
"oauth2",
|
"oauth2",
|
||||||
|
|
|
@ -329,27 +329,31 @@ imap.login = "example@localhost"
|
||||||
|
|
||||||
# IMAP server password authentication configuration.
|
# IMAP server password authentication configuration.
|
||||||
#
|
#
|
||||||
|
#imap.auth.type = "password"
|
||||||
|
#
|
||||||
# Password can be inlined (not recommended).
|
# Password can be inlined (not recommended).
|
||||||
#
|
#
|
||||||
#imap.passwd.raw = "p@assw0rd"
|
#imap.auth.raw = "p@assw0rd"
|
||||||
#
|
#
|
||||||
# Password can be stored inside your system global keyring (requires
|
# Password can be stored inside your system global keyring (requires
|
||||||
# the keyring cargo feature). You must run at least once `himalaya
|
# the keyring cargo feature). You must run at least once `himalaya
|
||||||
# account configure` to set up the password.
|
# account configure` to set up the password.
|
||||||
#
|
#
|
||||||
#imap.passwd.keyring = "example-imap"
|
#imap.auth.keyring = "example-imap"
|
||||||
#
|
#
|
||||||
# Password can be retrieved from a shell command.
|
# Password can be retrieved from a shell command.
|
||||||
#
|
#
|
||||||
imap.passwd.cmd = "pass show example-imap"
|
imap.auth.cmd = "pass show example-imap"
|
||||||
|
|
||||||
# IMAP server OAuth 2.0 authorization configuration.
|
# IMAP server OAuth 2.0 authorization configuration.
|
||||||
#
|
#
|
||||||
|
#imap.auth.type = "oauth2"
|
||||||
|
#
|
||||||
# Client identifier issued to the client during the registration
|
# Client identifier issued to the client during the registration
|
||||||
# process described in RFC6749.
|
# process described in RFC6749.
|
||||||
# See <https://datatracker.ietf.org/doc/html/rfc6749#section-2.2>.
|
# See <https://datatracker.ietf.org/doc/html/rfc6749#section-2.2>.
|
||||||
#
|
#
|
||||||
#imap.oauth2.client-id = "client-id"
|
#imap.auth.client-id = "client-id"
|
||||||
#
|
#
|
||||||
# Client password issued to the client during the registration process
|
# Client password issued to the client during the registration process
|
||||||
# described in RFC6749.
|
# described in RFC6749.
|
||||||
|
@ -357,23 +361,23 @@ imap.passwd.cmd = "pass show example-imap"
|
||||||
# Defaults to keyring "<account-name>-imap-client-secret".
|
# Defaults to keyring "<account-name>-imap-client-secret".
|
||||||
# See <https://datatracker.ietf.org/doc/html/rfc6749#section-2.2>.
|
# See <https://datatracker.ietf.org/doc/html/rfc6749#section-2.2>.
|
||||||
#
|
#
|
||||||
#imap.oauth2.client-secret.raw = "<raw-client-secret>"
|
#imap.auth.client-secret.raw = "<raw-client-secret>"
|
||||||
#imap.oauth2.client-secret.keyring = "example-imap-client-secret"
|
#imap.auth.client-secret.keyring = "example-imap-client-secret"
|
||||||
#imap.oauth2.client-secret.cmd = "pass show example-imap-client-secret"
|
#imap.auth.client-secret.cmd = "pass show example-imap-client-secret"
|
||||||
#
|
#
|
||||||
# Method for presenting an OAuth 2.0 bearer token to a service for
|
# Method for presenting an OAuth 2.0 bearer token to a service for
|
||||||
# authentication.
|
# authentication.
|
||||||
#
|
#
|
||||||
#imap.oauth2.method = "oauthbearer"
|
#imap.auth.method = "oauthbearer"
|
||||||
#imap.oauth2.method = "xoauth2"
|
#imap.auth.method = "xoauth2"
|
||||||
#
|
#
|
||||||
# URL of the authorization server's authorization endpoint.
|
# URL of the authorization server's authorization endpoint.
|
||||||
#
|
#
|
||||||
#imap.oauth2.auth-url = "https://accounts.google.com/o/oauth2/v2/auth"
|
#imap.auth.auth-url = "https://accounts.google.com/o/oauth2/v2/auth"
|
||||||
#
|
#
|
||||||
# URL of the authorization server's token endpoint.
|
# URL of the authorization server's token endpoint.
|
||||||
#
|
#
|
||||||
#imap.oauth2.token-url = "https://www.googleapis.com/oauth2/v3/token"
|
#imap.auth.token-url = "https://www.googleapis.com/oauth2/v3/token"
|
||||||
#
|
#
|
||||||
# Access token returned by the token endpoint and used to access
|
# Access token returned by the token endpoint and used to access
|
||||||
# protected resources. It is recommended to use the keyring variant,
|
# protected resources. It is recommended to use the keyring variant,
|
||||||
|
@ -381,9 +385,9 @@ imap.passwd.cmd = "pass show example-imap"
|
||||||
#
|
#
|
||||||
# Defaults to keyring "<account-name>-imap-access-token".
|
# Defaults to keyring "<account-name>-imap-access-token".
|
||||||
#
|
#
|
||||||
#imap.oauth2.access-token.raw = "<raw-access-token>"
|
#imap.auth.access-token.raw = "<raw-access-token>"
|
||||||
#imap.oauth2.access-token.keyring = "example-imap-access-token"
|
#imap.auth.access-token.keyring = "example-imap-access-token"
|
||||||
#imap.oauth2.access-token.cmd = "pass show example-imap-access-token"
|
#imap.auth.access-token.cmd = "pass show example-imap-access-token"
|
||||||
#
|
#
|
||||||
# Refresh token used to obtain a new access token (if supported by the
|
# Refresh token used to obtain a new access token (if supported by the
|
||||||
# authorization server). It is recommended to use the keyring variant,
|
# authorization server). It is recommended to use the keyring variant,
|
||||||
|
@ -391,30 +395,30 @@ imap.passwd.cmd = "pass show example-imap"
|
||||||
#
|
#
|
||||||
# Defaults to keyring "<account-name>-imap-refresh-token".
|
# Defaults to keyring "<account-name>-imap-refresh-token".
|
||||||
#
|
#
|
||||||
#imap.oauth2.refresh-token.raw = "<raw-refresh-token>"
|
#imap.auth.refresh-token.raw = "<raw-refresh-token>"
|
||||||
#imap.oauth2.refresh-token.keyring = "example-imap-refresh-token"
|
#imap.auth.refresh-token.keyring = "example-imap-refresh-token"
|
||||||
#imap.oauth2.refresh-token.cmd = "pass show example-imap-refresh-token"
|
#imap.auth.refresh-token.cmd = "pass show example-imap-refresh-token"
|
||||||
#
|
#
|
||||||
# Enable the protection, as defined in RFC7636.
|
# Enable the protection, as defined in RFC7636.
|
||||||
#
|
#
|
||||||
# See <https://datatracker.ietf.org/doc/html/rfc7636>.
|
# See <https://datatracker.ietf.org/doc/html/rfc7636>.
|
||||||
#
|
#
|
||||||
#imap.oauth2.pkce = true
|
#imap.auth.pkce = true
|
||||||
#
|
#
|
||||||
# Access token scope(s), as defined by the authorization server.
|
# Access token scope(s), as defined by the authorization server.
|
||||||
#
|
#
|
||||||
#imap.oauth2.scope = "unique scope"
|
#imap.auth.scope = "unique scope"
|
||||||
#imap.oauth2.scopes = ["multiple", "scopes"]
|
#imap.auth.scopes = ["multiple", "scopes"]
|
||||||
#
|
#
|
||||||
# Host name of the redirect server.
|
# Host name of the redirect server.
|
||||||
# Defaults to localhost.
|
# Defaults to localhost.
|
||||||
#
|
#
|
||||||
#imap.oauth2.redirect-host = "localhost"
|
#imap.auth.redirect-host = "localhost"
|
||||||
#
|
#
|
||||||
# Port of the redirect server.
|
# Port of the redirect server.
|
||||||
# Defaults to the first available one.
|
# Defaults to the first available one.
|
||||||
#
|
#
|
||||||
#imap.oauth2.redirect-port = 9999
|
#imap.auth.redirect-port = 9999
|
||||||
|
|
||||||
########################################
|
########################################
|
||||||
#### Maildir configuration #############
|
#### Maildir configuration #############
|
||||||
|
@ -491,27 +495,31 @@ smtp.login = "example@localhost"
|
||||||
|
|
||||||
# SMTP server password authentication configuration.
|
# SMTP server password authentication configuration.
|
||||||
#
|
#
|
||||||
|
#smtp.auth.type = "password"
|
||||||
|
#
|
||||||
# Password can be inlined (not recommended).
|
# Password can be inlined (not recommended).
|
||||||
#
|
#
|
||||||
#smtp.passwd.raw = "p@assw0rd"
|
#smtp.auth.raw = "p@assw0rd"
|
||||||
#
|
#
|
||||||
# Password can be stored inside your system global keyring (requires
|
# Password can be stored inside your system global keyring (requires
|
||||||
# the keyring cargo feature). You must run at least once `himalaya
|
# the keyring cargo feature). You must run at least once `himalaya
|
||||||
# account configure` to set up the password.
|
# account configure` to set up the password.
|
||||||
#
|
#
|
||||||
#smtp.passwd.keyring = "example-smtp"
|
#smtp.auth.keyring = "example-smtp"
|
||||||
#
|
#
|
||||||
# Password can be retrieved from a shell command.
|
# Password can be retrieved from a shell command.
|
||||||
#
|
#
|
||||||
smtp.passwd.cmd = "pass show example-smtp"
|
smtp.auth.cmd = "pass show example-smtp"
|
||||||
|
|
||||||
# SMTP server OAuth 2.0 authorization configuration.
|
# SMTP server OAuth 2.0 authorization configuration.
|
||||||
#
|
#
|
||||||
|
#smtp.auth.type = "oauth2"
|
||||||
|
#
|
||||||
# Client identifier issued to the client during the registration
|
# Client identifier issued to the client during the registration
|
||||||
# process described in RFC6749.
|
# process described in RFC6749.
|
||||||
# See <https://datatracker.ietf.org/doc/html/rfc6749#section-2.2>.
|
# See <https://datatracker.ietf.org/doc/html/rfc6749#section-2.2>.
|
||||||
#
|
#
|
||||||
#smtp.oauth2.client-id = "client-id"
|
#smtp.auth.client-id = "client-id"
|
||||||
#
|
#
|
||||||
# Client password issued to the client during the registration process
|
# Client password issued to the client during the registration process
|
||||||
# described in RFC6749.
|
# described in RFC6749.
|
||||||
|
@ -519,23 +527,23 @@ smtp.passwd.cmd = "pass show example-smtp"
|
||||||
# Defaults to keyring "<account-name>-smtp-client-secret".
|
# Defaults to keyring "<account-name>-smtp-client-secret".
|
||||||
# See <https://datatracker.ietf.org/doc/html/rfc6749#section-2.2>.
|
# See <https://datatracker.ietf.org/doc/html/rfc6749#section-2.2>.
|
||||||
#
|
#
|
||||||
#smtp.oauth2.client-secret.raw = "<raw-client-secret>"
|
#smtp.auth.client-secret.raw = "<raw-client-secret>"
|
||||||
#smtp.oauth2.client-secret.keyring = "example-smtp-client-secret"
|
#smtp.auth.client-secret.keyring = "example-smtp-client-secret"
|
||||||
#smtp.oauth2.client-secret.cmd = "pass show example-smtp-client-secret"
|
#smtp.auth.client-secret.cmd = "pass show example-smtp-client-secret"
|
||||||
#
|
#
|
||||||
# Method for presenting an OAuth 2.0 bearer token to a service for
|
# Method for presenting an OAuth 2.0 bearer token to a service for
|
||||||
# authentication.
|
# authentication.
|
||||||
#
|
#
|
||||||
#smtp.oauth2.method = "oauthbearer"
|
#smtp.auth.method = "oauthbearer"
|
||||||
#smtp.oauth2.method = "xoauth2"
|
#smtp.auth.method = "xoauth2"
|
||||||
#
|
#
|
||||||
# URL of the authorization server's authorization endpoint.
|
# URL of the authorization server's authorization endpoint.
|
||||||
#
|
#
|
||||||
#smtp.oauth2.auth-url = "https://accounts.google.com/o/oauth2/v2/auth"
|
#smtp.auth.auth-url = "https://accounts.google.com/o/oauth2/v2/auth"
|
||||||
#
|
#
|
||||||
# URL of the authorization server's token endpoint.
|
# URL of the authorization server's token endpoint.
|
||||||
#
|
#
|
||||||
#smtp.oauth2.token-url = "https://www.googleapis.com/oauth2/v3/token"
|
#smtp.auth.token-url = "https://www.googleapis.com/oauth2/v3/token"
|
||||||
#
|
#
|
||||||
# Access token returned by the token endpoint and used to access
|
# Access token returned by the token endpoint and used to access
|
||||||
# protected resources. It is recommended to use the keyring variant,
|
# protected resources. It is recommended to use the keyring variant,
|
||||||
|
@ -543,9 +551,9 @@ smtp.passwd.cmd = "pass show example-smtp"
|
||||||
#
|
#
|
||||||
# Defaults to keyring "<account-name>-smtp-access-token".
|
# Defaults to keyring "<account-name>-smtp-access-token".
|
||||||
#
|
#
|
||||||
#smtp.oauth2.access-token.raw = "<raw-access-token>"
|
#smtp.auth.access-token.raw = "<raw-access-token>"
|
||||||
#smtp.oauth2.access-token.keyring = "example-smtp-access-token"
|
#smtp.auth.access-token.keyring = "example-smtp-access-token"
|
||||||
#smtp.oauth2.access-token.cmd = "pass show example-smtp-access-token"
|
#smtp.auth.access-token.cmd = "pass show example-smtp-access-token"
|
||||||
#
|
#
|
||||||
# Refresh token used to obtain a new access token (if supported by the
|
# Refresh token used to obtain a new access token (if supported by the
|
||||||
# authorization server). It is recommended to use the keyring variant,
|
# authorization server). It is recommended to use the keyring variant,
|
||||||
|
@ -553,30 +561,30 @@ smtp.passwd.cmd = "pass show example-smtp"
|
||||||
#
|
#
|
||||||
# Defaults to keyring "<account-name>-smtp-refresh-token".
|
# Defaults to keyring "<account-name>-smtp-refresh-token".
|
||||||
#
|
#
|
||||||
#smtp.oauth2.refresh-token.raw = "<raw-refresh-token>"
|
#smtp.auth.refresh-token.raw = "<raw-refresh-token>"
|
||||||
#smtp.oauth2.refresh-token.keyring = "example-smtp-refresh-token"
|
#smtp.auth.refresh-token.keyring = "example-smtp-refresh-token"
|
||||||
#smtp.oauth2.refresh-token.cmd = "pass show example-smtp-refresh-token"
|
#smtp.auth.refresh-token.cmd = "pass show example-smtp-refresh-token"
|
||||||
#
|
#
|
||||||
# Enable the protection, as defined in RFC7636.
|
# Enable the protection, as defined in RFC7636.
|
||||||
#
|
#
|
||||||
# See <https://datatracker.ietf.org/doc/html/rfc7636>.
|
# See <https://datatracker.ietf.org/doc/html/rfc7636>.
|
||||||
#
|
#
|
||||||
#smtp.oauth2.pkce = true
|
#smtp.auth.pkce = true
|
||||||
#
|
#
|
||||||
# Access token scope(s), as defined by the authorization server.
|
# Access token scope(s), as defined by the authorization server.
|
||||||
#
|
#
|
||||||
#smtp.oauth2.scope = "unique scope"
|
#smtp.auth.scope = "unique scope"
|
||||||
#smtp.oauth2.scopes = ["multiple", "scopes"]
|
#smtp.auth.scopes = ["multiple", "scopes"]
|
||||||
#
|
#
|
||||||
# Host name of the redirect server.
|
# Host name of the redirect server.
|
||||||
# Defaults to localhost.
|
# Defaults to localhost.
|
||||||
#
|
#
|
||||||
#smtp.oauth2.redirect-host = "localhost"
|
#smtp.auth.redirect-host = "localhost"
|
||||||
#
|
#
|
||||||
# Port of the redirect server.
|
# Port of the redirect server.
|
||||||
# Defaults to the first available one.
|
# Defaults to the first available one.
|
||||||
#
|
#
|
||||||
#smtp.oauth2.redirect-port = 9999
|
#smtp.auth.redirect-port = 9999
|
||||||
|
|
||||||
########################################
|
########################################
|
||||||
#### Sendmail configuration ############
|
#### Sendmail configuration ############
|
||||||
|
|
|
@ -75,7 +75,10 @@ impl Config {
|
||||||
match paths.len() {
|
match paths.len() {
|
||||||
0 => Self::from_default_paths().await,
|
0 => Self::from_default_paths().await,
|
||||||
_ if paths[0].exists() => Self::from_paths(paths),
|
_ if paths[0].exists() => Self::from_paths(paths),
|
||||||
|
#[cfg(feature = "wizard")]
|
||||||
_ => Self::from_wizard(&paths[0]).await,
|
_ => Self::from_wizard(&paths[0]).await,
|
||||||
|
#[cfg(not(feature = "wizard"))]
|
||||||
|
_ => color_eyre::eyre::bail!("cannot find config file from default paths"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue