Add ratelimiting example

Was really supposed to add this earlier but I forgot about it.  Oops
This commit is contained in:
Emi Tatsuo 2020-11-21 17:20:32 -05:00
parent 349f6da698
commit d5f213b270
Signed by: Emi
GPG Key ID: 68FAB2E2E6DFC98B
1 changed files with 39 additions and 0 deletions

39
examples/ratelimits.rs Normal file
View File

@ -0,0 +1,39 @@
use anyhow::*;
use futures_core::future::BoxFuture;
use futures_util::FutureExt;
use log::LevelFilter;
use northstar::{Server, Request, Response, GEMINI_PORT, Document};
#[tokio::main]
async fn main() -> Result<()> {
env_logger::builder()
.filter_module("northstar", LevelFilter::Debug)
.init();
let two = std::num::NonZeroU32::new(2).unwrap();
Server::bind(("localhost", GEMINI_PORT))
.add_route("/", handle_request)
.rate_limit("/limit", northstar::Quota::per_minute(two))
.serve()
.await
}
fn handle_request(request: Request) -> BoxFuture<'static, Result<Response>> {
async move {
let mut document = Document::new();
if let Some("limit") = request.trailing_segments().get(0).map(String::as_str) {
document.add_text("You're on a rate limited page!")
.add_text("You can only access this page twice per minute");
} else {
document.add_text("You're on a normal page!")
.add_text("You can access this page as much as you like.");
}
document.add_blank_line()
.add_link("/limit", "Go to rate limited page")
.add_link("/", "Go to a page that's not rate limited");
Ok(Response::document(document))
}
.boxed()
}