From 134b64af81c64efe6ddb3fb38f6a36e58863dbcf Mon Sep 17 00:00:00 2001 From: Adam <13720823+Frinksy@users.noreply.github.com> Date: Thu, 8 Apr 2021 18:33:28 +0200 Subject: [PATCH] identity-service-api: Add public key retrieval endpoint --- ruma-identity-service-api/src/keys.rs | 1 + .../src/keys/get_public_key.rs | 3 ++ .../src/keys/get_public_key/v2.rs | 40 +++++++++++++++++++ 3 files changed, 44 insertions(+) create mode 100644 ruma-identity-service-api/src/keys/get_public_key.rs create mode 100644 ruma-identity-service-api/src/keys/get_public_key/v2.rs diff --git a/ruma-identity-service-api/src/keys.rs b/ruma-identity-service-api/src/keys.rs index 50c6751c..9e8c2e6c 100644 --- a/ruma-identity-service-api/src/keys.rs +++ b/ruma-identity-service-api/src/keys.rs @@ -1,3 +1,4 @@ //! Endpoints to retrieve, update, and validate keys with an identity server. pub mod check_public_key_validity; +pub mod get_public_key; diff --git a/ruma-identity-service-api/src/keys/get_public_key.rs b/ruma-identity-service-api/src/keys/get_public_key.rs new file mode 100644 index 00000000..ac4b08a8 --- /dev/null +++ b/ruma-identity-service-api/src/keys/get_public_key.rs @@ -0,0 +1,3 @@ +//! Endpoint to retrieve the public key for a key ID. + +pub mod v2; diff --git a/ruma-identity-service-api/src/keys/get_public_key/v2.rs b/ruma-identity-service-api/src/keys/get_public_key/v2.rs new file mode 100644 index 00000000..9f8036a8 --- /dev/null +++ b/ruma-identity-service-api/src/keys/get_public_key/v2.rs @@ -0,0 +1,40 @@ +//! [GET /_matrix/identity/v2/pubkey/{keyId}](https://matrix.org/docs/spec/identity_service/r0.3.0#get-matrix-identity-v2-pubkey-keyid) + +use ruma_api::ruma_api; +use ruma_identifiers::ServerSigningKeyId; + +ruma_api! { + metadata: { + description: "Get the public key for the given key ID.", + method: GET, + name: "get_public_key", + path: "/_matrix/identity/v2/pubkey/:key_id", + rate_limited: false, + authentication: None, + } + + request: { + /// The ID of the key. + #[ruma_api(path)] + pub key_id: ServerSigningKeyId, + } + + response: { + /// Unpadded Base64 encoded public key. + pub public_key: String, + } +} + +impl Request { + /// Create a `Request` with the given key_id. + pub fn new(key_id: ServerSigningKeyId) -> Self { + Self { key_id } + } +} + +impl Response { + /// Create a `Response` with the given base64-encoded (unpadded) public key. + pub fn new(public_key: String) -> Self { + Self { public_key } + } +}