mirror of
				https://github.com/dani-garcia/vaultwarden.git
				synced 2025-10-31 10:18:19 +02:00 
			
		
		
		
	Increase length limit for email token generation
The current limit of 19 is an artifact of the implementation, which can be easily rewritten in terms of a more general string generation function. The new limit is 255 (max value of a `u8`); using a larger type would probably be overkill.
This commit is contained in:
		| @@ -381,7 +381,7 @@ fn post_email_token(data: JsonUpcase<EmailTokenData>, headers: Headers, conn: Db | ||||
|         err!("Email domain not allowed"); | ||||
|     } | ||||
|  | ||||
|     let token = crypto::generate_token(6)?; | ||||
|     let token = crypto::generate_email_token(6); | ||||
|  | ||||
|     if CONFIG.mail_enabled() { | ||||
|         if let Err(e) = mail::send_change_email(&data.NewEmail, &token) { | ||||
|   | ||||
| @@ -58,7 +58,7 @@ pub fn send_token(user_uuid: &str, conn: &DbConn) -> EmptyResult { | ||||
|     let type_ = TwoFactorType::Email as i32; | ||||
|     let mut twofactor = TwoFactor::find_by_user_and_type(user_uuid, type_, conn).map_res("Two factor not found")?; | ||||
|  | ||||
|     let generated_token = crypto::generate_token(CONFIG.email_token_size())?; | ||||
|     let generated_token = crypto::generate_email_token(CONFIG.email_token_size()); | ||||
|  | ||||
|     let mut twofactor_data = EmailTokenData::from_json(&twofactor.data)?; | ||||
|     twofactor_data.set_token(generated_token); | ||||
| @@ -123,7 +123,7 @@ fn send_email(data: JsonUpcase<SendEmailData>, headers: Headers, conn: DbConn) - | ||||
|         tf.delete(&conn)?; | ||||
|     } | ||||
|  | ||||
|     let generated_token = crypto::generate_token(CONFIG.email_token_size())?; | ||||
|     let generated_token = crypto::generate_email_token(CONFIG.email_token_size()); | ||||
|     let twofactor_data = EmailTokenData::new(data.Email, generated_token); | ||||
|  | ||||
|     // Uses EmailVerificationChallenge as type to show that it's not verified yet. | ||||
| @@ -309,18 +309,4 @@ mod tests { | ||||
|         // If it's smaller than 3 characters it should only show asterisks. | ||||
|         assert_eq!(result, "***@example.ext"); | ||||
|     } | ||||
|  | ||||
|     #[test] | ||||
|     fn test_token() { | ||||
|         let result = crypto::generate_token(19).unwrap(); | ||||
|  | ||||
|         assert_eq!(result.chars().count(), 19); | ||||
|     } | ||||
|  | ||||
|     #[test] | ||||
|     fn test_token_too_large() { | ||||
|         let result = crypto::generate_token(20); | ||||
|  | ||||
|         assert!(result.is_err(), "too large token should give an error"); | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user