From 5f346922f5682a89243dfcc2b2a8399f23be7a65 Mon Sep 17 00:00:00 2001 From: nullishamy Date: Mon, 28 Apr 2025 23:31:09 +0100 Subject: [PATCH] chore: move a bunch of instance types; deprecate old types --- ferri-main/src/types_rewrite/mod.rs | 101 ++++++++++++++++++ ferri-server/src/endpoints/api/instance.rs | 2 +- ferri-server/src/endpoints/inbox.rs | 35 +++---- ferri-server/src/http_wrapper.rs | 4 +- ferri-server/src/types/content.rs | 1 + ferri-server/src/types/instance.rs | 115 --------------------- ferri-server/src/types/mod.rs | 3 +- ferri-server/src/types/oauth.rs | 2 + ferri-server/src/types/webfinger.rs | 2 + 9 files changed, 128 insertions(+), 137 deletions(-) delete mode 100644 ferri-server/src/types/instance.rs diff --git a/ferri-main/src/types_rewrite/mod.rs b/ferri-main/src/types_rewrite/mod.rs index 317c667..ac55ae3 100644 --- a/ferri-main/src/types_rewrite/mod.rs +++ b/ferri-main/src/types_rewrite/mod.rs @@ -171,6 +171,107 @@ pub mod api { pub value: String, pub verified_at: Option, } + + #[derive(Debug, Serialize, Deserialize)] + pub struct Instance { + pub domain: String, + pub title: String, + pub version: String, + pub source_url: String, + pub description: String, + pub thumbnail: Thumbnail, + pub icon: Vec, + pub languages: Vec, + pub configuration: Configuration, + pub registrations: Registrations, + pub contact: Contact, + } + + #[derive(Debug, Serialize, Deserialize)] + pub struct Configuration { + pub urls: Urls, + pub accounts: Accounts, + pub statuses: Statuses, + pub media_attachments: MediaAttachments, + pub polls: Polls, + pub translation: Translation, + } + + #[derive(Debug, Serialize, Deserialize)] + pub struct Accounts { + pub max_featured_tags: i64, + pub max_pinned_statuses: i64, + } + + #[derive(Debug, Serialize, Deserialize)] + pub struct MediaAttachments { + pub supported_mime_types: Vec, + pub description_limit: i64, + pub image_size_limit: i64, + pub image_matrix_limit: i64, + pub video_size_limit: i64, + pub video_frame_rate_limit: i64, + pub video_matrix_limit: i64, + } + + #[derive(Debug, Serialize, Deserialize)] + pub struct Polls { + pub max_options: i64, + pub max_characters_per_option: i64, + pub min_expiration: i64, + pub max_expiration: i64, + } + + #[derive(Debug, Serialize, Deserialize)] + pub struct Statuses { + pub max_characters: i64, + pub max_media_attachments: i64, + pub characters_reserved_per_url: i64, + } + + #[derive(Debug, Serialize, Deserialize)] + pub struct Translation { + pub enabled: bool, + } + + #[derive(Debug, Serialize, Deserialize)] + pub struct Urls { + pub streaming: String, + pub about: String, + pub privacy_policy: String, + pub terms_of_service: String, + } + + #[derive(Debug, Serialize, Deserialize)] + pub struct Contact { + pub email: String, + } + + #[derive(Debug, Serialize, Deserialize)] + pub struct Field { + pub name: String, + pub value: String, + } + + #[derive(Debug, Serialize, Deserialize)] + pub struct Icon { + pub src: String, + pub size: String, + } + + #[derive(Debug, Serialize, Deserialize)] + pub struct Registrations { + pub enabled: bool, + pub approval_required: bool, + pub reason_required: bool, + pub message: Option, + pub min_age: i64, + } + + #[derive(Debug, Serialize, Deserialize)] + pub struct Thumbnail { + pub url: String, + } } #[cfg(test)] diff --git a/ferri-server/src/endpoints/api/instance.rs b/ferri-server/src/endpoints/api/instance.rs index 9fab90f..81c0d37 100644 --- a/ferri-server/src/endpoints/api/instance.rs +++ b/ferri-server/src/endpoints/api/instance.rs @@ -2,7 +2,7 @@ use rocket::{get, serde::json::Json, State}; use crate::Config; -use crate::types::instance::{ +use main::types_rewrite::api::{ Accounts, Configuration, Contact, Instance, MediaAttachments, Polls, Registrations, Statuses, Thumbnail, Translation, Urls, }; diff --git a/ferri-server/src/endpoints/inbox.rs b/ferri-server/src/endpoints/inbox.rs index 076db38..c8b05f1 100644 --- a/ferri-server/src/endpoints/inbox.rs +++ b/ferri-server/src/endpoints/inbox.rs @@ -1,6 +1,5 @@ use chrono::Local; use tracing::Instrument; -use main::ap; use rocket::serde::json::serde_json; use rocket::{State, post}; use rocket_db_pools::Connection; @@ -11,12 +10,12 @@ use uuid::Uuid; use tracing::{event, span, Level, debug, warn, info, error}; use crate::http_wrapper::HttpWrapper; -use main::types_rewrite::{make, db, ObjectUuid, ObjectUri, self}; +use main::types_rewrite::{make, db, ObjectUuid, ObjectUri, self, ap}; use crate::{ Db, http::HttpClient, - types::{Person, content::Post, activity}, + types::{content::Post, activity}, }; fn handle_delete_activity(activity: activity::DeleteActivity) { @@ -24,7 +23,7 @@ fn handle_delete_activity(activity: activity::DeleteActivity) { } async fn create_actor( - user: &Person, + user: &ap::Person, actor: &str, conn: impl sqlx::Executor<'_, Database = Sqlite>, ) { @@ -44,7 +43,7 @@ async fn create_actor( } async fn create_user( - user: &Person, + user: &ap::Person, actor: &str, conn: impl sqlx::Executor<'_, Database = Sqlite>, ) { @@ -112,7 +111,7 @@ struct RemoteInfo { is_remote: bool, } -fn get_remote_info(actor_url: &str, person: &Person) -> RemoteInfo { +fn get_remote_info(actor_url: &str, person: &ap::Person) -> RemoteInfo { let url = Url::parse(&actor_url).unwrap(); let host = url.host_str().unwrap(); @@ -194,18 +193,18 @@ async fn handle_follow_activity<'a>( create_follow(&activity, &mut **db).await; - let follower = ap::User::from_actor_id(&activity.actor, &mut **db).await; - let followed = ap::User::from_id(&followed_account, &mut **db).await.unwrap(); - let outbox = ap::Outbox::for_user(followed.clone(), http.client()); + let follower = main::ap::User::from_actor_id(&activity.actor, &mut **db).await; + let followed = main::ap::User::from_id(&followed_account, &mut **db).await.unwrap(); + let outbox = main::ap::Outbox::for_user(followed.clone(), http.client()); - let activity = ap::Activity { + let activity = main::ap::Activity { id: format!("https://ferri.amy.mov/activities/{}", Uuid::new_v4()), - ty: ap::ActivityType::Accept, + ty: main::ap::ActivityType::Accept, object: activity.id, ..Default::default() }; - let req = ap::OutgoingActivity { + let req = main::ap::OutgoingActivity { signed_by: format!( "https://ferri.amy.mov/users/{}#main-key", followed.username() @@ -290,13 +289,13 @@ async fn handle_boost_activity<'a>( debug!("creating user {}", attribution); create_user(&post_user, &attribution, &mut **db).await; - let attributed_user = ap::User::from_actor_id(&attribution, &mut **db).await; - let actor_user = ap::User::from_actor_id(&activity.actor, &mut **db).await; + let attributed_user = main::ap::User::from_actor_id(&attribution, &mut **db).await; + let actor_user = main::ap::User::from_actor_id(&activity.actor, &mut **db).await; - let base_id = ap::new_id(); - let now = ap::new_ts(); + let base_id = main::ap::new_id(); + let now = main::ap::new_ts(); - let reblog_id = ap::new_id(); + let reblog_id = main::ap::new_id(); let attr_id = attributed_user.id(); // HACK: ON CONFLICT is to avoid duplicate remote posts coming in @@ -345,7 +344,7 @@ async fn handle_create_activity<'a>( debug!("creating user {}", activity.actor); create_user(&user, &activity.actor, &mut **db).await; - let user = ap::User::from_actor_id(&activity.actor, &mut **db).await; + let user = main::ap::User::from_actor_id(&activity.actor, &mut **db).await; debug!("user created {:?}", user); let user_id = user.id(); diff --git a/ferri-server/src/http_wrapper.rs b/ferri-server/src/http_wrapper.rs index 0470b3f..6592438 100644 --- a/ferri-server/src/http_wrapper.rs +++ b/ferri-server/src/http_wrapper.rs @@ -1,7 +1,7 @@ use thiserror::Error; use tracing::{error, event, Level}; use crate::http::HttpClient; -use crate::types::Person; +use main::types_rewrite::ap; use std::fmt::Debug; pub struct HttpWrapper<'a> { @@ -65,7 +65,7 @@ impl <'a> HttpWrapper<'a> { Ok(decoded.unwrap()) } - pub async fn get_person(&self, url: &str) -> Result { + pub async fn get_person(&self, url: &str) -> Result { self.get("Person", url).await } } diff --git a/ferri-server/src/types/content.rs b/ferri-server/src/types/content.rs index e35c5d9..0ba38d4 100644 --- a/ferri-server/src/types/content.rs +++ b/ferri-server/src/types/content.rs @@ -2,6 +2,7 @@ use rocket::serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize, Debug, Default)] #[serde(crate = "rocket::serde")] +#[deprecated] pub struct Post { // FIXME: This is because Masto sends an array but we don't care #[serde(rename = "@context")] diff --git a/ferri-server/src/types/instance.rs b/ferri-server/src/types/instance.rs deleted file mode 100644 index bfc7c1d..0000000 --- a/ferri-server/src/types/instance.rs +++ /dev/null @@ -1,115 +0,0 @@ -use rocket::serde::{Deserialize, Serialize}; - -#[derive(Debug, Serialize, Deserialize)] -#[serde(crate = "rocket::serde")] -pub struct Instance { - pub domain: String, - pub title: String, - pub version: String, - pub source_url: String, - pub description: String, - pub thumbnail: Thumbnail, - pub icon: Vec, - pub languages: Vec, - pub configuration: Configuration, - pub registrations: Registrations, - pub contact: Contact, -} - -#[derive(Debug, Serialize, Deserialize)] -#[serde(crate = "rocket::serde")] -pub struct Configuration { - pub urls: Urls, - pub accounts: Accounts, - pub statuses: Statuses, - pub media_attachments: MediaAttachments, - pub polls: Polls, - pub translation: Translation, -} - -#[derive(Debug, Serialize, Deserialize)] -#[serde(crate = "rocket::serde")] -pub struct Accounts { - pub max_featured_tags: i64, - pub max_pinned_statuses: i64, -} - -#[derive(Debug, Serialize, Deserialize)] -#[serde(crate = "rocket::serde")] -pub struct MediaAttachments { - pub supported_mime_types: Vec, - pub description_limit: i64, - pub image_size_limit: i64, - pub image_matrix_limit: i64, - pub video_size_limit: i64, - pub video_frame_rate_limit: i64, - pub video_matrix_limit: i64, -} - -#[derive(Debug, Serialize, Deserialize)] -#[serde(crate = "rocket::serde")] -pub struct Polls { - pub max_options: i64, - pub max_characters_per_option: i64, - pub min_expiration: i64, - pub max_expiration: i64, -} - -#[derive(Debug, Serialize, Deserialize)] -#[serde(crate = "rocket::serde")] -pub struct Statuses { - pub max_characters: i64, - pub max_media_attachments: i64, - pub characters_reserved_per_url: i64, -} - -#[derive(Debug, Serialize, Deserialize)] -#[serde(crate = "rocket::serde")] -pub struct Translation { - pub enabled: bool, -} - -#[derive(Debug, Serialize, Deserialize)] -#[serde(crate = "rocket::serde")] -pub struct Urls { - pub streaming: String, - pub about: String, - pub privacy_policy: String, - pub terms_of_service: String, -} - -#[derive(Debug, Serialize, Deserialize)] -#[serde(crate = "rocket::serde")] -pub struct Contact { - pub email: String, -} - -#[derive(Debug, Serialize, Deserialize)] -#[serde(crate = "rocket::serde")] -pub struct Field { - pub name: String, - pub value: String, -} - -#[derive(Debug, Serialize, Deserialize)] -#[serde(crate = "rocket::serde")] -pub struct Icon { - pub src: String, - pub size: String, -} - -#[derive(Debug, Serialize, Deserialize)] -#[serde(crate = "rocket::serde")] -pub struct Registrations { - pub enabled: bool, - pub approval_required: bool, - pub reason_required: bool, - pub message: Option, - pub min_age: i64, -} - -#[derive(Debug, Serialize, Deserialize)] -#[serde(crate = "rocket::serde")] -pub struct Thumbnail { - pub url: String, -} diff --git a/ferri-server/src/types/mod.rs b/ferri-server/src/types/mod.rs index 7767a8d..eb0c3c5 100644 --- a/ferri-server/src/types/mod.rs +++ b/ferri-server/src/types/mod.rs @@ -1,6 +1,5 @@ pub mod activity; pub mod content; -pub mod instance; pub mod oauth; pub mod webfinger; @@ -9,6 +8,7 @@ use rocket::serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize, Debug)] #[serde(rename_all = "camelCase")] #[serde(crate = "rocket::serde")] +#[deprecated] pub struct UserKey { pub id: String, pub owner: String, @@ -19,6 +19,7 @@ pub struct UserKey { #[derive(Serialize, Deserialize, Debug)] #[serde(rename_all = "camelCase")] #[serde(crate = "rocket::serde")] +#[deprecated] pub struct Person { // FIXME: This is because Masto sends an array but we don't care #[serde(rename = "@context")] diff --git a/ferri-server/src/types/oauth.rs b/ferri-server/src/types/oauth.rs index 8791fe3..7bc1b27 100644 --- a/ferri-server/src/types/oauth.rs +++ b/ferri-server/src/types/oauth.rs @@ -5,6 +5,7 @@ use rocket::{ #[derive(Serialize, Deserialize, Debug, FromForm, Clone)] #[serde(crate = "rocket::serde")] +#[deprecated] pub struct App { pub client_name: String, pub redirect_uris: Vec, @@ -13,6 +14,7 @@ pub struct App { #[derive(Serialize, Deserialize, Debug)] #[serde(crate = "rocket::serde")] +#[deprecated] pub struct CredentialApplication { pub name: String, pub scopes: String, diff --git a/ferri-server/src/types/webfinger.rs b/ferri-server/src/types/webfinger.rs index a97c7dd..71f7d2b 100644 --- a/ferri-server/src/types/webfinger.rs +++ b/ferri-server/src/types/webfinger.rs @@ -2,6 +2,7 @@ use rocket::serde::{Deserialize, Serialize}; #[derive(Deserialize, Serialize, Debug)] #[serde(crate = "rocket::serde")] +#[deprecated] pub struct Link { pub rel: String, #[serde(rename = "type")] @@ -11,6 +12,7 @@ pub struct Link { #[derive(Deserialize, Serialize, Debug)] #[serde(crate = "rocket::serde")] +#[deprecated] pub struct WebfingerResponse { pub subject: String, pub aliases: Vec,