mirror of
https://github.com/stoatchat/stoatchat.git
synced 2026-07-14 13:36:59 +00:00
Remove ChannelRef, use the full Channel object.
This commit is contained in:
@@ -1,8 +1,8 @@
|
|||||||
use super::get_collection;
|
use super::get_collection;
|
||||||
use crate::guards::channel::ChannelRef;
|
|
||||||
use crate::notifications;
|
use crate::notifications;
|
||||||
use crate::notifications::events::message::Create;
|
use crate::notifications::events::message::Create;
|
||||||
use crate::notifications::events::Notification;
|
use crate::notifications::events::Notification;
|
||||||
|
use crate::database::channel::Channel;
|
||||||
use crate::routes::channel::ChannelType;
|
use crate::routes::channel::ChannelType;
|
||||||
|
|
||||||
use bson::{doc, to_bson, UtcDateTime};
|
use bson::{doc, to_bson, UtcDateTime};
|
||||||
@@ -32,7 +32,7 @@ pub struct Message {
|
|||||||
// ? pub fn send_message();
|
// ? pub fn send_message();
|
||||||
// ? handle websockets?
|
// ? handle websockets?
|
||||||
impl Message {
|
impl Message {
|
||||||
pub fn send(&self, target: &ChannelRef) -> bool {
|
pub fn send(&self, target: &Channel) -> bool {
|
||||||
if get_collection("messages")
|
if get_collection("messages")
|
||||||
.insert_one(to_bson(&self).unwrap().as_document().unwrap().clone(), None)
|
.insert_one(to_bson(&self).unwrap().as_document().unwrap().clone(), None)
|
||||||
.is_ok()
|
.is_ok()
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
use super::mutual::has_mutual_connection;
|
use super::mutual::has_mutual_connection;
|
||||||
|
use crate::database::channel::Channel;
|
||||||
use crate::database::guild::Member;
|
use crate::database::guild::Member;
|
||||||
use crate::database::user::UserRelationship;
|
use crate::database::user::UserRelationship;
|
||||||
use crate::guards::auth::UserRef;
|
use crate::guards::auth::UserRef;
|
||||||
use crate::guards::channel::ChannelRef;
|
|
||||||
use crate::guards::guild::{get_member, GuildRef};
|
use crate::guards::guild::{get_member, GuildRef};
|
||||||
|
|
||||||
use num_enum::TryFromPrimitive;
|
use num_enum::TryFromPrimitive;
|
||||||
@@ -88,7 +88,7 @@ pub fn get_relationship(a: &UserRef, b: &UserRef) -> Relationship {
|
|||||||
|
|
||||||
pub struct PermissionCalculator {
|
pub struct PermissionCalculator {
|
||||||
pub user: UserRef,
|
pub user: UserRef,
|
||||||
pub channel: Option<ChannelRef>,
|
pub channel: Option<Channel>,
|
||||||
pub guild: Option<GuildRef>,
|
pub guild: Option<GuildRef>,
|
||||||
pub member: Option<Member>,
|
pub member: Option<Member>,
|
||||||
}
|
}
|
||||||
@@ -103,7 +103,7 @@ impl PermissionCalculator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn channel(self, channel: ChannelRef) -> PermissionCalculator {
|
pub fn channel(self, channel: Channel) -> PermissionCalculator {
|
||||||
PermissionCalculator {
|
PermissionCalculator {
|
||||||
channel: Some(channel),
|
channel: Some(channel),
|
||||||
..self
|
..self
|
||||||
|
|||||||
@@ -6,9 +6,23 @@ use serde::{Deserialize, Serialize};
|
|||||||
|
|
||||||
use crate::database;
|
use crate::database;
|
||||||
|
|
||||||
use database::channel::LastMessage;
|
use database::channel::{ Channel, fetch_channel };
|
||||||
use database::message::Message;
|
use database::message::Message;
|
||||||
|
|
||||||
|
impl<'r> FromParam<'r> for Channel {
|
||||||
|
type Error = &'r RawStr;
|
||||||
|
|
||||||
|
fn from_param(param: &'r RawStr) -> Result<Self, Self::Error> {
|
||||||
|
Ok(fetch_channel(param))
|
||||||
|
/*if let Some(channel) = fetch_channel(param) {
|
||||||
|
Ok(channel)
|
||||||
|
} else {
|
||||||
|
Err(param)
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
#[derive(Serialize, Deserialize, Debug, Clone)]
|
#[derive(Serialize, Deserialize, Debug, Clone)]
|
||||||
pub struct ChannelRef {
|
pub struct ChannelRef {
|
||||||
#[serde(rename = "_id")]
|
#[serde(rename = "_id")]
|
||||||
@@ -84,7 +98,7 @@ impl<'r> FromParam<'r> for ChannelRef {
|
|||||||
Err(param)
|
Err(param)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
|
|
||||||
impl<'r> FromParam<'r> for Message {
|
impl<'r> FromParam<'r> for Message {
|
||||||
type Error = &'r RawStr;
|
type Error = &'r RawStr;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
use crate::guards::channel::ChannelRef;
|
use crate::database::channel::Channel;
|
||||||
|
|
||||||
use once_cell::sync::OnceCell;
|
use once_cell::sync::OnceCell;
|
||||||
use std::sync::mpsc::{channel, Sender};
|
use std::sync::mpsc::{channel, Sender};
|
||||||
@@ -65,7 +65,7 @@ pub fn send_message_threaded<U: Into<Option<Vec<String>>>, G: Into<Option<String
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn send_message_given_channel(data: events::Notification, channel: &ChannelRef) {
|
pub fn send_message_given_channel(data: events::Notification, channel: &Channel) {
|
||||||
match channel.channel_type {
|
match channel.channel_type {
|
||||||
0..=1 => send_message_threaded(channel.recipients.clone(), None, data),
|
0..=1 => send_message_threaded(channel.recipients.clone(), None, data),
|
||||||
2 => send_message_threaded(None, channel.guild.clone(), data),
|
2 => send_message_threaded(None, channel.guild.clone(), data),
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
use super::Response;
|
use super::Response;
|
||||||
use crate::database::{
|
use crate::database::{
|
||||||
self, get_relationship, get_relationship_internal, message::Message, Permission,
|
self, get_relationship, get_relationship_internal, message::Message, Permission,
|
||||||
PermissionCalculator, Relationship,
|
PermissionCalculator, Relationship, channel::Channel
|
||||||
};
|
};
|
||||||
use crate::guards::auth::UserRef;
|
use crate::guards::auth::UserRef;
|
||||||
use crate::guards::channel::ChannelRef;
|
|
||||||
use crate::notifications::{
|
use crate::notifications::{
|
||||||
self,
|
self,
|
||||||
events::{groups::*, guilds::ChannelDelete, message::*, Notification},
|
events::{groups::*, guilds::ChannelDelete, message::*, Notification},
|
||||||
@@ -130,7 +129,7 @@ pub fn create_group(user: UserRef, info: Json<CreateGroup>) -> Response {
|
|||||||
|
|
||||||
/// fetch channel information
|
/// fetch channel information
|
||||||
#[get("/<target>")]
|
#[get("/<target>")]
|
||||||
pub fn channel(user: UserRef, target: ChannelRef) -> Option<Response> {
|
pub fn channel(user: UserRef, target: Channel) -> Option<Response> {
|
||||||
with_permissions!(user, target);
|
with_permissions!(user, target);
|
||||||
|
|
||||||
match target.channel_type {
|
match target.channel_type {
|
||||||
@@ -141,39 +140,39 @@ pub fn channel(user: UserRef, target: ChannelRef) -> Option<Response> {
|
|||||||
"recipients": target.recipients,
|
"recipients": target.recipients,
|
||||||
}))),
|
}))),
|
||||||
1 => {
|
1 => {
|
||||||
if let Some(info) = target.fetch_data(doc! {
|
/*if let Some(info) = target.fetch_data(doc! {
|
||||||
"name": 1,
|
"name": 1,
|
||||||
"description": 1,
|
"description": 1,
|
||||||
"owner": 1,
|
"owner": 1,
|
||||||
}) {
|
}) {*/
|
||||||
Some(Response::Success(json!({
|
Some(Response::Success(json!({
|
||||||
"id": target.id,
|
"id": target.id,
|
||||||
"type": target.channel_type,
|
"type": target.channel_type,
|
||||||
"last_message": target.last_message,
|
"last_message": target.last_message,
|
||||||
"recipients": target.recipients,
|
"recipients": target.recipients,
|
||||||
"name": info.get_str("name").unwrap(),
|
"name": target.name,
|
||||||
"owner": info.get_str("owner").unwrap(),
|
"owner": target.owner,
|
||||||
"description": info.get_str("description").unwrap_or(""),
|
"description": target.description,
|
||||||
})))
|
})))
|
||||||
} else {
|
/*} else {
|
||||||
None
|
None
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
2 => {
|
2 => {
|
||||||
if let Some(info) = target.fetch_data(doc! {
|
/*if let Some(info) = target.fetch_data(doc! {
|
||||||
"name": 1,
|
"name": 1,
|
||||||
"description": 1,
|
"description": 1,
|
||||||
}) {
|
}) {*/
|
||||||
Some(Response::Success(json!({
|
Some(Response::Success(json!({
|
||||||
"id": target.id,
|
"id": target.id,
|
||||||
"type": target.channel_type,
|
"type": target.channel_type,
|
||||||
"guild": target.guild,
|
"guild": target.guild,
|
||||||
"name": info.get_str("name").unwrap(),
|
"name": target.name,
|
||||||
"description": info.get_str("description").unwrap_or(""),
|
"description": target.description,
|
||||||
})))
|
})))
|
||||||
} else {
|
/*} else {
|
||||||
None
|
None
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
}
|
}
|
||||||
@@ -181,7 +180,7 @@ pub fn channel(user: UserRef, target: ChannelRef) -> Option<Response> {
|
|||||||
|
|
||||||
/// [groups] add user to channel
|
/// [groups] add user to channel
|
||||||
#[put("/<target>/recipients/<member>")]
|
#[put("/<target>/recipients/<member>")]
|
||||||
pub fn add_member(user: UserRef, target: ChannelRef, member: UserRef) -> Option<Response> {
|
pub fn add_member(user: UserRef, target: Channel, member: UserRef) -> Option<Response> {
|
||||||
if target.channel_type != 1 {
|
if target.channel_type != 1 {
|
||||||
return Some(Response::BadRequest(json!({ "error": "Not a group DM." })));
|
return Some(Response::BadRequest(json!({ "error": "Not a group DM." })));
|
||||||
}
|
}
|
||||||
@@ -255,7 +254,7 @@ pub fn add_member(user: UserRef, target: ChannelRef, member: UserRef) -> Option<
|
|||||||
|
|
||||||
/// [groups] remove user from channel
|
/// [groups] remove user from channel
|
||||||
#[delete("/<target>/recipients/<member>")]
|
#[delete("/<target>/recipients/<member>")]
|
||||||
pub fn remove_member(user: UserRef, target: ChannelRef, member: UserRef) -> Option<Response> {
|
pub fn remove_member(user: UserRef, target: Channel, member: UserRef) -> Option<Response> {
|
||||||
if target.channel_type != 1 {
|
if target.channel_type != 1 {
|
||||||
return Some(Response::BadRequest(json!({ "error": "Not a group DM." })));
|
return Some(Response::BadRequest(json!({ "error": "Not a group DM." })));
|
||||||
}
|
}
|
||||||
@@ -327,7 +326,7 @@ pub fn remove_member(user: UserRef, target: ChannelRef, member: UserRef) -> Opti
|
|||||||
/// or leave group DM
|
/// or leave group DM
|
||||||
/// or close DM conversation
|
/// or close DM conversation
|
||||||
#[delete("/<target>")]
|
#[delete("/<target>")]
|
||||||
pub fn delete(user: UserRef, target: ChannelRef) -> Option<Response> {
|
pub fn delete(user: UserRef, target: Channel) -> Option<Response> {
|
||||||
let permissions = with_permissions!(user, target);
|
let permissions = with_permissions!(user, target);
|
||||||
|
|
||||||
if !permissions.get_manage_channels() {
|
if !permissions.get_manage_channels() {
|
||||||
@@ -490,7 +489,7 @@ pub struct MessageFetchOptions {
|
|||||||
#[get("/<target>/messages?<options..>")]
|
#[get("/<target>/messages?<options..>")]
|
||||||
pub fn messages(
|
pub fn messages(
|
||||||
user: UserRef,
|
user: UserRef,
|
||||||
target: ChannelRef,
|
target: Channel,
|
||||||
options: Form<MessageFetchOptions>,
|
options: Form<MessageFetchOptions>,
|
||||||
) -> Option<Response> {
|
) -> Option<Response> {
|
||||||
let permissions = with_permissions!(user, target);
|
let permissions = with_permissions!(user, target);
|
||||||
@@ -554,7 +553,7 @@ pub struct SendMessage {
|
|||||||
#[post("/<target>/messages", data = "<message>")]
|
#[post("/<target>/messages", data = "<message>")]
|
||||||
pub fn send_message(
|
pub fn send_message(
|
||||||
user: UserRef,
|
user: UserRef,
|
||||||
target: ChannelRef,
|
target: Channel,
|
||||||
message: Json<SendMessage>,
|
message: Json<SendMessage>,
|
||||||
) -> Option<Response> {
|
) -> Option<Response> {
|
||||||
let permissions = with_permissions!(user, target);
|
let permissions = with_permissions!(user, target);
|
||||||
@@ -609,7 +608,7 @@ pub fn send_message(
|
|||||||
|
|
||||||
/// get a message
|
/// get a message
|
||||||
#[get("/<target>/messages/<message>")]
|
#[get("/<target>/messages/<message>")]
|
||||||
pub fn get_message(user: UserRef, target: ChannelRef, message: Message) -> Option<Response> {
|
pub fn get_message(user: UserRef, target: Channel, message: Message) -> Option<Response> {
|
||||||
let permissions = with_permissions!(user, target);
|
let permissions = with_permissions!(user, target);
|
||||||
|
|
||||||
if !permissions.get_read_messages() {
|
if !permissions.get_read_messages() {
|
||||||
@@ -643,7 +642,7 @@ pub struct EditMessage {
|
|||||||
#[patch("/<target>/messages/<message>", data = "<edit>")]
|
#[patch("/<target>/messages/<message>", data = "<edit>")]
|
||||||
pub fn edit_message(
|
pub fn edit_message(
|
||||||
user: UserRef,
|
user: UserRef,
|
||||||
target: ChannelRef,
|
target: Channel,
|
||||||
message: Message,
|
message: Message,
|
||||||
edit: Json<EditMessage>,
|
edit: Json<EditMessage>,
|
||||||
) -> Option<Response> {
|
) -> Option<Response> {
|
||||||
@@ -700,7 +699,7 @@ pub fn edit_message(
|
|||||||
|
|
||||||
/// delete a message
|
/// delete a message
|
||||||
#[delete("/<target>/messages/<message>")]
|
#[delete("/<target>/messages/<message>")]
|
||||||
pub fn delete_message(user: UserRef, target: ChannelRef, message: Message) -> Option<Response> {
|
pub fn delete_message(user: UserRef, target: Channel, message: Message) -> Option<Response> {
|
||||||
let permissions = with_permissions!(user, target);
|
let permissions = with_permissions!(user, target);
|
||||||
|
|
||||||
if !permissions.get_manage_messages() {
|
if !permissions.get_manage_messages() {
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
use super::channel::ChannelType;
|
use super::channel::ChannelType;
|
||||||
use super::Response;
|
use super::Response;
|
||||||
use crate::database::{self, channel::Channel, Permission, PermissionCalculator};
|
use crate::database::{self, channel::Channel, channel::fetch_channel, Permission, PermissionCalculator};
|
||||||
use crate::guards::auth::UserRef;
|
use crate::guards::auth::UserRef;
|
||||||
use crate::guards::channel::ChannelRef;
|
|
||||||
use crate::guards::guild::{get_invite, get_member, GuildRef};
|
use crate::guards::guild::{get_invite, get_member, GuildRef};
|
||||||
use crate::notifications::{
|
use crate::notifications::{
|
||||||
self,
|
self,
|
||||||
@@ -331,7 +330,7 @@ pub struct InviteOptions {
|
|||||||
pub fn create_invite(
|
pub fn create_invite(
|
||||||
user: UserRef,
|
user: UserRef,
|
||||||
target: GuildRef,
|
target: GuildRef,
|
||||||
channel: ChannelRef,
|
channel: Channel,
|
||||||
_options: Json<InviteOptions>,
|
_options: Json<InviteOptions>,
|
||||||
) -> Option<Response> {
|
) -> Option<Response> {
|
||||||
let (permissions, _) = with_permissions!(user, target);
|
let (permissions, _) = with_permissions!(user, target);
|
||||||
@@ -430,7 +429,8 @@ pub fn fetch_invites(user: UserRef, target: GuildRef) -> Option<Response> {
|
|||||||
#[get("/join/<code>", rank = 1)]
|
#[get("/join/<code>", rank = 1)]
|
||||||
pub fn fetch_invite(user: UserRef, code: String) -> Response {
|
pub fn fetch_invite(user: UserRef, code: String) -> Response {
|
||||||
if let Some((guild_id, name, invite)) = get_invite(&code, user.id) {
|
if let Some((guild_id, name, invite)) = get_invite(&code, user.id) {
|
||||||
if let Some(channel) = ChannelRef::from(invite.channel) {
|
//if let Some(channel) = ChannelRef::from(invite.channel) {
|
||||||
|
let channel = fetch_channel(&invite.channel);
|
||||||
Response::Success(json!({
|
Response::Success(json!({
|
||||||
"guild": {
|
"guild": {
|
||||||
"id": guild_id,
|
"id": guild_id,
|
||||||
@@ -441,9 +441,9 @@ pub fn fetch_invite(user: UserRef, code: String) -> Response {
|
|||||||
"name": channel.name,
|
"name": channel.name,
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
} else {
|
/*} else {
|
||||||
Response::BadRequest(json!({ "error": "Failed to fetch channel." }))
|
Response::BadRequest(json!({ "error": "Failed to fetch channel." }))
|
||||||
}
|
}*/
|
||||||
} else {
|
} else {
|
||||||
Response::NotFound(json!({ "error": "Failed to fetch invite or code is invalid." }))
|
Response::NotFound(json!({ "error": "Failed to fetch invite or code is invalid." }))
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user