chore: rework oauth2 route scoping

This commit is contained in:
Zomatree
2025-07-21 05:35:59 +01:00
parent f895ca7b23
commit 9d4bcb5e3d
13 changed files with 178 additions and 58 deletions

View File

@@ -203,7 +203,13 @@ fn custom_openapi_spec() -> OpenApi {
"Sync",
"Web Push"
]
}
},
{
"name": "OAuth2",
"tags": [
"OAuth2",
]
},
]),
);
@@ -375,6 +381,11 @@ fn custom_openapi_spec() -> OpenApi {
description: Some("Send messages from 3rd party services".to_owned()),
..Default::default()
},
Tag {
name: "OAuth2".to_owned(),
description: Some("Integrate Revolt into 3rd party applications".to_owned()),
..Default::default()
},
],
..Default::default()
}

View File

@@ -1,5 +1,5 @@
use revolt_database::{
util::{permissions::DatabasePermissionQuery, reference::Reference},
util::{oauth2::{scopes, OAuth2Scoped}, permissions::DatabasePermissionQuery, reference::Reference},
Database, User,
};
use revolt_models::v0;
@@ -14,6 +14,7 @@ use rocket::{serde::json::Json, State};
#[get("/<target>?<options..>")]
pub async fn fetch_server(
db: &State<Database>,
_oauth2_scope: OAuth2Scoped<scopes::ReadServers>,
user: User,
target: Reference<'_>,
options: v0::OptionsFetchServer,

View File

@@ -1,4 +1,4 @@
use revolt_database::User;
use revolt_database::{User, util::oauth2::{OAuth2Scoped, scopes}};
use revolt_models::v0;
use revolt_result::Result;
use rocket::serde::json::Json;
@@ -8,6 +8,9 @@ use rocket::serde::json::Json;
/// Retrieve your user information.
#[openapi(tag = "User Information")]
#[get("/@me")]
pub async fn fetch_self(user: User) -> Result<Json<v0::User>> {
pub async fn fetch_self(
_oauth2_scope: OAuth2Scoped<scopes::ReadIdentify>,
user: User
) -> Result<Json<v0::User>> {
Ok(Json(user.into_self(false).await))
}

View File

@@ -1,4 +1,4 @@
use revolt_database::{util::permissions::DatabasePermissionQuery, Database, User};
use revolt_database::{util::{oauth2::{scopes, OAuth2Scoped}, permissions::DatabasePermissionQuery}, Database, User};
use revolt_models::v0;
use revolt_permissions::{calculate_channel_permissions, ChannelPermission};
use revolt_result::Result;
@@ -11,6 +11,7 @@ use rocket::{serde::json::Json, State};
#[get("/@me/servers?<options..>")]
pub async fn fetch_self_servers(
db: &State<Database>,
_oauth2_scope: OAuth2Scoped<scopes::ReadServers>,
user: User,
options: v0::OptionsFetchServer,
) -> Result<Json<Vec<v0::FetchServerResponse>>> {