summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBryan Newbold <bnewbold@robocracy.org>2018-05-15 10:34:16 -0700
committerBryan Newbold <bnewbold@robocracy.org>2018-05-15 10:34:18 -0700
commit0319c8f531139c2b4c49570a499894d7200760f5 (patch)
treee52a43ca477ea2701f541e42b67a455a1b98daf0
parent4c90242579c1e673ae47d63786503370c512f148 (diff)
downloadfatcat-0319c8f531139c2b4c49570a499894d7200760f5.tar.gz
fatcat-0319c8f531139c2b4c49570a499894d7200760f5.zip
implement HTTP header middleware
getting more familar with iron
-rw-r--r--rust/src/bin/fatcat-iron.rs8
-rw-r--r--rust/src/lib.rs21
2 files changed, 22 insertions, 7 deletions
diff --git a/rust/src/bin/fatcat-iron.rs b/rust/src/bin/fatcat-iron.rs
index eed98b1d..0bed0fa2 100644
--- a/rust/src/bin/fatcat-iron.rs
+++ b/rust/src/bin/fatcat-iron.rs
@@ -8,10 +8,8 @@ extern crate futures;
extern crate iron;
extern crate iron_slog;
extern crate swagger;
-#[macro_use]
-extern crate error_chain;
-#[macro_use]
-extern crate slog;
+#[macro_use] extern crate error_chain;
+#[macro_use] extern crate slog;
extern crate slog_term;
extern crate slog_async;
@@ -50,6 +48,8 @@ fn main() {
// for the purpose of this example, pretend we have authenticated a user
chain.link_before(AllowAllMiddleware::new("cosmo"));
+ chain.link_after(fatcat::XClacksOverheadMiddleware);
+
if matches.is_present("https") {
unimplemented!()
} else {
diff --git a/rust/src/lib.rs b/rust/src/lib.rs
index fbff6ab2..55040f0c 100644
--- a/rust/src/lib.rs
+++ b/rust/src/lib.rs
@@ -4,10 +4,10 @@ extern crate chrono;
extern crate diesel;
extern crate dotenv;
extern crate futures;
-extern crate hyper;
+#[macro_use] extern crate hyper;
extern crate swagger;
-#[macro_use]
-extern crate error_chain;
+#[macro_use] extern crate error_chain;
+extern crate iron;
pub mod api_server;
@@ -20,6 +20,9 @@ use diesel::pg::PgConnection;
use diesel::prelude::*;
use dotenv::dotenv;
use std::env;
+use hyper::header::Headers;
+use iron::{Request, Response};
+use iron::middleware::AfterMiddleware;
pub fn establish_connection() -> PgConnection {
dotenv().ok();
@@ -32,3 +35,15 @@ pub fn establish_connection() -> PgConnection {
pub fn server() -> Result<api_server::Server> {
Ok(api_server::Server {})
}
+
+/// HTTP header middleware
+header! { (XClacksOverhead, "X-Clacks-Overhead") => [String] }
+
+pub struct XClacksOverheadMiddleware;
+
+impl AfterMiddleware for XClacksOverheadMiddleware {
+ fn after(&self, _req: &mut Request, mut res: Response) -> iron::IronResult<Response> {
+ res.headers.set(XClacksOverhead("GNU aaronsw, jpb".to_owned()));
+ Ok(res)
+ }
+}