Implemented basic support for prelogin and notification negotiation

This commit is contained in:
Daniel García
2018-08-24 19:02:34 +02:00
parent c91f80c456
commit 8d1ee859f2
5 changed files with 63 additions and 0 deletions

View File

@ -275,3 +275,31 @@ fn password_hint(data: JsonUpcase<PasswordHintData>, conn: DbConn) -> EmptyResul
None => Ok(()),
}
}
#[derive(Deserialize)]
#[allow(non_snake_case)]
struct PreloginData {
Email: String,
}
#[post("/accounts/prelogin", data = "<data>")]
fn prelogin(data: JsonUpcase<PreloginData>, conn: DbConn) -> JsonResult {
let data: PreloginData = data.into_inner().data;
match User::find_by_mail(&data.Email, &conn) {
Some(user) => {
let kdf_type = 0; // PBKDF2: 0
let _server_iter = user.password_iterations;
let client_iter = 5000; // TODO: Make iterations user configurable
Ok(Json(json!({
"Kdf": kdf_type,
"KdfIterations": client_iter
})))
},
None => err!("Invalid user"),
}
}

View File

@ -25,6 +25,7 @@ pub fn routes() -> Vec<Route> {
delete_account,
revision_date,
password_hint,
prelogin,
sync,