geforkt von mirrored/vaultwarden
Use ring to generate email token
Dieser Commit ist enthalten in:
Ursprung
6d460b44b0
Commit
5609103a97
3 geänderte Dateien mit 16 neuen und 12 gelöschten Zeilen
1
Cargo.lock
generiert
1
Cargo.lock
generiert
|
@ -118,7 +118,6 @@ dependencies = [
|
||||||
"oath 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"oath 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"percent-encoding 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"percent-encoding 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"quoted_printable 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"quoted_printable 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"rand 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"regex 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"regex 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"reqwest 0.9.19 (registry+https://github.com/rust-lang/crates.io-index)",
|
"reqwest 0.9.19 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"ring 0.14.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
"ring 0.14.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
|
|
@ -108,9 +108,6 @@ regex = "1.2.0"
|
||||||
# URL encoding library
|
# URL encoding library
|
||||||
percent-encoding = "2.0.0"
|
percent-encoding = "2.0.0"
|
||||||
|
|
||||||
# Random
|
|
||||||
rand = "0.7.0"
|
|
||||||
|
|
||||||
[patch.crates-io]
|
[patch.crates-io]
|
||||||
# Add support for Timestamp type
|
# Add support for Timestamp type
|
||||||
rmp = { git = 'https://github.com/dani-garcia/msgpack-rust' }
|
rmp = { git = 'https://github.com/dani-garcia/msgpack-rust' }
|
||||||
|
|
|
@ -10,12 +10,14 @@ use crate::db::{
|
||||||
};
|
};
|
||||||
use crate::error::Error;
|
use crate::error::Error;
|
||||||
use crate::mail;
|
use crate::mail;
|
||||||
|
use crate::crypto;
|
||||||
|
|
||||||
use chrono::{Duration, NaiveDateTime, Utc};
|
use chrono::{Duration, NaiveDateTime, Utc};
|
||||||
use rand::Rng;
|
|
||||||
use std::char;
|
use std::char;
|
||||||
use std::ops::Add;
|
use std::ops::Add;
|
||||||
|
|
||||||
const MAX_TIME_DIFFERENCE: i64 = 600;
|
const MAX_TIME_DIFFERENCE: i64 = 600;
|
||||||
|
const TOKEN_LEN: usize = 6;
|
||||||
|
|
||||||
pub fn routes() -> Vec<Route> {
|
pub fn routes() -> Vec<Route> {
|
||||||
routes![
|
routes![
|
||||||
|
@ -97,13 +99,12 @@ struct SendEmailData {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn generate_token() -> String {
|
fn generate_token() -> String {
|
||||||
const TOKEN_LEN: usize = 6;
|
crypto::get_random(vec![0; TOKEN_LEN])
|
||||||
let mut rng = rand::thread_rng();
|
.iter()
|
||||||
|
.map(|byte| { (byte % 10)})
|
||||||
(0..TOKEN_LEN)
|
.map(|num| {
|
||||||
.map(|_| {
|
dbg!(num);
|
||||||
let num = rng.gen_range(0, 9);
|
char::from_digit(num as u32, 10).unwrap()
|
||||||
char::from_digit(num, 10).unwrap()
|
|
||||||
})
|
})
|
||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
|
@ -291,4 +292,11 @@ mod tests {
|
||||||
// If it's smaller than 3 characters it should only show asterisks.
|
// If it's smaller than 3 characters it should only show asterisks.
|
||||||
assert_eq!(result, "***@example.ext");
|
assert_eq!(result, "***@example.ext");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_token() {
|
||||||
|
let result = generate_token();
|
||||||
|
|
||||||
|
assert_eq!(result.chars().count(), 6);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Laden …
In neuem Issue referenzieren