wisegate-core 0.10.0

Core library for WiseGate reverse proxy - rate limiting, IP filtering, and request handling
Documentation

WiseGate Core - Reusable reverse proxy components

This crate provides the core functionality for building reverse proxies with:

  • Rate limiting with sliding window algorithm
  • IP filtering and blocking
  • HTTP method and URL pattern filtering
  • Trusted proxy validation (RFC 7239 compliant)

Overview

wisegate-core is designed to be framework-agnostic and can be integrated into any Rust application. Configuration is provided via the [ConfigProvider] trait, allowing flexible configuration from any source.

Example

use wisegate_core::{
    RateLimitingProvider, ProxyProvider, FilteringProvider, ConnectionProvider,
    AuthenticationProvider, Credentials,
    RateLimiter, RateLimitConfig, RateLimitCleanupConfig, ProxyConfig,
};
use std::time::Duration;

// Implement your own configuration provider using composable traits
struct MyConfig {
    credentials: Credentials,
}

impl RateLimitingProvider for MyConfig {
    fn rate_limit_config(&self) -> &RateLimitConfig {
        static CONFIG: RateLimitConfig = RateLimitConfig {
            max_requests: 100,
            window_duration: Duration::from_secs(60),
        };
        &CONFIG
    }

    fn rate_limit_cleanup_config(&self) -> &RateLimitCleanupConfig {
        static CONFIG: RateLimitCleanupConfig = RateLimitCleanupConfig {
            threshold: 10_000,
            interval: Duration::from_secs(60),
        };
        &CONFIG
    }
}

impl ProxyProvider for MyConfig {
    fn proxy_config(&self) -> &ProxyConfig {
        static CONFIG: ProxyConfig = ProxyConfig {
            timeout: Duration::from_secs(30),
            max_body_size: 100 * 1024 * 1024,
        };
        &CONFIG
    }

    fn allowed_proxy_ips(&self) -> Option<&[String]> { None }
}

impl FilteringProvider for MyConfig {
    fn blocked_ips(&self) -> &[String] { &[] }
    fn blocked_methods(&self) -> &[String] { &[] }
    fn blocked_patterns(&self) -> &[String] { &[] }
}

impl ConnectionProvider for MyConfig {
    fn max_connections(&self) -> usize { 10_000 }
}

impl AuthenticationProvider for MyConfig {
    fn auth_credentials(&self) -> &Credentials { &self.credentials }
    fn auth_realm(&self) -> &str { "WiseGate" }
    fn bearer_token(&self) -> Option<&str> { None }
}

// Create a rate limiter
let limiter = RateLimiter::new();

Modules

  • [types] - Core types and the [ConfigProvider] trait
  • [error] - Error types and result aliases
  • [headers] - HTTP header constants
  • [ip_filter] - IP validation, extraction, and filtering
  • [rate_limiter] - Rate limiting implementation
  • [request_handler] - HTTP request processing and forwarding