forked from jmug/stoatchat
Include DM users in payload; fix permission query. + cargo fmt
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
10
src/main.rs
10
src/main.rs
@@ -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() {
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)))
|
||||
}
|
||||
|
||||
@@ -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))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user