diff --git a/migrations/mysql/2024-02-14-135828_change_time_stamp_data_type/down.sql b/migrations/mysql/2024-02-14-135828_change_time_stamp_data_type/down.sql new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/migrations/mysql/2024-02-14-135828_change_time_stamp_data_type/up.sql b/migrations/mysql/2024-02-14-135828_change_time_stamp_data_type/up.sql new file mode 100644 index 0000000000000000000000000000000000000000..f1bfe381b3d494e0e4881d08b5118ecc174def54 --- /dev/null +++ b/migrations/mysql/2024-02-14-135828_change_time_stamp_data_type/up.sql @@ -0,0 +1 @@ +ALTER TABLE twofactor MODIFY last_used BIGINT NOT NULL; diff --git a/migrations/postgresql/2024-02-14-135953_change_time_stamp_data_type/down.sql b/migrations/postgresql/2024-02-14-135953_change_time_stamp_data_type/down.sql new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/migrations/postgresql/2024-02-14-135953_change_time_stamp_data_type/up.sql b/migrations/postgresql/2024-02-14-135953_change_time_stamp_data_type/up.sql new file mode 100644 index 0000000000000000000000000000000000000000..efc6dc6e273ba281963de4e687ee09370065e9ec --- /dev/null +++ b/migrations/postgresql/2024-02-14-135953_change_time_stamp_data_type/up.sql @@ -0,0 +1,3 @@ +ALTER TABLE twofactor +ALTER COLUMN last_used TYPE BIGINT, +ALTER COLUMN last_used SET NOT NULL; diff --git a/migrations/sqlite/2024-02-14-140000_change_time_stamp_data_type/down.sql b/migrations/sqlite/2024-02-14-140000_change_time_stamp_data_type/down.sql new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/migrations/sqlite/2024-02-14-140000_change_time_stamp_data_type/up.sql b/migrations/sqlite/2024-02-14-140000_change_time_stamp_data_type/up.sql new file mode 100644 index 0000000000000000000000000000000000000000..187a614efd5f2525be33b27a29a5cde4a836241c --- /dev/null +++ b/migrations/sqlite/2024-02-14-140000_change_time_stamp_data_type/up.sql @@ -0,0 +1 @@ +-- Integer size in SQLite is already i64, so we don't need to do anything diff --git a/src/api/core/two_factor/authenticator.rs b/src/api/core/two_factor/authenticator.rs index 4d2d2781a4449fba0503c227ac4300a184976eac..c959e0d44ca670004384381278d08c49d943421a 100644 --- a/src/api/core/two_factor/authenticator.rs +++ b/src/api/core/two_factor/authenticator.rs @@ -157,7 +157,7 @@ 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); @@ -165,10 +165,10 @@ pub async fn validate_totp_code( // 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), diff --git a/src/db/models/two_factor.rs b/src/db/models/two_factor.rs index 93fb3385420225d5b47ae97aa235d8ec55613864..530e35b4eeb4ab391ad9a80aea9e14f402a74e80 100644 --- a/src/db/models/two_factor.rs +++ b/src/db/models/two_factor.rs @@ -12,7 +12,7 @@ db_object! { pub atype: i32, pub enabled: bool, pub data: String, - pub last_used: i32, + pub last_used: i64, } } diff --git a/src/db/schemas/mysql/schema.rs b/src/db/schemas/mysql/schema.rs index 737e13b326695a93ffa616e4f194300ec414f300..0fb286a4126b0d3d8858ef273c0fce308f657bc1 100644 --- a/src/db/schemas/mysql/schema.rs +++ b/src/db/schemas/mysql/schema.rs @@ -160,7 +160,7 @@ table! { atype -> Integer, enabled -> Bool, data -> Text, - last_used -> Integer, + last_used -> BigInt, } } diff --git a/src/db/schemas/postgresql/schema.rs b/src/db/schemas/postgresql/schema.rs index 4e946b4f9c7988bd6e0cef6ccb661115d09c5cd0..26bf4b68b426276a0e3f905902f26720472ed623 100644 --- a/src/db/schemas/postgresql/schema.rs +++ b/src/db/schemas/postgresql/schema.rs @@ -160,7 +160,7 @@ table! { atype -> Integer, enabled -> Bool, data -> Text, - last_used -> Integer, + last_used -> BigInt, } } diff --git a/src/db/schemas/sqlite/schema.rs b/src/db/schemas/sqlite/schema.rs index 4e946b4f9c7988bd6e0cef6ccb661115d09c5cd0..26bf4b68b426276a0e3f905902f26720472ed623 100644 --- a/src/db/schemas/sqlite/schema.rs +++ b/src/db/schemas/sqlite/schema.rs @@ -160,7 +160,7 @@ table! { atype -> Integer, enabled -> Bool, data -> Text, - last_used -> Integer, + last_used -> BigInt, } }