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