Add "configuration" object to response of /api/v1/instance endpoint

This commit is contained in:
silverpill 2023-01-06 16:46:59 +00:00
parent fe395480eb
commit 1663d22b19
4 changed files with 75 additions and 2 deletions

View file

@ -11,6 +11,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Added `/api/v1/accounts/lookup` Mastodon API endpoint. - Added `/api/v1/accounts/lookup` Mastodon API endpoint.
- Implemented activity delivery queue. - Implemented activity delivery queue.
- Started to keep track of unreachable actors. - Started to keep track of unreachable actors.
- Added `configuration` object to response of `/api/v1/instance` endpoint.
### Changed ### Changed
@ -18,6 +19,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Limited the number of requests made during the processing of a thread. - Limited the number of requests made during the processing of a thread.
- Limited the number of media files that can be attached to a post. - Limited the number of media files that can be attached to a post.
### Deprecated
- Deprecated `post_character_limit` property in `/api/v1/instance` response.
### Removed ### Removed
- Removed ability to upload non-images using `/api/v1/media` endpoint. - Removed ability to upload non-images using `/api/v1/media` endpoint.

View file

@ -1394,6 +1394,36 @@ components:
domain_count: domain_count:
description: Domains federated with this instance. description: Domains federated with this instance.
type: integer type: integer
configuration:
description: Configured values and limits for this instance.
type: object
properties:
statuses:
description: Limits related to authoring posts.
type: object
properties:
max_characters:
description: The maximum number of allowed characters per post.
type: integer
example: 5000
max_media_attachments:
description: The maximum number of media attachments that can be added to a post.
type: integer
example: 15
media_attachments:
description: Limits realted to uploading attachments.
type: object
properties:
supported_mime_types:
description: Contains MIME types that can be uploaded.
type: array
items:
type: string
example: 'image/png'
image_size_limit:
description: The maximum size of any uploaded image, in bytes.
type: integer
example: 5242880
login_message: login_message:
description: Login message for signer. description: Login message for signer.
type: string type: string

View file

@ -3,8 +3,15 @@ use serde_json::{to_value, Value};
use crate::config::{BlockchainConfig, Config}; use crate::config::{BlockchainConfig, Config};
use crate::ethereum::contracts::ContractSet; use crate::ethereum::contracts::ContractSet;
use crate::mastodon_api::MASTODON_API_VERSION; use crate::mastodon_api::{
use crate::utils::markdown::markdown_to_html; MASTODON_API_VERSION,
uploads::UPLOAD_MAX_SIZE,
};
use crate::models::posts::validators::ATTACHMENTS_MAX_NUM;
use crate::utils::{
files::SUPPORTED_MEDIA_TYPES,
markdown::markdown_to_html,
};
#[derive(Serialize)] #[derive(Serialize)]
struct InstanceStats { struct InstanceStats {
@ -13,6 +20,24 @@ struct InstanceStats {
domain_count: i64, domain_count: i64,
} }
#[derive(Serialize)]
struct InstanceStatusLimits {
max_characters: usize,
max_media_attachments: usize,
}
#[derive(Serialize)]
struct InstanceMediaLimits {
supported_mime_types: [&'static str; 4],
image_size_limit: usize,
}
#[derive(Serialize)]
struct InstanceConfiguration {
statuses: InstanceStatusLimits,
media_attachments: InstanceMediaLimits,
}
#[derive(Serialize)] #[derive(Serialize)]
struct BlockchainFeatures { struct BlockchainFeatures {
gate: bool, gate: bool,
@ -28,6 +53,7 @@ struct BlockchainInfo {
features: BlockchainFeatures, features: BlockchainFeatures,
} }
/// https://docs.joinmastodon.org/entities/V1_Instance/
#[derive(Serialize)] #[derive(Serialize)]
pub struct InstanceInfo { pub struct InstanceInfo {
uri: String, uri: String,
@ -38,6 +64,7 @@ pub struct InstanceInfo {
version: String, version: String,
registrations: bool, registrations: bool,
stats: InstanceStats, stats: InstanceStats,
configuration: InstanceConfiguration,
login_message: String, login_message: String,
post_character_limit: usize, post_character_limit: usize,
@ -116,6 +143,16 @@ impl InstanceInfo {
status_count: post_count, status_count: post_count,
domain_count: peer_count, domain_count: peer_count,
}, },
configuration: InstanceConfiguration {
statuses: InstanceStatusLimits {
max_characters: config.post_character_limit,
max_media_attachments: ATTACHMENTS_MAX_NUM,
},
media_attachments: InstanceMediaLimits {
supported_mime_types: SUPPORTED_MEDIA_TYPES,
image_size_limit: UPLOAD_MAX_SIZE,
},
},
login_message: config.login_message.clone(), login_message: config.login_message.clone(),
post_character_limit: config.post_character_limit, post_character_limit: config.post_character_limit,
blockchains: blockchains, blockchains: blockchains,

View file

@ -11,6 +11,7 @@ use crate::models::{
}; };
use super::types::InstanceInfo; use super::types::InstanceInfo;
/// https://docs.joinmastodon.org/methods/instance/#v1
#[get("")] #[get("")]
async fn instance_view( async fn instance_view(
config: web::Data<Config>, config: web::Data<Config>,