From 86e32680792cdaaecde8e52f1cb3b319f22b54c4 Mon Sep 17 00:00:00 2001 From: Adam <13720823+Frinksy@users.noreply.github.com> Date: Sat, 3 Apr 2021 18:58:20 +0200 Subject: [PATCH] identity-service-api: Add terms of service retrieval endpoint --- ruma-identity-service-api/src/lib.rs | 1 + ruma-identity-service-api/src/tos.rs | 3 + .../src/tos/get_terms_of_service.rs | 3 + .../src/tos/get_terms_of_service/v2.rs | 73 +++++++++++++++++++ 4 files changed, 80 insertions(+) create mode 100644 ruma-identity-service-api/src/tos.rs create mode 100644 ruma-identity-service-api/src/tos/get_terms_of_service.rs create mode 100644 ruma-identity-service-api/src/tos/get_terms_of_service/v2.rs diff --git a/ruma-identity-service-api/src/lib.rs b/ruma-identity-service-api/src/lib.rs index 2f36fbb1..b5d734c4 100644 --- a/ruma-identity-service-api/src/lib.rs +++ b/ruma-identity-service-api/src/lib.rs @@ -1,3 +1,4 @@ pub mod authentication; pub mod keys; pub mod status; +pub mod tos; diff --git a/ruma-identity-service-api/src/tos.rs b/ruma-identity-service-api/src/tos.rs new file mode 100644 index 00000000..39de263f --- /dev/null +++ b/ruma-identity-service-api/src/tos.rs @@ -0,0 +1,3 @@ +//! Endpoints to retreive and accept terms of service of an identity server. + +pub mod get_terms_of_service; diff --git a/ruma-identity-service-api/src/tos/get_terms_of_service.rs b/ruma-identity-service-api/src/tos/get_terms_of_service.rs new file mode 100644 index 00000000..62895710 --- /dev/null +++ b/ruma-identity-service-api/src/tos/get_terms_of_service.rs @@ -0,0 +1,3 @@ +//! Endpoint to retrieve the terms of service of an identity server. + +pub mod v2; diff --git a/ruma-identity-service-api/src/tos/get_terms_of_service/v2.rs b/ruma-identity-service-api/src/tos/get_terms_of_service/v2.rs new file mode 100644 index 00000000..add52d3e --- /dev/null +++ b/ruma-identity-service-api/src/tos/get_terms_of_service/v2.rs @@ -0,0 +1,73 @@ +//! [GET /_matrix/identity/v2/terms](https://matrix.org/docs/spec/identity_service/r0.3.0#get-matrix-identity-v2-terms) + +use std::collections::BTreeMap; + +use ruma_api::ruma_api; +use serde::{Deserialize, Serialize}; + +ruma_api! { + metadata: { + description: "Gets all the terms of service offered by the server.", + method: GET, + name: "get_terms_of_service", + path: "/_matrix/identity/v2/terms", + authentication: None, + rate_limited: false, + } + + #[derive(Default)] + request: {} + + response: { + /// The policies the server offers. + /// + /// Mapped from arbitrary ID (unused in this version of the specification) to a Policy Object. + pub policies: BTreeMap + } +} + +impl Request { + /// Creates an empty `Request`. + pub fn new() -> Self { + Self + } +} + +impl Response { + /// Creates a new `Response` with the given `Policies`. + pub fn new(policies: BTreeMap) -> Self { + Self { policies } + } +} + +/// Collection of localized policies. +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct Policies { + /// The version for the policy. + /// + /// There are no requirements on what this might be and could be + /// "alpha", semantically versioned, or arbitrary. + pub version: String, + + /// Available languages for the policy. + /// + /// The keys could be the language code corresponding to + /// the given `LocalizedPolicy`, for example "en" or "fr". + #[serde(flatten)] + pub localized: BTreeMap, +} + +/// A localized policy offered by a server. +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct LocalizedPolicy { + /// The localized name of the policy. + /// + /// Examples are "Terms of Service", "Conditions d'utilisation". + pub name: String, + + /// The URL at wich the policy is available. + /// + /// Examples are "https://example.org/somewhere/terms-2.0-en.html" + /// and "https://example.org/somewhere/terms-2.0-fr.html". + pub url: String, +}