mirror of
https://github.com/dani-garcia/vaultwarden.git
synced 2026-07-11 02:44:49 -06:00
* Update to Rust 2024 Edition Updated to the Rust 2024 Edition and added and fixed several lint checks. This is a large change which, because of the extra lints, added some possible fixes for issues. Signed-off-by: BlackDex <black.dex@gmail.com> * Reorder and merge imports Signed-off-by: BlackDex <black.dex@gmail.com> * Remove "db_run!" macro calls where possible Signed-off-by: BlackDex <black.dex@gmail.com> --------- Signed-off-by: BlackDex <black.dex@gmail.com>
38 lines
1.4 KiB
Rust
38 lines
1.4 KiB
Rust
use std::{net::IpAddr, num::NonZeroU32, sync::LazyLock, time::Duration};
|
|
|
|
use governor::{Quota, RateLimiter, clock::DefaultClock, state::keyed::DashMapStateStore};
|
|
|
|
use crate::{CONFIG, Error};
|
|
|
|
type Limiter<T = IpAddr> = RateLimiter<T, DashMapStateStore<T>, DefaultClock>;
|
|
|
|
static LIMITER_LOGIN: LazyLock<Limiter> = LazyLock::new(|| {
|
|
let seconds = Duration::from_secs(CONFIG.login_ratelimit_seconds());
|
|
let burst = NonZeroU32::new(CONFIG.login_ratelimit_max_burst()).expect("Non-zero login ratelimit burst");
|
|
RateLimiter::keyed(Quota::with_period(seconds).expect("Non-zero login ratelimit seconds").allow_burst(burst))
|
|
});
|
|
|
|
static LIMITER_ADMIN: LazyLock<Limiter> = LazyLock::new(|| {
|
|
let seconds = Duration::from_secs(CONFIG.admin_ratelimit_seconds());
|
|
let burst = NonZeroU32::new(CONFIG.admin_ratelimit_max_burst()).expect("Non-zero admin ratelimit burst");
|
|
RateLimiter::keyed(Quota::with_period(seconds).expect("Non-zero admin ratelimit seconds").allow_burst(burst))
|
|
});
|
|
|
|
pub fn check_limit_login(ip: &IpAddr) -> Result<(), Error> {
|
|
match LIMITER_LOGIN.check_key(ip) {
|
|
Ok(()) => Ok(()),
|
|
Err(_e) => {
|
|
err_code!("Too many login requests", 429);
|
|
}
|
|
}
|
|
}
|
|
|
|
pub fn check_limit_admin(ip: &IpAddr) -> Result<(), Error> {
|
|
match LIMITER_ADMIN.check_key(ip) {
|
|
Ok(()) => Ok(()),
|
|
Err(_e) => {
|
|
err_code!("Too many admin requests", 429);
|
|
}
|
|
}
|
|
}
|