1
0
Fork 0
mirror of https://github.com/dani-garcia/vaultwarden.git synced 2025-05-25 13:03:57 +00:00

Fixed issue/request #705

Added a config option to disable time drifted totp codes.
Default is false, since this is what the RFC recommends.
This commit is contained in:
BlackDex 2019-11-07 17:11:29 +01:00
parent 9ff577a7b4
commit 3f6809bcdf
3 changed files with 22 additions and 2 deletions

View file

@ -11,6 +11,8 @@ use crate::db::{
DbConn,
};
pub use crate::config::CONFIG;
pub fn routes() -> Vec<Route> {
routes![
generate_authenticator,
@ -118,9 +120,11 @@ pub fn validate_totp_code(user_uuid: &str, totp_code: u64, secret: &str, conn: &
.expect("Earlier than 1970-01-01 00:00:00 UTC").as_secs();
// The amount of steps back and forward in time
let steps = 1;
for step in -steps..=steps {
// Also check if we need to disable time drifted TOTP codes.
// If that is the case, we set the steps to 0 so only the current TOTP is valid.
let steps = if CONFIG.authenticator_disable_time_drift() { 0 } else { 1 };
for step in -steps..=steps {
let time_step = (current_time / 30) as i32 + step;
// We need to calculate the time offsite and cast it as an i128.
// Else we can't do math with it on a default u64 variable.

View file

@ -275,6 +275,10 @@ make_config! {
/// Note that the checkbox would still be present, but ignored.
disable_2fa_remember: bool, true, def, false;
/// Disable authenticator time drifted codes to be valid |> Enabling this only allows the current TOTP code to be valid
/// TOTP codes of the previous and next 30 seconds will be invalid.
authenticator_disable_time_drift: bool, true, def, false;
/// Require new device emails |> When a user logs in an email is required to be sent.
/// If sending the email fails the login attempt will fail.
require_device_email: bool, true, def, false;