Added some ratelimiting middleware

This commit is contained in:
Slatian
2023-02-25 12:14:50 +01:00
parent 9f3b6d0c17
commit a48050b234
8 changed files with 307 additions and 18 deletions

View File

@ -33,6 +33,7 @@ use std::path::Path;
mod config;
mod geoip;
mod ipinfo;
mod ratelimit;
mod simple_dns;
mod templating_engine;
mod idna;
@ -85,6 +86,7 @@ pub struct DigResult {
partial_lookup: bool,
}
struct ServiceSharedState {
templating_engine: templating_engine::Engine,
dns_resolver: TokioAsyncResolver,
@ -110,7 +112,6 @@ fn match_domain_hidden_list(domain: &String, hidden_list: &Vec<String>) -> bool
let name = domain.trim_end_matches(".");
for suffix in hidden_list {
if name.ends_with(suffix) {
println!("Blocked {name}");
return true;
}
}
@ -185,6 +186,9 @@ async fn main() {
template_config: template_extra_config,
};
// Initalize Rate Limiter
// Initalize GeoIP Database
let mut asn_db = geoip::MMDBCarrier {
@ -243,9 +247,12 @@ async fn main() {
.with_state(shared_state)
.layer(
ServiceBuilder::new()
.layer(ip_header.into_extension())
.layer(Extension(config))
.layer(middleware::from_fn(format_and_language_middleware))
.layer(ip_header.into_extension())
.layer(ratelimit::build_rate_limiting_state(
config.ratelimit.per_minute, config.ratelimit.burst))
.layer(middleware::from_fn(ratelimit::rate_limit_middleware))
.layer(Extension(config))
.layer(middleware::from_fn(format_and_language_middleware))
)
;
@ -257,6 +264,7 @@ async fn main() {
.unwrap();
}
async fn format_and_language_middleware<B>(
Query(query): Query<SettingsQuery>,
Extension(config): Extension<config::EchoIpServiceConfig>,