about summary refs log tree commit diff
path: root/kittybox-rs/indieauth
diff options
context:
space:
mode:
authorVika <vika@fireburn.ru>2022-07-22 06:02:46 +0300
committerVika <vika@fireburn.ru>2022-07-22 06:02:46 +0300
commite2bbf451ad2eb6f21f8ec55aafaafa6aa7bd25f4 (patch)
treefcc4d7d865d6ee05000d6c7ab57e094fb4576283 /kittybox-rs/indieauth
parentecdb6c7db16406a20b56e7bb6e73d4c59ee246f1 (diff)
downloadkittybox-e2bbf451ad2eb6f21f8ec55aafaafa6aa7bd25f4.tar.zst
kittybox-indieauth: axum helpers for responses
Some responses need to set Cache-Control and Pragma: no-cache headers according to RFC 6749.
Diffstat (limited to 'kittybox-rs/indieauth')
-rw-r--r--kittybox-rs/indieauth/src/lib.rs40
1 files changed, 40 insertions, 0 deletions
diff --git a/kittybox-rs/indieauth/src/lib.rs b/kittybox-rs/indieauth/src/lib.rs
index cb99146..5896ebb 100644
--- a/kittybox-rs/indieauth/src/lib.rs
+++ b/kittybox-rs/indieauth/src/lib.rs
@@ -85,6 +85,18 @@ pub struct Profile {
     pub email: Option<String>
 }
 
+#[cfg(feature = "axum")]
+impl axum_core::response::IntoResponse for Profile {
+    fn into_response(self) -> axum_core::response::Response {
+        use http::StatusCode;
+
+        (StatusCode::OK,
+         [("Content-Type", "application/json")],
+         serde_json::to_vec(&self).unwrap())
+            .into_response()
+    }
+}
+
 #[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
 pub struct State(String);
 impl State {
@@ -157,6 +169,21 @@ pub enum GrantResponse {
     }
 }
 
+#[cfg(feature = "axum")]
+impl axum_core::response::IntoResponse for GrantResponse {
+    fn into_response(self) -> axum_core::response::Response {
+        use http::StatusCode;
+
+        (StatusCode::OK,
+         [("Content-Type", "application/json"),
+          ("Cache-Control", "no-store"),
+          ("Pragma", "no-cache")
+         ],
+         serde_json::to_vec(&self).unwrap())
+            .into_response()
+    }
+}
+
 /// Describes requests that the authorization endpoint might want to handle.
 ///
 /// This type mostly exists for ease-of-use with serde.
@@ -257,6 +284,19 @@ impl From<TokenIntrospectionResponse> for Option<TokenData> {
     }
 }
 
+#[cfg(feature = "axum")]
+impl axum_core::response::IntoResponse for TokenIntrospectionResponse {
+    fn into_response(self) -> axum_core::response::Response {
+        use http::StatusCode;
+
+        (StatusCode::OK,
+         [("Content-Type", "application/json")],
+         serde_json::to_vec(&self).unwrap())
+            .into_response()
+    }
+}
+
+
 #[derive(Debug, Serialize, Deserialize)]
 pub struct TokenRevocationRequest {
     pub token: String