[package]
edition = "2024"
name = "yauth"
version = "0.8.13"
build = false
publish = true
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Modular, plugin-based authentication for Axum — passkey, MFA, OAuth, JWT, API keys"
readme = "README.md"
keywords = [
"axum",
"authentication",
"webauthn",
"totp",
"oauth",
]
categories = [
"authentication",
"web-programming",
]
license = "MIT"
repository = "https://github.com/yackey-labs/yauth"
resolver = "2"
[features]
account-lockout = []
admin = []
all-backends = [
"diesel-pg-backend",
"diesel-mysql-backend",
"diesel-sqlite-backend",
"sqlx-pg-backend",
"sqlx-mysql-backend",
"sqlx-sqlite-backend",
"seaorm-pg-backend",
"seaorm-mysql-backend",
"seaorm-sqlite-backend",
"memory-backend",
"redis",
]
api-key = []
bearer = ["dep:jsonwebtoken"]
default = [
"email-password",
"diesel-pg-backend",
]
diesel-libsql-backend = [
"dep:diesel",
"dep:diesel-async-crate",
"dep:diesel-libsql",
"dep:futures-util",
]
diesel-mysql-backend = [
"dep:diesel",
"diesel/mysql_backend",
"dep:diesel-async-crate",
"diesel-async-crate/mysql",
"diesel-async-crate/deadpool",
"dep:futures-util",
]
diesel-pg-backend = [
"dep:diesel",
"dep:diesel-async-crate",
"diesel-async-crate/postgres",
"diesel-async-crate/deadpool",
"dep:futures-util",
]
diesel-sqlite-backend = [
"dep:diesel",
"diesel/sqlite",
"dep:diesel-async-crate",
"diesel-async-crate/sqlite",
"diesel-async-crate/deadpool",
"dep:futures-util",
]
email-password = []
full = [
"email-password",
"passkey",
"mfa",
"oauth",
"bearer",
"api-key",
"magic-link",
"admin",
"status",
"oauth2-server",
"account-lockout",
"webhooks",
"oidc",
"telemetry",
"openapi",
]
magic-link = []
memory-backend = []
mfa = ["dep:totp-rs"]
oauth = ["dep:oauth2"]
oauth2-server = [
"dep:url",
"dep:base64",
"dep:serde_urlencoded",
]
oidc = [
"bearer",
"oauth2-server",
]
openapi = ["dep:utoipa"]
passkey = ["dep:webauthn-rs"]
redis = ["dep:redis"]
seaorm-mysql-backend = [
"dep:sea-orm",
"sea-orm/sqlx-mysql",
]
seaorm-pg-backend = [
"dep:sea-orm",
"sea-orm/sqlx-postgres",
]
seaorm-sqlite-backend = [
"dep:sea-orm",
"sea-orm/sqlx-sqlite",
]
sqlx-mysql-backend = [
"dep:sqlx",
"sqlx/mysql",
]
sqlx-pg-backend = [
"dep:sqlx",
"sqlx/postgres",
]
sqlx-sqlite-backend = [
"dep:sqlx",
"sqlx/sqlite",
]
status = []
telemetry = [
"dep:opentelemetry",
"dep:opentelemetry_sdk",
"dep:opentelemetry-otlp",
"dep:opentelemetry-semantic-conventions",
"dep:opentelemetry-http",
]
webhooks = [
"dep:hmac",
"dep:url",
]
[lib]
name = "yauth"
path = "src/lib.rs"
[[example]]
name = "e2e_test"
path = "examples/e2e_test.rs"
required-features = [
"full",
"diesel-pg-backend",
]
[[example]]
name = "server"
path = "examples/server.rs"
required-features = [
"full",
"diesel-pg-backend",
]
[[test]]
name = "diesel_integration"
path = "tests/diesel_integration.rs"
[[test]]
name = "diesel_mysql_integration"
path = "tests/diesel_mysql_integration.rs"
[[test]]
name = "generate_client"
path = "tests/generate_client.rs"
[[test]]
name = "libsql_integration"
path = "tests/libsql_integration.rs"
[[test]]
name = "memory_backend"
path = "tests/memory_backend.rs"
[[test]]
name = "pentest"
path = "tests/pentest.rs"
[[test]]
name = "repo_conformance"
path = "tests/repo_conformance.rs"
[dependencies.argon2]
version = "0.5"
[dependencies.axum]
version = "0.8"
features = ["macros"]
[dependencies.axum-extra]
version = "0.12"
features = ["cookie"]
[dependencies.base64]
version = "0.22"
optional = true
[dependencies.chrono]
version = "0.4"
features = ["serde"]
[dependencies.diesel]
version = "2.3"
features = [
"postgres_backend",
"uuid",
"chrono",
"serde_json",
]
optional = true
[dependencies.diesel-async-crate]
version = "0.8"
features = ["deadpool"]
optional = true
package = "diesel-async"
[dependencies.diesel-libsql]
version = "0.1.4"
features = [
"async",
"deadpool",
]
optional = true
[dependencies.futures-util]
version = "0.3"
optional = true
[dependencies.hex]
version = "0.4"
[dependencies.hmac]
version = "0.12"
optional = true
[dependencies.jsonwebtoken]
version = "10"
features = ["rust_crypto"]
optional = true
[dependencies.lettre]
version = "0.11"
features = [
"tokio1-rustls-tls",
"smtp-transport",
"builder",
"hostname",
]
default-features = false
[dependencies.log]
version = "0.4"
[dependencies.oauth2]
version = "5"
optional = true
[dependencies.opentelemetry]
version = "0.31"
optional = true
[dependencies.opentelemetry-http]
version = "0.31"
optional = true
[dependencies.opentelemetry-otlp]
version = "0.31"
features = ["grpc-tonic"]
optional = true
[dependencies.opentelemetry-semantic-conventions]
version = "0.31"
optional = true
[dependencies.opentelemetry_sdk]
version = "0.31"
features = ["rt-tokio"]
optional = true
[dependencies.password-hash]
version = "0.5"
features = ["std"]
[dependencies.rand]
version = "0.8"
[dependencies.redis]
version = "0.27"
features = [
"aio",
"tokio-comp",
"connection-manager",
]
optional = true
[dependencies.reqwest]
version = "0.12"
features = [
"rustls-tls",
"json",
"cookies",
]
default-features = false
[dependencies.sea-orm]
version = "=2.0.0-rc.37"
features = [
"macros",
"with-chrono",
"with-uuid",
"with-json",
"runtime-tokio-rustls",
]
optional = true
default-features = false
[dependencies.serde]
version = "1"
features = ["derive"]
[dependencies.serde_json]
version = "1"
[dependencies.serde_urlencoded]
version = "0.7"
optional = true
[dependencies.sha1]
version = "0.10"
[dependencies.sha2]
version = "0.10"
[dependencies.sqlx]
version = "0.8"
features = [
"runtime-tokio",
"tls-rustls",
"chrono",
"uuid",
"json",
"derive",
"macros",
]
optional = true
default-features = false
[dependencies.thiserror]
version = "2"
[dependencies.tokio]
version = "1"
features = ["full"]
[dependencies.totp-rs]
version = "5"
features = [
"gen_secret",
"otpauth",
]
optional = true
[dependencies.url]
version = "2"
optional = true
[dependencies.utoipa]
version = "5"
features = [
"axum_extras",
"uuid",
"chrono",
]
optional = true
[dependencies.uuid]
version = "1"
features = [
"v7",
"serde",
]
[dependencies.webauthn-rs]
version = "0.5"
features = [
"danger-allow-state-serialisation",
"conditional-ui",
]
optional = true
[dependencies.yauth-entity]
version = "0.8.13"
[dependencies.yauth-migration]
version = "0.8.13"
[dev-dependencies.base64]
version = "0.22"
[dev-dependencies.env_logger]
version = "0.11"
[dev-dependencies.http-body-util]
version = "0.1"
[dev-dependencies.opentelemetry]
version = "0.31"
[dev-dependencies.opentelemetry-otlp]
version = "0.31"
features = [
"grpc-tonic",
"http-proto",
"reqwest-blocking-client",
"reqwest-rustls",
]
[dev-dependencies.opentelemetry-semantic-conventions]
version = "0.31"
[dev-dependencies.opentelemetry_sdk]
version = "0.31"
features = ["rt-tokio"]
[dev-dependencies.testcontainers]
version = "0.27"
[dev-dependencies.testcontainers-modules]
version = "0.15"
features = [
"postgres",
"mysql",
]
[dev-dependencies.totp-rs]
version = "5"
features = [
"gen_secret",
"otpauth",
]
[dev-dependencies.tower]
version = "0.5"
features = ["util"]
[dev-dependencies.tracing]
version = "0.1"
[dev-dependencies.tracing-opentelemetry]
version = "0.32"
[dev-dependencies.tracing-subscriber]
version = "0.3"
features = ["env-filter"]
[dev-dependencies.url]
version = "2"
[dev-dependencies.uuid]
version = "1"
features = [
"v7",
"serde",
]
[dev-dependencies.yauth-entity]
version = "0.8.13"