Skip to content

Commit

Permalink
Implemented basic support for prelogin and notification negotiation
Browse files Browse the repository at this point in the history
  • Loading branch information
dani-garcia committed Aug 24, 2018
1 parent c91f80c commit 8d1ee85
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 0 deletions.
28 changes: 28 additions & 0 deletions src/api/core/accounts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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"),
}
}

1 change: 1 addition & 0 deletions src/api/core/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ pub fn routes() -> Vec<Route> {
delete_account,
revision_date,
password_hint,
prelogin,

sync,

Expand Down
2 changes: 2 additions & 0 deletions src/api/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@ pub(crate) mod core;
mod icons;
mod identity;
mod web;
mod notifications;

pub use self::core::routes as core_routes;
pub use self::icons::routes as icons_routes;
pub use self::identity::routes as identity_routes;
pub use self::web::routes as web_routes;
pub use self::notifications::routes as notifications_routes;

use rocket::response::status::BadRequest;
use rocket_contrib::Json;
Expand Down
31 changes: 31 additions & 0 deletions src/api/notifications.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
use rocket::Route;
use rocket_contrib::Json;

use db::DbConn;
use api::JsonResult;
use auth::Headers;

pub fn routes() -> Vec<Route> {
routes![negotiate]
}

#[post("/hub/negotiate")]
fn negotiate(_headers: Headers, _conn: DbConn) -> JsonResult {
use data_encoding::BASE64URL;
use crypto;

// Store this in db?
let conn_id = BASE64URL.encode(&crypto::get_random(vec![0u8; 16]));

// TODO: Implement transports
// Rocket WS support: https://github.com/SergioBenitez/Rocket/issues/90
// Rocket SSE support: https://github.com/SergioBenitez/Rocket/issues/33
Ok(Json(json!({
"connectionId": conn_id,
"availableTransports":[
// {"transport":"WebSockets", "transferFormats":["Text","Binary"]},
// {"transport":"ServerSentEvents", "transferFormats":["Text"]},
// {"transport":"LongPolling", "transferFormats":["Text","Binary"]}
]
})))
}
1 change: 1 addition & 0 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ fn init_rocket() -> Rocket {
.mount("/api", api::core_routes())
.mount("/identity", api::identity_routes())
.mount("/icons", api::icons_routes())
.mount("/notifications", api::notifications_routes())
.manage(db::init_pool())
}

Expand Down

0 comments on commit 8d1ee85

Please sign in to comment.