chore: move a bunch of instance types; deprecate old types

This commit is contained in:
nullishamy 2025-04-28 23:31:09 +01:00
parent e6b654a0b3
commit 5f346922f5
Signed by: amy
SSH key fingerprint: SHA256:WmV0uk6WgAQvDJlM8Ld4mFPHZo02CLXXP5VkwQ5xtyk
9 changed files with 128 additions and 137 deletions

View file

@ -171,6 +171,107 @@ pub mod api {
pub value: String,
pub verified_at: Option<String>,
}
#[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<Icon>,
pub languages: Vec<String>,
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<String>,
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<String>,
pub min_age: i64,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Thumbnail {
pub url: String,
}
}
#[cfg(test)]

View file

@ -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,
};

View file

@ -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();

View file

@ -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<Person, HttpError> {
pub async fn get_person(&self, url: &str) -> Result<ap::Person, HttpError> {
self.get("Person", url).await
}
}

View file

@ -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")]

View file

@ -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<Icon>,
pub languages: Vec<String>,
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<String>,
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<String>,
pub min_age: i64,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(crate = "rocket::serde")]
pub struct Thumbnail {
pub url: String,
}

View file

@ -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")]

View file

@ -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<String>,
@ -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,

View file

@ -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<String>,