1pub mod echo;
9pub mod fs;
10pub mod geo;
11pub mod http_security;
12pub mod ip;
13
14use crate::{
15 cli::ForwardKind,
16 combinators::Either7,
17 http::{
18 headers::forwarded::{
19 CFConnectingIp, ClientIp, TrueClientIp, XClientIp, XForwardedFor, XRealIp,
20 },
21 layer::forwarded::GetForwardedHeaderLayer,
22 },
23};
24
25type HttpForwardedLayer = Option<
30 Either7<
31 GetForwardedHeaderLayer,
32 GetForwardedHeaderLayer<XForwardedFor>,
33 GetForwardedHeaderLayer<XClientIp>,
34 GetForwardedHeaderLayer<ClientIp>,
35 GetForwardedHeaderLayer<XRealIp>,
36 GetForwardedHeaderLayer<CFConnectingIp>,
37 GetForwardedHeaderLayer<TrueClientIp>,
38 >,
39>;
40
41pub(super) fn http_forwarded_layer(forward: Option<&ForwardKind>) -> HttpForwardedLayer {
44 match forward {
45 None | Some(ForwardKind::HaProxy) => None,
46 Some(ForwardKind::Forwarded) => Some(Either7::A(GetForwardedHeaderLayer::forwarded())),
47 Some(ForwardKind::XForwardedFor) => {
48 Some(Either7::B(GetForwardedHeaderLayer::x_forwarded_for()))
49 }
50 Some(ForwardKind::XClientIp) => {
51 Some(Either7::C(GetForwardedHeaderLayer::<XClientIp>::new()))
52 }
53 Some(ForwardKind::ClientIp) => Some(Either7::D(GetForwardedHeaderLayer::<ClientIp>::new())),
54 Some(ForwardKind::XRealIp) => Some(Either7::E(GetForwardedHeaderLayer::<XRealIp>::new())),
55 Some(ForwardKind::CFConnectingIp) => {
56 Some(Either7::F(GetForwardedHeaderLayer::<CFConnectingIp>::new()))
57 }
58 Some(ForwardKind::TrueClientIp) => {
59 Some(Either7::G(GetForwardedHeaderLayer::<TrueClientIp>::new()))
60 }
61 }
62}