Include DM users in payload; fix permission query. + cargo fmt

This commit is contained in:
Paul Makles
2021-02-09 16:41:08 +00:00
parent 4c99d079e0
commit b0d07ec58f
6 changed files with 37 additions and 80 deletions

View File

@@ -25,46 +25,6 @@ bitfield! {
impl_op_ex!(+ |a: &ChannelPermission, b: &ChannelPermission| -> u32 { *a as u32 | *b as u32 });
impl_op_ex_commutative!(+ |a: &u32, b: &ChannelPermission| -> u32 { *a | *b as u32 });
/*pub async fn calculate(user: &User, target: &Channel) -> Result<u32> {
match target {
Channel::SavedMessages { user: owner, .. } => {
if &user.id == owner {
Ok(ChannelPermission::View
+ ChannelPermission::SendMessage
+ ChannelPermission::ManageMessages)
} else {
Ok(0)
}
}
Channel::DirectMessage { recipients, .. } => {
if recipients.iter().find(|x| *x == &user.id).is_some() {
if let Some(recipient) = recipients.iter().find(|x| *x != &user.id) {
let perms = super::user::get(&user, recipient).await?;
if perms.get_send_message() {
return Ok(ChannelPermission::View + ChannelPermission::SendMessage);
}
return Ok(ChannelPermission::View as u32);
}
}
Ok(0)
}
Channel::Group { recipients, .. } => {
if recipients.iter().find(|x| *x == &user.id).is_some() {
Ok(ChannelPermission::View + ChannelPermission::SendMessage)
} else {
Ok(0)
}
}
}
}
pub async fn get(user: &User, target: &Channel) -> Result<ChannelPermissions<[u32; 1]>> {
Ok(ChannelPermissions([calculate(&user, &target).await?]))
}*/
impl<'a> PermissionCalculator<'a> {
pub async fn calculate_channel(self) -> Result<u32> {
let channel = if let Some(channel) = self.channel {

View File

@@ -72,10 +72,10 @@ impl<'a> PermissionCalculator<'a> {
{ "type": "Group" },
{ "type": "DirectMessage" },
],
"$and": {
"recipients": &self.perspective.id,
"recipients": target
}
"$and": [
{ "recipients": &self.perspective.id },
{ "recipients": target }
]
},
None,
)

View File

@@ -18,14 +18,16 @@ pub mod notifications;
pub mod routes;
pub mod util;
use log::info;
use futures::join;
use chrono::Duration;
use futures::join;
use log::info;
use rauth::auth::Auth;
use rauth::options::{EmailVerification, Options, SMTP};
use rocket_cors::AllowedOrigins;
use rocket_prometheus::PrometheusMetrics;
use rauth::options::{EmailVerification, Options, SMTP};
use util::variables::{PUBLIC_URL, SMTP_FROM, SMTP_HOST, SMTP_PASSWORD, SMTP_USERNAME, USE_EMAIL, USE_PROMETHEUS};
use util::variables::{
PUBLIC_URL, SMTP_FROM, SMTP_HOST, SMTP_PASSWORD, SMTP_USERNAME, USE_EMAIL, USE_PROMETHEUS,
};
#[async_std::main]
async fn main() {

View File

@@ -59,6 +59,8 @@ pub async fn generate_ready(mut user: User) -> Result<ClientboundNotification> {
if let Channel::Group { recipients, .. } = &channel {
user_ids.extend(recipients.iter().cloned());
} else if let Channel::DirectMessage { recipients, .. } = &channel {
user_ids.extend(recipients.iter().cloned());
}
channels.push(channel);
@@ -97,11 +99,7 @@ pub async fn generate_ready(mut user: User) -> Result<ClientboundNotification> {
.for_user_given()
.await?;
users.push(
other
.from(&user)
.with(permissions)
);
users.push(other.from(&user).with(permissions));
}
}
}

View File

@@ -16,9 +16,5 @@ pub async fn req(user: User, target: Ref) -> Result<JsonValue> {
Err(Error::LabelMe)?
}
Ok(json!(
target
.from(&user)
.with(perm)
))
Ok(json!(target.from(&user).with(perm)))
}

View File

@@ -1,12 +1,12 @@
use md5;
use mongodb::bson::doc;
use mongodb::options::FindOneOptions;
use rocket::response::Redirect;
use mongodb::bson::doc;
use urlencoding;
use md5;
use crate::database::*;
use crate::util::result::{Error, Result};
use crate::util::variables::PUBLIC_URL;
use crate::database::*;
#[get("/<target>/avatar")]
pub async fn req(target: Ref) -> Result<Redirect> {
@@ -17,32 +17,33 @@ pub async fn req(target: Ref) -> Result<Redirect> {
},
FindOneOptions::builder()
.projection(doc! { "email": 1 })
.build()
.build(),
)
.await
.map_err(|_| Error::DatabaseError { operation: "find_one", with: "user" })?
.map_err(|_| Error::DatabaseError {
operation: "find_one",
with: "user",
})?
.ok_or_else(|| Error::UnknownUser)?;
let email = doc
.get_str("email")
.map_err(|_| Error::DatabaseError { operation: "get_str(email)", with: "user" })?
.map_err(|_| Error::DatabaseError {
operation: "get_str(email)",
with: "user",
})?
.to_lowercase();
let url = format!(
"https://www.gravatar.com/avatar/{:x}?s=128&d={}",
md5::compute(email),
urlencoding::encode(
&format!(
"{}/users/{}/default_avatar",
*PUBLIC_URL,
&target.id
)
)
);
let url = format!(
"https://www.gravatar.com/avatar/{:x}?s=128&d={}",
md5::compute(email),
urlencoding::encode(&format!(
"{}/users/{}/default_avatar",
*PUBLIC_URL, &target.id
))
);
dbg!(&url);
dbg!(&url);
Ok(
Redirect::to(url)
)
Ok(Redirect::to(url))
}