chore: update everything to work with utoipa

This commit is contained in:
Zomatree
2025-11-13 23:06:41 +00:00
parent 27ea7345ea
commit ac60b2c795
148 changed files with 1200 additions and 1117 deletions

View File

@@ -33,12 +33,12 @@ revolt-ratelimits = { version = "0.8.9", path = "../../core/ratelimits", feature
] }
# Axum / web server
axum = { version = "0.7.5" }
axum-extra = { version = "0.9", features = ["typed-header"] }
axum = { version = "0.8.6" }
axum-extra = { version = "0.12.1", features = ["typed-header"] }
# OpenAPI & documentation generation
utoipa-scalar = { version = "0.1.0", features = ["axum"] }
utoipa = { version = "4.2.3", features = ["axum_extras", "ulid"] }
utoipa-scalar = { version = "0.3.0", features = ["axum"] }
utoipa = { version = "5.4.0", features = ["ulid"] }
# Logging
tracing = "0.1"

View File

@@ -1,16 +1,15 @@
use std::net::{Ipv4Addr, SocketAddr};
use axum::{extract::FromRef, middleware::from_fn_with_state, Router};
use axum::{
extract::FromRef, middleware::from_fn_with_state, Router,
};
use revolt_config::config;
use revolt_database::{Database, DatabaseInfo};
use revolt_database::{Database, DatabaseInfo, util::utoipa::TokenSecurity};
use revolt_ratelimits::axum as ratelimiter;
use tokio::net::TcpListener;
use utoipa::{
openapi::security::{ApiKey, ApiKeyValue, SecurityScheme},
Modify, OpenApi,
};
use utoipa_scalar::{Scalar, Servable as ScalarServable};
use utoipa::OpenApi;
use utoipa_scalar::{Scalar, Servable};
use crate::tenor::Tenor;
@@ -26,26 +25,6 @@ struct AppState {
pub ratelimit_storage: ratelimiter::RatelimitStorage,
}
struct SecurityAddon;
impl Modify for SecurityAddon {
fn modify(&self, openapi: &mut utoipa::openapi::OpenApi) {
let components = openapi.components.get_or_insert_default();
components.add_security_scheme(
"User Token",
SecurityScheme::ApiKey(ApiKey::Header(ApiKeyValue::new(
"X-Session-Token".to_string(),
))),
);
components.add_security_scheme(
"Bot Token",
SecurityScheme::ApiKey(ApiKey::Header(ApiKeyValue::new("X-Bot-Token".to_string()))),
);
}
}
#[tokio::main]
async fn main() -> Result<(), std::io::Error> {
// Configure logging and environment
@@ -54,7 +33,7 @@ async fn main() -> Result<(), std::io::Error> {
// Configure API schema
#[derive(OpenApi)]
#[openapi(
modifiers(&SecurityAddon),
modifiers(&TokenSecurity),
paths(
routes::categories::categories,
routes::root::root,

View File

@@ -3,7 +3,7 @@ use axum::{
Json,
};
use revolt_database::User;
use revolt_result::{create_error, Result};
use revolt_result::{create_error, Result, Error};
use serde::Deserialize;
use utoipa::IntoParams;
@@ -21,10 +21,11 @@ pub struct CategoriesQueryParams {
get,
path = "/categories",
tag = "GIFs",
security(("User Token" = []), ("Bot Token" = [])),
security(("Session-Token" = []), ("Bot-Token" = [])),
params(CategoriesQueryParams),
responses(
(status = 200, description = "Categories results", body = inline(Vec<types::CategoryResponse>))
(status = 200, description = "Categories results", body = inline(Vec<types::CategoryResponse>)),
(status = "default", body = Error)
)
)]
pub async fn categories(

View File

@@ -3,7 +3,7 @@ use axum::{
Json,
};
use revolt_database::User;
use revolt_result::{create_error, Result};
use revolt_result::{Error, Result, create_error};
use serde::Deserialize;
use utoipa::IntoParams;
@@ -30,10 +30,11 @@ pub struct SearchQueryParams {
get,
path = "/search",
tag = "GIFs",
security(("User Token" = []), ("Bot Token" = [])),
security(("Session-Token" = []), ("Bot-Token" = [])),
params(SearchQueryParams),
responses(
(status = 200, description = "Search results", body = inline(types::PaginatedMediaResponse))
(status = 200, description = "Search results", body = types::PaginatedMediaResponse),
(status = "default", body = Error)
)
)]
pub async fn search(

View File

@@ -3,7 +3,7 @@ use axum::{
Json,
};
use revolt_database::User;
use revolt_result::{create_error, Result};
use revolt_result::{create_error, Result, Error};
use serde::Deserialize;
use utoipa::IntoParams;
@@ -25,10 +25,11 @@ pub struct TrendingQueryParams {
get,
path = "/featured",
tag = "GIFs",
security(("User Token" = []), ("Bot Token" = [])),
security(("Session-Token" = []), ("Bot-Token" = [])),
params(TrendingQueryParams),
responses(
(status = 200, description = "Trending results", body = inline(types::PaginatedMediaResponse))
(status = 200, description = "Trending results", body = types::PaginatedMediaResponse),
(status = "default", body = Error),
)
)]
pub async fn trending(