* feat: create base of push daemon Signed-off-by: IAmTomahawkx <iamtomahawkx@gmail.com> * Add outbound senders * Make web_push send to rabbit instead (temp stuff) * feat: stability and friend requests * make vapid fr stuff not suck * swap naming of queue * move pushd into daemons folder * fix cargo file for move into daemons folder * feat: probably working fcm push notifs * comment out fcm webpush stuff since the config keys dont exist * fix fcm, name queues according to their prod status and configure routing keys * add pushd to docker * mix: Remove old code, add stuff to pushd * fix: lockfile * feat: update rocket to 5.0.1 * fix: fix queues and ack bugs * Move rabbit messsage processing into ack queue * chore: update readme * chore: optimizations for ack database hits * pushd flowchart * misc: update flowchart * exit dependancy hell * add rocket_impl flag to authifier * make the tests file of delta actually compile * fix: don't silence every push message * fix: don't silence all messages * add debug logging for sending data to rabbit from message events * validate mentions at a server membership level * put back that import that was actually important * minor fix to lockfile * update delta authifier * feat: proper permissions for push notifications * add unit test for mention sanitization * remove local file dependancy on authifier * update ports to proper defaults * fixTM the node bindings * Theoretically configure docker releases for pushd Signed-off-by: IAmTomahawkx <iamtomahawkx@gmail.com> * declare exchange in pushd and delta * fix createbuckets script Signed-off-by: IAmTomahawkx <iamtomahawkx@gmail.com> * fix: reference db implementation Signed-off-by: IAmTomahawkx <iamtomahawkx@gmail.com> * fix: remove finally redundant code Signed-off-by: IAmTomahawkx <iamtomahawkx@gmail.com> * fix: changes Signed-off-by: IAmTomahawkx <iamtomahawkx@gmail.com> * fix: other changes Signed-off-by: IAmTomahawkx <iamtomahawkx@gmail.com> * fix: make channel name return result Signed-off-by: IAmTomahawkx <iamtomahawkx@gmail.com> --------- Signed-off-by: IAmTomahawkx <iamtomahawkx@gmail.com>
50 lines
1.6 KiB
Rust
50 lines
1.6 KiB
Rust
use revolt_database::{util::reference::Reference, Channel, Database, Invite, Member, User, AMQP};
|
|
use revolt_models::v0::{self, InviteJoinResponse};
|
|
use revolt_result::{create_error, Result};
|
|
use rocket::{serde::json::Json, State};
|
|
|
|
/// # Join Invite
|
|
///
|
|
/// Join an invite by its ID
|
|
#[openapi(tag = "Invites")]
|
|
#[post("/<target>")]
|
|
pub async fn join(
|
|
db: &State<Database>,
|
|
amqp: &State<AMQP>,
|
|
user: User,
|
|
target: Reference,
|
|
) -> Result<Json<v0::InviteJoinResponse>> {
|
|
if user.bot.is_some() {
|
|
return Err(create_error!(IsBot));
|
|
}
|
|
|
|
user.can_acquire_server(db).await?;
|
|
|
|
let invite = target.as_invite(db).await?;
|
|
match &invite {
|
|
Invite::Server { server, .. } => {
|
|
let server = db.fetch_server(server).await?;
|
|
let (_, channels) = Member::create(db, &server, &user, None).await?;
|
|
|
|
Ok(Json(InviteJoinResponse::Server {
|
|
channels: channels.into_iter().map(|c| c.into()).collect(),
|
|
server: server.into(),
|
|
}))
|
|
}
|
|
Invite::Group {
|
|
channel, creator, ..
|
|
} => {
|
|
let mut channel = db.fetch_channel(channel).await?;
|
|
channel.add_user_to_group(db, amqp, &user, creator).await?;
|
|
if let Channel::Group { recipients, .. } = &channel {
|
|
Ok(Json(InviteJoinResponse::Group {
|
|
users: User::fetch_many_ids_as_mutuals(db, &user, recipients).await?,
|
|
channel: channel.into(),
|
|
}))
|
|
} else {
|
|
unreachable!()
|
|
}
|
|
}
|
|
}
|
|
}
|