Browse Source
Merge pull request #125 from stammw/master
Make password hints available in the error message #85
pull/130/head
Daniel García
7 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with
30 additions and
0 deletions
-
.env
-
src/api/core/accounts.rs
-
src/api/core/mod.rs
-
src/main.rs
|
|
@ -27,6 +27,9 @@ |
|
|
|
## The change only applies when the password is changed |
|
|
|
# PASSWORD_ITERATIONS=100000 |
|
|
|
|
|
|
|
## Whether password hint should be sent into the error response when the client request it |
|
|
|
# SHOW_PASSWORD_HINT=true |
|
|
|
|
|
|
|
## Domain settings |
|
|
|
## The domain must match the address from where you access the server |
|
|
|
## Unless you are using U2F, or having problems with attachments not downloading, there is no need to change this |
|
|
|
|
|
@ -247,3 +247,26 @@ fn revision_date(headers: Headers) -> String { |
|
|
|
let revision_date = headers.user.updated_at.timestamp(); |
|
|
|
revision_date.to_string() |
|
|
|
} |
|
|
|
|
|
|
|
#[derive(Deserialize)] |
|
|
|
#[allow(non_snake_case)] |
|
|
|
struct PasswordHintData { |
|
|
|
Email: String, |
|
|
|
} |
|
|
|
|
|
|
|
#[post("/accounts/password-hint", data = "<data>")] |
|
|
|
fn password_hint(data: JsonUpcase<PasswordHintData>, conn: DbConn) -> EmptyResult { |
|
|
|
let data: PasswordHintData = data.into_inner().data; |
|
|
|
|
|
|
|
if !CONFIG.show_password_hint { |
|
|
|
return Ok(()) |
|
|
|
} |
|
|
|
|
|
|
|
match User::find_by_mail(&data.Email, &conn) { |
|
|
|
Some(user) => { |
|
|
|
let hint = user.password_hint.to_owned().unwrap_or_default(); |
|
|
|
err!(format!("Your password hint is: {}", hint)) |
|
|
|
}, |
|
|
|
None => Ok(()), |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
@ -23,6 +23,7 @@ pub fn routes() -> Vec<Route> { |
|
|
|
post_email, |
|
|
|
delete_account, |
|
|
|
revision_date, |
|
|
|
password_hint, |
|
|
|
|
|
|
|
sync, |
|
|
|
|
|
|
|
|
|
@ -169,6 +169,7 @@ pub struct Config { |
|
|
|
local_icon_extractor: bool, |
|
|
|
signups_allowed: bool, |
|
|
|
password_iterations: i32, |
|
|
|
show_password_hint: bool, |
|
|
|
domain: String, |
|
|
|
domain_set: bool, |
|
|
|
} |
|
|
@ -197,6 +198,8 @@ impl Config { |
|
|
|
local_icon_extractor: util::parse_option_string(env::var("LOCAL_ICON_EXTRACTOR").ok()).unwrap_or(false), |
|
|
|
signups_allowed: util::parse_option_string(env::var("SIGNUPS_ALLOWED").ok()).unwrap_or(true), |
|
|
|
password_iterations: util::parse_option_string(env::var("PASSWORD_ITERATIONS").ok()).unwrap_or(100_000), |
|
|
|
show_password_hint: util::parse_option_string(env::var("SHOW_PASSWORD_HINT").ok()).unwrap_or(true), |
|
|
|
|
|
|
|
domain_set: domain.is_ok(), |
|
|
|
domain: domain.unwrap_or("http://localhost".into()), |
|
|
|
} |
|
|
|