mirror of
https://forgejo.ellis.link/continuwuation/continuwuity.git
synced 2025-07-05 22:35:47 +02:00
Still to do: - Handling the difference between content that we have deleted and content we never received - Deleting the original content on command or expiry Another question is if we have to store the full original content? Can we get by with just storing the 'content' field?
88 lines
4.1 KiB
Rust
88 lines
4.1 KiB
Rust
use std::collections::BTreeMap;
|
|
|
|
use axum::{Json, extract::State, response::IntoResponse};
|
|
use conduwuit::Result;
|
|
use futures::StreamExt;
|
|
use ruma::api::client::discovery::get_supported_versions;
|
|
|
|
use crate::Ruma;
|
|
|
|
/// # `GET /_matrix/client/versions`
|
|
///
|
|
/// Get the versions of the specification and unstable features supported by
|
|
/// this server.
|
|
///
|
|
/// - Versions take the form MAJOR.MINOR.PATCH
|
|
/// - Only the latest PATCH release will be reported for each MAJOR.MINOR value
|
|
/// - Unstable features are namespaced and may include version information in
|
|
/// their name
|
|
///
|
|
/// Note: Unstable features are used while developing new features. Clients
|
|
/// should avoid using unstable features in their stable releases
|
|
pub(crate) async fn get_supported_versions_route(
|
|
_body: Ruma<get_supported_versions::Request>,
|
|
) -> Result<get_supported_versions::Response> {
|
|
let resp = get_supported_versions::Response {
|
|
versions: vec![
|
|
"r0.0.1".to_owned(),
|
|
"r0.1.0".to_owned(),
|
|
"r0.2.0".to_owned(),
|
|
"r0.3.0".to_owned(),
|
|
"r0.4.0".to_owned(),
|
|
"r0.5.0".to_owned(),
|
|
"r0.6.0".to_owned(),
|
|
"r0.6.1".to_owned(),
|
|
"v1.1".to_owned(),
|
|
"v1.2".to_owned(),
|
|
"v1.3".to_owned(),
|
|
"v1.4".to_owned(),
|
|
"v1.5".to_owned(),
|
|
"v1.11".to_owned(),
|
|
],
|
|
unstable_features: BTreeMap::from_iter([
|
|
("fi.mau.msc2815".to_owned(), true),
|
|
("org.matrix.e2e_cross_signing".to_owned(), true),
|
|
("org.matrix.msc2285.stable".to_owned(), true), /* private read receipts (https://github.com/matrix-org/matrix-spec-proposals/pull/2285) */
|
|
("uk.half-shot.msc2666.query_mutual_rooms".to_owned(), true), /* query mutual rooms (https://github.com/matrix-org/matrix-spec-proposals/pull/2666) */
|
|
("org.matrix.msc2836".to_owned(), true), /* threading/threads (https://github.com/matrix-org/matrix-spec-proposals/pull/2836) */
|
|
("org.matrix.msc2946".to_owned(), true), /* spaces/hierarchy summaries (https://github.com/matrix-org/matrix-spec-proposals/pull/2946) */
|
|
("org.matrix.msc3026.busy_presence".to_owned(), true), /* busy presence status (https://github.com/matrix-org/matrix-spec-proposals/pull/3026) */
|
|
("org.matrix.msc3827".to_owned(), true), /* filtering of /publicRooms by room type (https://github.com/matrix-org/matrix-spec-proposals/pull/3827) */
|
|
("org.matrix.msc3952_intentional_mentions".to_owned(), true), /* intentional mentions (https://github.com/matrix-org/matrix-spec-proposals/pull/3952) */
|
|
("org.matrix.msc3575".to_owned(), true), /* sliding sync (https://github.com/matrix-org/matrix-spec-proposals/pull/3575/files#r1588877046) */
|
|
("org.matrix.msc3916.stable".to_owned(), true), /* authenticated media (https://github.com/matrix-org/matrix-spec-proposals/pull/3916) */
|
|
("org.matrix.msc4180".to_owned(), true), /* stable flag for 3916 (https://github.com/matrix-org/matrix-spec-proposals/pull/4180) */
|
|
("uk.tcpip.msc4133".to_owned(), true), /* Extending User Profile API with Key:Value Pairs (https://github.com/matrix-org/matrix-spec-proposals/pull/4133) */
|
|
("us.cloke.msc4175".to_owned(), true), /* Profile field for user time zone (https://github.com/matrix-org/matrix-spec-proposals/pull/4175) */
|
|
("org.matrix.simplified_msc3575".to_owned(), true), /* Simplified Sliding sync (https://github.com/matrix-org/matrix-spec-proposals/pull/4186) */
|
|
]),
|
|
};
|
|
|
|
Ok(resp)
|
|
}
|
|
|
|
/// # `GET /_conduwuit/server_version`
|
|
///
|
|
/// Conduwuit-specific API to get the server version, results akin to
|
|
/// `/_matrix/federation/v1/version`
|
|
pub(crate) async fn conduwuit_server_version() -> Result<impl IntoResponse> {
|
|
Ok(Json(serde_json::json!({
|
|
"name": conduwuit::version::name(),
|
|
"version": conduwuit::version::version(),
|
|
})))
|
|
}
|
|
|
|
/// # `GET /_conduwuit/local_user_count`
|
|
///
|
|
/// conduwuit-specific API to return the amount of users registered on this
|
|
/// homeserver. Endpoint is disabled if federation is disabled for privacy. This
|
|
/// only includes active users (not deactivated, no guests, etc)
|
|
pub(crate) async fn conduwuit_local_user_count(
|
|
State(services): State<crate::State>,
|
|
) -> Result<impl IntoResponse> {
|
|
let user_count = services.users.list_local_users().count().await;
|
|
|
|
Ok(Json(serde_json::json!({
|
|
"count": user_count
|
|
})))
|
|
}
|