Compare commits

..

3 Commits

Author SHA1 Message Date
Paul Makles
196a856c68 refactor: move and update fixme / todo comments 2023-10-28 14:53:39 +01:00
Paul Makles
9bf60e87e9 fix: validate masquerade on new message models 2023-10-28 14:53:28 +01:00
Paul Makles
b90e7a4412 fix: prevent potential double fetching of cached server 2023-10-28 14:53:12 +01:00
16 changed files with 39 additions and 27 deletions

View File

@@ -243,8 +243,7 @@ impl EventV1 {
pub async fn p_user(self, id: String, db: &Database) {
self.clone().p(id.clone()).await;
// ! FIXME: this should be captured by member list in the future
// ! and not immediately fanned out to users
// TODO: this should be captured by member list in the future and not immediately fanned out to users
if let Ok(members) = db.fetch_all_memberships(&id).await {
for member in members {
self.clone().p(member.id.server).await;

View File

@@ -60,7 +60,7 @@ impl AbstractMessages for ReferenceDb {
.cloned()
.collect();
// TODO: sorting, etc (will be required for tests)
// FIXME: sorting, etc (will be required for tests)
Ok(matched_messages)

View File

@@ -23,7 +23,7 @@ auto_derived_partial!(
pub description: Option<String>,
/// Channels within this server
// ! FIXME: this may be redundant
// TODO: investigate if this is redundant and can be removed
pub channels: Vec<String>,
/// Categories for this server
#[serde(skip_serializing_if = "Option::is_none")]

View File

@@ -132,7 +132,7 @@ pub async fn generate(
return Err(create_error!(LabelMe));
}
// ! FIXME: batch request to january
// TODO: batch request to january
let mut tasks = Vec::new();
for link in links {

View File

@@ -344,7 +344,23 @@ impl PermissionQuery for DatabasePermissionQuery<'_> {
| Cow::Owned(Channel::TextChannel { server, .. })
| Cow::Borrowed(Channel::VoiceChannel { server, .. })
| Cow::Owned(Channel::VoiceChannel { server, .. }) => {
// FIXME: may double fetch
if let Some(known_server) =
// I'm not sure why I can't just pattern match both at once here?
// It throws some weird error and the provided fix doesn't work :/
if let Some(Cow::Borrowed(known_server)) = self.server {
Some(known_server)
} else if let Some(Cow::Owned(ref known_server)) = self.server {
Some(known_server)
} else {
None
}
{
if server == &known_server.id {
// Already cached, return early.
return;
}
}
if let Ok(server) = self.database.fetch_server(server).await {
self.server.replace(Cow::Owned(server));
}

View File

@@ -98,17 +98,19 @@ auto_derived!(
/// Name and / or avatar override information
#[cfg_attr(feature = "validator", derive(Validate))]
pub struct Masquerade {
// FIXME: missing validation
/// Replace the display name shown on this message
#[serde(skip_serializing_if = "Option::is_none")]
#[validate(length(min = 1, max = 32))]
pub name: Option<String>,
/// Replace the avatar shown on this message (URL to image file)
#[serde(skip_serializing_if = "Option::is_none")]
#[validate(length(min = 1, max = 256))]
pub avatar: Option<String>,
/// Replace the display role colour shown on this message
///
/// Must have `ManageRole` permission to use
#[serde(skip_serializing_if = "Option::is_none")]
#[validate(length(min = 1, max = 128), regex = "RE_COLOUR")]
pub colour: Option<String>,
}

View File

@@ -22,7 +22,7 @@ auto_derived_partial!(
pub description: Option<String>,
/// Channels within this server
// ! FIXME: this may be redundant
// TODO: investigate if this is redundant and can be removed
pub channels: Vec<String>,
/// Categories for this server
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]

View File

@@ -37,6 +37,12 @@ pub async fn calculate_user_permissions<P: PermissionQuery>(query: &mut P) -> Pe
} else {
permissions.into()
}
// TODO: add boolean switch for permission for users to globally message a user
// maybe an enum?
// PrivacyLevel { Private, Friends, Mutual, Public, Global }
// TODO: add boolean switch for permission for users to mutually DM a user
}
/// Calculate permissions against a server

View File

@@ -31,8 +31,7 @@ pub async fn req(
match &channel {
Channel::Group { .. } => {
// FIXME: use permissions here?
// interesting if users could block new group invites
// TODO: use permissions here? interesting if users could block new group invites
let member = member_id.as_user(db).await?;
if !user.is_friends_with(&member.id) {
return Err(create_error!(NotFriends));

View File

@@ -148,7 +148,7 @@ mod test {
.await;
dbg!(response.into_string().await);
// TODO: finish impl
// FIXME: finish impl
// assert_eq!(response.status(), Status::NotFound);
}
@@ -185,6 +185,6 @@ mod test {
.dispatch()
.await;
// TODO: impl assert_eq!(response.status(), Status::Forbidden);
// FIXME: impl assert_eq!(response.status(), Status::Forbidden);
}
}

View File

@@ -568,8 +568,7 @@ impl EventV1 {
pub async fn p_user(self, id: String, db: &Database) {
self.clone().p(id.clone()).await;
// ! FIXME: this should be captured by member list in the future
// ! and not immediately fanned out to users
// TODO: this should be captured by member list in the future and not immediately fanned out to users
if let Ok(members) = db.fetch_all_memberships(&id).await {
for member in members {
self.clone().p(member.id.server).await;

View File

@@ -170,7 +170,8 @@ impl User {
/// Check if this user can acquire another server
pub async fn can_acquire_server(&self, db: &Database) -> Result<bool> {
// ! FIXME: hardcoded max server count
// hardcoded max server count
// NB. fixed in new crate
Ok(db.fetch_server_count(&self.id).await? <= 100)
}

View File

@@ -93,7 +93,6 @@ pub struct Server {
pub description: Option<String>,
/// Channels within this server
// ! FIXME: this may be redundant
pub channels: Vec<String>,
/// Categories for this server
#[serde(skip_serializing_if = "Option::is_none")]

View File

@@ -78,12 +78,6 @@ async fn calculate_permission(data: &mut PermissionCalculator<'_>, db: &crate::D
_ => {}
}
// ! FIXME: add boolean switch for permission for users to globally message a user
// maybe an enum?
// PrivacyLevel { Private, Friends, Mutual, Public, Global }
// ! FIXME: add boolean switch for permission for users to mutually DM a user
if data.flag_has_mutual_connection
|| data
.perspective

View File

@@ -43,7 +43,7 @@ pub trait AbstractChannel: Sync + Send {
async fn remove_user_from_group(&self, channel: &str, user: &str) -> Result<()>;
/// Set role permission for a channel
/// ! FIXME: may want to refactor to just use normal updates
/// TODO: may want to refactor to just use normal updates
async fn set_channel_role_permission(
&self,
channel: &str,

View File

@@ -2,10 +2,10 @@ use async_lock::Semaphore;
use async_std::task::spawn;
use futures::future::join_all;
use linkify::{LinkFinder, LinkKind};
use once_cell::sync::Lazy;
use regex::Regex;
use serde::{Deserialize, Serialize};
use std::{collections::HashSet, sync::Arc};
use once_cell::sync::Lazy;
use crate::{models::attachment::File, Error, Result};
@@ -187,8 +187,6 @@ impl Embed {
max_embeds: usize,
semaphore: Arc<Semaphore>,
) -> Result<Vec<Embed>> {
// Ignore code blocks.
let content = RE_CODE.replace_all(&content, "");
@@ -233,7 +231,6 @@ impl Embed {
return Err(Error::LabelMe);
}
// ! FIXME: batch request to january?
let client = reqwest::Client::new();
let mut tasks = Vec::new();