From 7f0baa2a899ba87c726843740bed1b9d2fbae840 Mon Sep 17 00:00:00 2001 From: Paul Makles <paulmakles@gmail.com> Date: Sun, 26 Jan 2020 11:53:33 +0000 Subject: [PATCH] Add user lookup. --- src/routes/account.rs | 1 - src/routes/mod.rs | 2 +- src/routes/user.rs | 35 +++++++++++++++++++++++++++++++++-- 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/routes/account.rs b/src/routes/account.rs index 8f9147a..17e556c 100644 --- a/src/routes/account.rs +++ b/src/routes/account.rs @@ -1,4 +1,3 @@ -use crate::auth::User; use crate::database; use crate::email; diff --git a/src/routes/mod.rs b/src/routes/mod.rs index 8b2aeb5..3ad8b1b 100644 --- a/src/routes/mod.rs +++ b/src/routes/mod.rs @@ -6,5 +6,5 @@ mod user; pub fn mount(rocket: Rocket) -> Rocket { rocket .mount("/api/account", routes![ account::create, account::verify_email, account::resend_email, account::login ]) - .mount("/api/users", routes![ user::me ]) + .mount("/api/users", routes![ user::me, user::lookup ]) } diff --git a/src/routes/user.rs b/src/routes/user.rs index 7515ea2..a265b0b 100644 --- a/src/routes/user.rs +++ b/src/routes/user.rs @@ -1,7 +1,10 @@ use crate::auth::User; +use crate::database; -use rocket_contrib::json::{ JsonValue }; -use bson::{ doc }; +use rocket_contrib::json::{ Json, JsonValue }; +use serde::{ Serialize, Deserialize }; +use mongodb::options::FindOptions; +use bson::{ bson, doc }; #[get("/@me")] pub fn me(user: User) -> JsonValue { @@ -16,3 +19,31 @@ pub fn me(user: User) -> JsonValue { "created_timestamp": id.datetime().timestamp(), }) } + +#[derive(Serialize, Deserialize)] +pub struct Query { + username: String, +} + +#[post("/lookup", data = "<query>")] +pub fn lookup(_user: User, query: Json<Query>) -> JsonValue { + let col = database::get_db().collection("users"); + + let users = col.find( + doc! { "username": query.username.clone() }, + FindOptions::builder().limit(10).build() + ).expect("Failed user lookup"); + + let mut results = Vec::new(); + for user in users { + let u = user.expect("Failed to unwrap user."); + results.push( + json!({ + "id": u.get_str("_id").expect("DB[id]"), + "username": u.get_str("username").expect("DB[username]") + }) + ); + } + + json!(results) +} -- GitLab