1
0
Fork 0

Use ring to generate email token

Dieser Commit ist enthalten in:
vpl 2019-08-06 22:37:23 +02:00
Ursprung 6d460b44b0
Commit 5609103a97
3 geänderte Dateien mit 16 neuen und 12 gelöschten Zeilen

1
Cargo.lock generiert
Datei anzeigen

@ -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)",

Datei anzeigen

@ -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' }

Datei anzeigen

@ -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);
}
} }