You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
401 lines
11 KiB
401 lines
11 KiB
[workspace.package]
|
|
edition = "2024"
|
|
rust-version = "1.93.0"
|
|
license = "AGPL-3.0-only"
|
|
repository = "https://github.com/dani-garcia/vaultwarden"
|
|
publish = false
|
|
|
|
[workspace]
|
|
members = ["macros"]
|
|
|
|
[package]
|
|
name = "vaultwarden"
|
|
version = "1.0.0"
|
|
authors = ["Daniel García <dani-garcia@users.noreply.github.com>"]
|
|
readme = "README.md"
|
|
build = "build.rs"
|
|
resolver = "2"
|
|
repository.workspace = true
|
|
edition.workspace = true
|
|
rust-version.workspace = true
|
|
license.workspace = true
|
|
publish.workspace = true
|
|
|
|
[features]
|
|
default = [
|
|
# "sqlite",
|
|
# "sqlite_system",
|
|
# "mysql",
|
|
# "postgresql",
|
|
]
|
|
# Empty to keep compatibility, prefer to set USE_SYSLOG=true
|
|
enable_syslog = []
|
|
# Please enable at least one of these DB backends.
|
|
mysql = ["diesel/mysql", "diesel_migrations/mysql"]
|
|
postgresql = ["diesel/postgres", "diesel_migrations/postgres"]
|
|
sqlite_system = ["diesel/sqlite", "diesel_migrations/sqlite"] # Dynamically link SQLite
|
|
sqlite = ["sqlite_system", "libsqlite3-sys/bundled"] # Statically link SQLite into the binary instead of dynamically.
|
|
# Enable to use a vendored and statically linked openssl
|
|
vendored_openssl = ["openssl/vendored"]
|
|
# Enable MiMalloc memory allocator to replace the default malloc
|
|
# This can improve performance for Alpine builds
|
|
enable_mimalloc = ["dep:mimalloc"]
|
|
s3 = [
|
|
"opendal/services-s3",
|
|
"dep:aws-config",
|
|
"dep:aws-credential-types",
|
|
"dep:aws-smithy-runtime-api",
|
|
"dep:http",
|
|
"dep:reqsign-aws-v4",
|
|
"dep:reqsign-core",
|
|
]
|
|
|
|
# OIDC specific features
|
|
oidc-accept-rfc3339-timestamps = ["openidconnect/accept-rfc3339-timestamps"]
|
|
oidc-accept-string-booleans = ["openidconnect/accept-string-booleans"]
|
|
|
|
# Enable unstable features, requires nightly
|
|
# Currently only used to enable rusts official ip support
|
|
unstable = []
|
|
|
|
[target."cfg(unix)".dependencies]
|
|
# Logging
|
|
syslog = "7.0.0"
|
|
|
|
[dependencies]
|
|
macros = { path = "./macros" }
|
|
|
|
# Logging
|
|
log = "0.4.29"
|
|
fern = { version = "0.7.1", features = ["syslog-7", "reopen-1"] }
|
|
# We need the `log` feature for `tracing` to enable logging for several crates to work, like lettre or webauthn-rs
|
|
tracing = { version = "0.1.44", features = ["log"] }
|
|
|
|
# A `dotenv` implementation for Rust
|
|
dotenvy = { version = "0.15.7", default-features = false }
|
|
|
|
# Numerical libraries
|
|
num-traits = "0.2.19"
|
|
num-derive = "0.4.2"
|
|
bigdecimal = "0.4.10"
|
|
|
|
# Web framework
|
|
rocket = { version = "0.5.1", default-features = false, features = ["json", "tls"] }
|
|
rocket_ws = { version = "0.1.1" }
|
|
|
|
# WebSockets libraries
|
|
rmpv = "1.3.1" # MessagePack library
|
|
|
|
# Concurrent HashMap used for WebSocket messaging and favicons
|
|
dashmap = "6.1.0"
|
|
|
|
# Async futures
|
|
futures = "0.3.32"
|
|
tokio = { version = "1.52.3", features = [
|
|
"fs",
|
|
"io-util",
|
|
"net",
|
|
"parking_lot",
|
|
"rt-multi-thread",
|
|
"signal",
|
|
"time",
|
|
] }
|
|
tokio-util = { version = "0.7.18", features = ["compat"] }
|
|
|
|
# A generic serialization/deserialization framework
|
|
serde = { version = "1.0.228", features = ["derive"] }
|
|
serde_json = "1.0.149"
|
|
serde_with = "3.16.1"
|
|
|
|
# A safe, extensible ORM and Query builder
|
|
diesel = { version = "2.3.9", features = ["chrono", "r2d2", "numeric"] }
|
|
diesel_migrations = "2.3.2"
|
|
|
|
derive_more = { version = "2.1.1", features = [
|
|
"as_ref",
|
|
"deref",
|
|
"display",
|
|
"from",
|
|
"into",
|
|
] }
|
|
diesel-derive-newtype = "2.1.2"
|
|
|
|
# SQLite, statically bundled unless the `sqlite_system` feature is enabled
|
|
libsqlite3-sys = { version = "0.37.0", optional = true }
|
|
|
|
# Crypto-related libraries
|
|
rand = "0.10.1"
|
|
ring = "0.17.14"
|
|
rustls = { version = "0.23.40", features = ["ring", "std"], default-features = false }
|
|
subtle = "2.6.1"
|
|
|
|
# UUID generation
|
|
uuid = { version = "1.23.1", features = ["v4"] }
|
|
|
|
# Date and time libraries
|
|
chrono = { version = "0.4.44", default-features = false, features = ["clock", "serde"] }
|
|
chrono-tz = "0.10.4"
|
|
time = "0.3.47"
|
|
|
|
# Job scheduler
|
|
job_scheduler_ng = "2.4.0"
|
|
|
|
# Data encoding library Hex/Base32/Base64
|
|
data-encoding = "2.11.0"
|
|
|
|
# JWT library
|
|
jsonwebtoken = { version = "10.4.0", default-features = false, features = ["rust_crypto", "use_pem"] }
|
|
|
|
# TOTP library
|
|
totp-lite = "2.0.1"
|
|
|
|
# Yubico Library
|
|
yubico = { package = "yubico_ng", version = "0.15.0", default-features = false, features = ["online-tokio"] }
|
|
|
|
# WebAuthn libraries
|
|
# danger-allow-state-serialisation is needed to save the state in the db
|
|
# danger-credential-internals is needed to support U2F to Webauthn migration
|
|
webauthn-rs = { version = "0.5.5", features = ["danger-allow-state-serialisation", "danger-credential-internals"] }
|
|
webauthn-rs-proto = "0.5.5"
|
|
webauthn-rs-core = "0.5.5"
|
|
|
|
# Handling of URL's for WebAuthn and favicons
|
|
url = "2.5.8"
|
|
|
|
# Email libraries
|
|
lettre = { version = "0.11.22", default-features = false, features = [
|
|
# Misc
|
|
"tracing",
|
|
"serde",
|
|
"builder",
|
|
"hostname",
|
|
# TLS/Security
|
|
"ring",
|
|
"rustls-native-certs",
|
|
"tokio1-rustls",
|
|
# Transport
|
|
"smtp-transport",
|
|
"sendmail-transport",
|
|
] }
|
|
percent-encoding = "2.3.2" # URL encoding library used for URL's in the emails
|
|
email_address = "0.2.9"
|
|
|
|
# HTML Template library
|
|
handlebars = { version = "6.4.0", features = ["dir_source"] }
|
|
|
|
# HTTP client (Used for favicons, version check, DUO and HIBP API)
|
|
reqwest = { version = "0.13.3", default-features = false, features = [
|
|
# Misc
|
|
"charset",
|
|
"cookies",
|
|
"http2",
|
|
"json",
|
|
"form",
|
|
"rustls-no-provider",
|
|
"stream",
|
|
# Compression
|
|
"brotli",
|
|
"deflate",
|
|
"gzip",
|
|
"zstd",
|
|
# Proxy
|
|
"socks",
|
|
"system-proxy",
|
|
] }
|
|
hickory-resolver = "0.26.1"
|
|
|
|
# Favicon extraction libraries
|
|
html5gum = "0.8.3"
|
|
regex = { version = "1.12.3", default-features = false, features = [
|
|
"perf",
|
|
"std",
|
|
"unicode-perl",
|
|
] }
|
|
data-url = "0.3.2"
|
|
bytes = "1.11.1"
|
|
svg-hush = "0.9.6"
|
|
|
|
# Cache function results (Used for version check and favicon fetching)
|
|
cached = { version = "0.59.0", features = ["async"] }
|
|
|
|
# Used for custom short lived cookie jar during favicon extraction
|
|
cookie = "0.18.1"
|
|
cookie_store = "0.22.1"
|
|
|
|
# Used by U2F, JWT and PostgreSQL
|
|
openssl = "0.10.79"
|
|
|
|
# CLI argument parsing
|
|
pico-args = "0.5.0"
|
|
|
|
# Macro ident concatenation
|
|
pastey = "0.2.2"
|
|
governor = "0.10.4"
|
|
|
|
# OIDC for SSO
|
|
openidconnect = { version = "4.0.1", default-features = false }
|
|
moka = { version = "0.12.15", features = ["future"] }
|
|
|
|
# Check client versions for specific features.
|
|
semver = "1.0.28"
|
|
|
|
# Allow overriding the default memory allocator
|
|
# Mainly used for the musl builds, since the default musl malloc is very slow
|
|
mimalloc = { version = "0.1.50", optional = true, default-features = false, features = ["secure"] }
|
|
|
|
which = "8.0.2"
|
|
|
|
# Argon2 library with support for the PHC format
|
|
argon2 = "0.5.3"
|
|
|
|
# Reading a password from the cli for generating the Argon2id ADMIN_TOKEN
|
|
rpassword = "7.5.2"
|
|
|
|
# Loading a dynamic CSS Stylesheet
|
|
grass_compiler = { version = "0.13.4", default-features = false }
|
|
|
|
# File are accessed through Apache OpenDAL
|
|
opendal = { version = "0.56.0", default-features = false, features = ["services-fs"] }
|
|
|
|
# For retrieving AWS credentials, including temporary SSO credentials
|
|
aws-config = { version = "1.8.16", optional = true, default-features = false, features = [
|
|
"behavior-version-latest",
|
|
"credentials-process",
|
|
"rt-tokio",
|
|
"sso",
|
|
] }
|
|
aws-credential-types = { version = "1.2.14", optional = true }
|
|
aws-smithy-runtime-api = { version = "1.12.0", optional = true }
|
|
http = { version = "1.4.0", optional = true }
|
|
reqsign-aws-v4 = { version = "3.0.0", optional = true }
|
|
reqsign-core = { version = "3.0.0", optional = true }
|
|
|
|
# Strip debuginfo from the release builds
|
|
# The debug symbols are to provide better panic traces
|
|
# Also enable fat LTO and use 1 codegen unit for optimizations
|
|
[profile.release]
|
|
strip = "debuginfo"
|
|
lto = "fat"
|
|
codegen-units = 1
|
|
debug = false
|
|
|
|
# Optimize for size
|
|
[profile.release-micro]
|
|
inherits = "release"
|
|
strip = "symbols"
|
|
opt-level = "z"
|
|
panic = "abort"
|
|
|
|
# Profile for systems with low resources
|
|
# It will use less resources during build
|
|
[profile.release-low]
|
|
inherits = "release"
|
|
strip = "symbols"
|
|
lto = "thin"
|
|
codegen-units = 16
|
|
|
|
# Used for profiling and debugging like valgrind or heaptrack
|
|
# Inherits release to be sure all optimizations have been done
|
|
[profile.dbg]
|
|
inherits = "release"
|
|
strip = "none"
|
|
split-debuginfo = "off"
|
|
debug = "full"
|
|
|
|
# A little bit of a speedup for generic building
|
|
[profile.dev]
|
|
split-debuginfo = "unpacked"
|
|
debug = "line-tables-only"
|
|
|
|
# Used for CI builds to improve compile time
|
|
[profile.ci]
|
|
inherits = "dev"
|
|
debug = false
|
|
debug-assertions = false
|
|
strip = "symbols"
|
|
panic = "abort"
|
|
|
|
# Always build argon2 using opt-level 3
|
|
# This is a huge speed improvement during testing
|
|
[profile.dev.package.argon2]
|
|
opt-level = 3
|
|
|
|
# Linting config
|
|
# https://doc.rust-lang.org/rustc/lints/groups.html
|
|
[workspace.lints.rust]
|
|
# Forbid
|
|
unsafe_code = "forbid"
|
|
non_ascii_idents = "forbid"
|
|
|
|
# Deny
|
|
warnings = "deny" # Explicitly deny all warnings since we deny all warnings in the end
|
|
|
|
# Deny lint groups
|
|
deprecated_safe = { level = "deny", priority = -1 }
|
|
future_incompatible = { level = "deny", priority = -1 }
|
|
keyword_idents = { level = "deny", priority = -1 }
|
|
let_underscore = { level = "deny", priority = -1 }
|
|
nonstandard_style = { level = "deny", priority = -1 }
|
|
refining_impl_trait = { level = "deny", priority = -1 }
|
|
rust_2018_idioms = { level = "deny", priority = -1 }
|
|
rust_2021_compatibility = { level = "deny", priority = -1 }
|
|
rust_2024_compatibility = { level = "deny", priority = -1 }
|
|
unused = { level = "deny", priority = -1 }
|
|
|
|
# Deny individual lints
|
|
closure_returning_async_block = "deny"
|
|
deprecated_in_future = "deny"
|
|
single_use_lifetimes = "deny"
|
|
trivial_casts = "deny"
|
|
trivial_numeric_casts = "deny"
|
|
unused_import_braces = "deny"
|
|
unused_lifetimes = "deny"
|
|
unused_qualifications = "deny"
|
|
variant_size_differences = "deny"
|
|
|
|
# https://rust-lang.github.io/rust-clippy/stable/index.html
|
|
[workspace.lints.clippy]
|
|
# Warn only so you can still use these during development, but not in the final code
|
|
dbg_macro = "warn"
|
|
todo = "warn"
|
|
|
|
# Ignore/Allow
|
|
result_large_err = "allow"
|
|
|
|
# Warn on these lint group (Some might be warn by default already though)
|
|
# Will be denied during CI!
|
|
complexity = { level = "warn", priority = -1 }
|
|
pedantic = { level = "warn", priority = -1 }
|
|
perf = { level = "warn", priority = -1 }
|
|
style = { level = "warn", priority = -1 }
|
|
suspicious = { level = "warn", priority = -1 }
|
|
|
|
# Deny individual lints
|
|
branches_sharing_code = "deny"
|
|
clone_on_ref_ptr = "deny"
|
|
equatable_if_let = "deny"
|
|
float_cmp_const = "deny"
|
|
iter_on_empty_collections = "deny"
|
|
iter_on_single_items = "deny"
|
|
mem_forget = "deny"
|
|
needless_collect = "deny"
|
|
redundant_clone = "deny"
|
|
unnecessary_self_imports = "deny"
|
|
useless_let_if_seq = "deny"
|
|
verbose_file_reads = "deny"
|
|
str_to_string = "deny"
|
|
|
|
# Pedantic Opt-Outs
|
|
inline_always = "allow" # We use this sparsely
|
|
struct_field_names = "allow" # Noisy and some items are Bitwarden controlled
|
|
large_futures = "allow" # Causes a fail in some Rocket macro's, since we experience no issues, allow it
|
|
too_many_lines = "allow" # For now, allow this, good to enable in the future and see if we can refactor
|
|
unnecessary_wraps = "allow" # Too much false positives because of Rocket integrations
|
|
# We do not use these doc items
|
|
doc_link_with_quotes = "allow"
|
|
doc_markdown = "allow"
|
|
missing_errors_doc = "allow"
|
|
missing_panics_doc = "allow"
|
|
|
|
[lints]
|
|
workspace = true
|
|
|