Skip to content

Commit

Permalink
Change timestamp data type. (dani-garcia#4355)
Browse files Browse the repository at this point in the history
Co-authored-by: Daniel García <[email protected]>
  • Loading branch information
2 people authored and ZhReimu committed Jul 9, 2024
1 parent ae8728c commit a91efbf
Show file tree
Hide file tree
Showing 11 changed files with 12 additions and 7 deletions.
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ALTER TABLE twofactor MODIFY last_used BIGINT NOT NULL;
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
ALTER TABLE twofactor
ALTER COLUMN last_used TYPE BIGINT,
ALTER COLUMN last_used SET NOT NULL;
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
-- Integer size in SQLite is already i64, so we don't need to do anything
6 changes: 3 additions & 3 deletions src/api/core/two_factor/authenticator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -157,18 +157,18 @@ pub async fn validate_totp_code(
let generated = totp_custom::<Sha1>(30, 6, &decoded_secret, time);

// Check the given code equals the generated and if the time_step is larger then the one last used.
if generated == totp_code && time_step > i64::from(twofactor.last_used) {
if generated == totp_code && time_step > twofactor.last_used {
// If the step does not equals 0 the time is drifted either server or client side.
if step != 0 {
warn!("TOTP Time drift detected. The step offset is {}", step);
}

// Save the last used time step so only totp time steps higher then this one are allowed.
// This will also save a newly created twofactor if the code is correct.
twofactor.last_used = time_step as i32;
twofactor.last_used = time_step;
twofactor.save(conn).await?;
return Ok(());
} else if generated == totp_code && time_step <= i64::from(twofactor.last_used) {
} else if generated == totp_code && time_step <= twofactor.last_used {
warn!("This TOTP or a TOTP code within {} steps back or forward has already been used!", steps);
err!(
format!("Invalid TOTP code! Server time: {} IP: {}", current_time.format("%F %T UTC"), ip.ip),
Expand Down
2 changes: 1 addition & 1 deletion src/db/models/two_factor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ db_object! {
pub atype: i32,
pub enabled: bool,
pub data: String,
pub last_used: i32,
pub last_used: i64,
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/db/schemas/mysql/schema.rs
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ table! {
atype -> Integer,
enabled -> Bool,
data -> Text,
last_used -> Integer,
last_used -> BigInt,
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/db/schemas/postgresql/schema.rs
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ table! {
atype -> Integer,
enabled -> Bool,
data -> Text,
last_used -> Integer,
last_used -> BigInt,
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/db/schemas/sqlite/schema.rs
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ table! {
atype -> Integer,
enabled -> Bool,
data -> Text,
last_used -> Integer,
last_used -> BigInt,
}
}

Expand Down

0 comments on commit a91efbf

Please sign in to comment.