forked from jmug/stoatchat
feat: channel model implementation (#250)
Co-authored-by: ToastXC <100072983+toastxc@users.noreply.github.com>
This commit is contained in:
@@ -59,6 +59,7 @@ revolt-quark = { path = "../quark" }
|
||||
revolt-database = { path = "../core/database", features = [ "rocket-impl", "redis-is-patched" ] }
|
||||
revolt-models = { path = "../core/models", features = [ "schemas", "validator" ] }
|
||||
revolt-result = { path = "../core/result", features = [ "rocket", "okapi" ] }
|
||||
revolt-permissions = { path = "../core/permissions", features = [ "schemas" ] }
|
||||
|
||||
[build-dependencies]
|
||||
vergen = "7.5.0"
|
||||
|
||||
@@ -1,18 +1,9 @@
|
||||
use rocket::serde::json::Json;
|
||||
use serde::Deserialize;
|
||||
|
||||
use revolt_permissions::DataPermissionsValue;
|
||||
use revolt_quark::{
|
||||
models::{server::PartialServer, Server, User},
|
||||
perms, Db, Permission, Ref, Result,
|
||||
};
|
||||
|
||||
/// # Permission Value
|
||||
#[derive(Deserialize, JsonSchema)]
|
||||
pub struct DataSetServerDefaultPermission {
|
||||
/// Default member permission value
|
||||
permissions: u64,
|
||||
}
|
||||
|
||||
use rocket::serde::json::Json;
|
||||
/// # Set Default Permission
|
||||
///
|
||||
/// Sets permissions for the default role in this server.
|
||||
@@ -22,7 +13,7 @@ pub async fn req(
|
||||
db: &Db,
|
||||
user: User,
|
||||
target: Ref,
|
||||
data: Json<DataSetServerDefaultPermission>,
|
||||
data: Json<DataPermissionsValue>,
|
||||
) -> Result<Json<Server>> {
|
||||
let data = data.into_inner();
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use revolt_database::Database;
|
||||
use revolt_database::{util::reference::Reference, Database};
|
||||
use revolt_quark::{models::User, perms, Db, Error, Permission, Result};
|
||||
use rocket::State;
|
||||
use rocket_empty::EmptyResponse;
|
||||
@@ -12,13 +12,9 @@ pub async fn webhook_delete(
|
||||
db: &State<Database>,
|
||||
legacy_db: &Db,
|
||||
user: User,
|
||||
webhook_id: String,
|
||||
webhook_id: Reference,
|
||||
) -> Result<EmptyResponse> {
|
||||
let webhook = db
|
||||
.fetch_webhook(&webhook_id)
|
||||
.await
|
||||
.map_err(Error::from_core)?;
|
||||
|
||||
let webhook = webhook_id.as_webhook(db).await.map_err(Error::from_core)?;
|
||||
let channel = legacy_db.fetch_channel(&webhook.channel_id).await?;
|
||||
|
||||
perms(&user)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use revolt_database::Database;
|
||||
use revolt_database::{util::reference::Reference, Database};
|
||||
use revolt_result::Result;
|
||||
use rocket::State;
|
||||
use rocket_empty::EmptyResponse;
|
||||
@@ -10,10 +10,10 @@ use rocket_empty::EmptyResponse;
|
||||
#[delete("/<webhook_id>/<token>")]
|
||||
pub async fn webhook_delete_token(
|
||||
db: &State<Database>,
|
||||
webhook_id: String,
|
||||
webhook_id: Reference,
|
||||
token: String,
|
||||
) -> Result<EmptyResponse> {
|
||||
let webhook = db.fetch_webhook(&webhook_id).await?;
|
||||
let webhook = webhook_id.as_webhook(db).await?;
|
||||
webhook.assert_token(&token)?;
|
||||
webhook.delete(db).await.map(|_| EmptyResponse)
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use revolt_database::{Database, PartialWebhook};
|
||||
use revolt_database::{util::reference::Reference, Database, PartialWebhook};
|
||||
use revolt_models::v0::{DataEditWebhook, Webhook};
|
||||
use revolt_quark::{models::User, perms, Db, Error, Permission, Result};
|
||||
use rocket::{serde::json::Json, State};
|
||||
@@ -12,7 +12,7 @@ use validator::Validate;
|
||||
pub async fn webhook_edit(
|
||||
db: &State<Database>,
|
||||
legacy_db: &Db,
|
||||
webhook_id: String,
|
||||
webhook_id: Reference,
|
||||
user: User,
|
||||
data: Json<DataEditWebhook>,
|
||||
) -> Result<Json<Webhook>> {
|
||||
@@ -20,11 +20,7 @@ pub async fn webhook_edit(
|
||||
data.validate()
|
||||
.map_err(|error| Error::FailedValidation { error })?;
|
||||
|
||||
let mut webhook = db
|
||||
.fetch_webhook(&webhook_id)
|
||||
.await
|
||||
.map_err(Error::from_core)?;
|
||||
|
||||
let mut webhook = webhook_id.as_webhook(db).await.map_err(Error::from_core)?;
|
||||
let channel = legacy_db.fetch_channel(&webhook.channel_id).await?;
|
||||
|
||||
perms(&user)
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
use revolt_database::util::reference::Reference;
|
||||
use revolt_database::{Database, PartialWebhook};
|
||||
use revolt_models::v0::{DataEditWebhook, Webhook};
|
||||
use revolt_models::validator::Validate;
|
||||
@@ -11,7 +12,7 @@ use rocket::{serde::json::Json, State};
|
||||
#[patch("/<webhook_id>/<token>", data = "<data>")]
|
||||
pub async fn webhook_edit_token(
|
||||
db: &State<Database>,
|
||||
webhook_id: String,
|
||||
webhook_id: Reference,
|
||||
token: String,
|
||||
data: Json<DataEditWebhook>,
|
||||
) -> Result<Json<Webhook>> {
|
||||
@@ -22,7 +23,7 @@ pub async fn webhook_edit_token(
|
||||
})
|
||||
})?;
|
||||
|
||||
let mut webhook = db.fetch_webhook(&webhook_id).await?;
|
||||
let mut webhook = webhook_id.as_webhook(db).await?;
|
||||
webhook.assert_token(&token)?;
|
||||
|
||||
if data.name.is_none() && data.avatar.is_none() && data.remove.is_empty() {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use revolt_database::Database;
|
||||
use revolt_database::{util::reference::Reference, Database};
|
||||
use revolt_quark::{
|
||||
models::message::{DataMessageSend, Message},
|
||||
types::push::MessageAuthor,
|
||||
@@ -17,7 +17,7 @@ use validator::Validate;
|
||||
pub async fn webhook_execute(
|
||||
db: &State<Database>,
|
||||
legacy_db: &Db,
|
||||
webhook_id: String,
|
||||
webhook_id: Reference,
|
||||
token: String,
|
||||
data: Json<DataMessageSend>,
|
||||
idempotency: IdempotencyKey,
|
||||
@@ -26,11 +26,7 @@ pub async fn webhook_execute(
|
||||
data.validate()
|
||||
.map_err(|error| Error::FailedValidation { error })?;
|
||||
|
||||
let webhook = db
|
||||
.fetch_webhook(&webhook_id)
|
||||
.await
|
||||
.map_err(Error::from_core)?;
|
||||
|
||||
let webhook = webhook_id.as_webhook(db).await.map_err(Error::from_core)?;
|
||||
webhook.assert_token(&token).map_err(Error::from_core)?;
|
||||
|
||||
// TODO: webhooks can currently always send masquerades, files, embeds, reactions (interactions)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use revolt_database::Database;
|
||||
use revolt_database::{util::reference::Reference, Database};
|
||||
use revolt_models::v0::Webhook;
|
||||
use revolt_quark::{
|
||||
models::{message::SendableEmbed, Message},
|
||||
@@ -752,16 +752,12 @@ fn convert_event(data: &str, event_name: &str) -> Result<Event> {
|
||||
pub async fn webhook_execute_github(
|
||||
db: &State<Database>,
|
||||
legacy_db: &Db,
|
||||
webhook_id: String,
|
||||
webhook_id: Reference,
|
||||
token: String,
|
||||
event: EventHeader<'_>,
|
||||
data: String,
|
||||
) -> Result<()> {
|
||||
let webhook = db
|
||||
.fetch_webhook(&webhook_id)
|
||||
.await
|
||||
.map_err(Error::from_core)?;
|
||||
|
||||
let webhook = webhook_id.as_webhook(db).await.map_err(Error::from_core)?;
|
||||
webhook.assert_token(&token).map_err(Error::from_core)?;
|
||||
|
||||
let channel = legacy_db.fetch_channel(&webhook.channel_id).await?;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use revolt_database::Database;
|
||||
use revolt_database::{util::reference::Reference, Database};
|
||||
use revolt_models::v0::{ResponseWebhook, Webhook};
|
||||
use revolt_quark::{models::User, perms, Db, Error, Permission, Result};
|
||||
use rocket::{serde::json::Json, State};
|
||||
@@ -11,14 +11,10 @@ use rocket::{serde::json::Json, State};
|
||||
pub async fn webhook_fetch(
|
||||
db: &State<Database>,
|
||||
legacy_db: &Db,
|
||||
webhook_id: String,
|
||||
webhook_id: Reference,
|
||||
user: User,
|
||||
) -> Result<Json<ResponseWebhook>> {
|
||||
let webhook = db
|
||||
.fetch_webhook(&webhook_id)
|
||||
.await
|
||||
.map_err(Error::from_core)?;
|
||||
|
||||
let webhook = webhook_id.as_webhook(db).await.map_err(Error::from_core)?;
|
||||
let channel = legacy_db.fetch_channel(&webhook.channel_id).await?;
|
||||
|
||||
perms(&user)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use revolt_database::Database;
|
||||
use revolt_database::{util::reference::Reference, Database};
|
||||
use revolt_models::v0::Webhook;
|
||||
use revolt_result::Result;
|
||||
use rocket::{serde::json::Json, State};
|
||||
@@ -10,10 +10,10 @@ use rocket::{serde::json::Json, State};
|
||||
#[get("/<webhook_id>/<token>")]
|
||||
pub async fn webhook_fetch_token(
|
||||
db: &State<Database>,
|
||||
webhook_id: String,
|
||||
webhook_id: Reference,
|
||||
token: String,
|
||||
) -> Result<Json<Webhook>> {
|
||||
let webhook = db.fetch_webhook(&webhook_id).await?;
|
||||
let webhook = webhook_id.as_webhook(db).await?;
|
||||
webhook.assert_token(&token)?;
|
||||
Ok(Json(webhook.into()))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user