From 5262095beddbb77f4d08b9990338e083e841ef85 Mon Sep 17 00:00:00 2001 From: Paul Makles <paulmakles@gmail.com> Date: Sun, 26 Jan 2020 15:32:31 +0000 Subject: [PATCH] Finish guards, add channel info route. --- src/guards/channel.rs | 2 +- src/routes/channel.rs | 34 +++++++++++++++++++++++++++++++++- src/routes/mod.rs | 1 + 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/guards/channel.rs b/src/guards/channel.rs index 5681ee9..9142c17 100644 --- a/src/guards/channel.rs +++ b/src/guards/channel.rs @@ -30,7 +30,7 @@ impl<'r> FromParam<'r> for Channel { if let Some(channel) = result { Ok(Channel ( Ulid::from_string(channel.get_str("_id").unwrap()).unwrap(), - ChannelType::try_from(channel.get_i32("username").unwrap() as usize).unwrap(), + ChannelType::try_from(channel.get_i32("type").unwrap() as usize).unwrap(), channel )) } else { diff --git a/src/routes/channel.rs b/src/routes/channel.rs index c7c8f11..3517c09 100644 --- a/src/routes/channel.rs +++ b/src/routes/channel.rs @@ -1,4 +1,4 @@ -use crate::guards::auth::User; +use crate::guards::{ auth::User, channel::Channel }; use crate::database; use rocket_contrib::json::{ Json, JsonValue }; @@ -15,3 +15,35 @@ pub enum ChannelType { GROUP_DM = 1, GUILD_CHANNEL = 2, } + +fn has_permission(user: &User, target: &Channel) -> bool { + let id = user.0.to_string(); + match target.1 { + ChannelType::DM | + ChannelType::GROUP_DM => { + for user in target.2.get_array("recipients").expect("DB[recipients]") { + if user.as_str().expect("Expected string id.") == id { + return true; + } + } + + false + }, + ChannelType::GUILD_CHANNEL => + false + } +} + +/// fetch channel information +#[get("/<target>")] +pub fn channel(user: User, target: Channel) -> Option<JsonValue> { + if !has_permission(&user, &target) { + return None + } + + Some( + json!({ + "aa": "b" + } + )) +} diff --git a/src/routes/mod.rs b/src/routes/mod.rs index a7ea2ab..b189080 100644 --- a/src/routes/mod.rs +++ b/src/routes/mod.rs @@ -8,4 +8,5 @@ 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, user::user, user::lookup, user::dms, user::dm, user::get_friends, user::get_friend, user::add_friend, user::remove_friend ]) + .mount("/api/channels", routes![ channel::channel ]) } -- GitLab