axum_security/headers/
mod.rs1mod hsts;
3
4pub use hsts::{StrictTransportSecurity, StrictTransportSecurityBuilderError};
5
6#[macro_export]
7macro_rules! define_header {
8 (
9 $struct_name:ident($header_name:ident = $header_value:literal),
10 $($const_name:ident => $value:literal),+ $(,)?
11 ) => {
12 const $header_name: ::http::HeaderName = ::http::HeaderName::from_static($header_value);
13
14
15 #[derive(Clone)]
16 pub struct $struct_name {
17 header_value: ::http::HeaderValue,
18 }
19
20 impl $struct_name {
21 $(
22 pub const $const_name: $struct_name = Self {
23 header_value: ::http::HeaderValue::from_static($value),
24 };
25 )+
26 }
27
28 impl<S> tower::Layer<S> for $struct_name {
29 type Service = crate::utils::headers::InsertHeadersService<S>;
30
31 fn layer(&self, inner: S) -> Self::Service {
32 crate::utils::headers::InsertHeadersService {
33 header_name: $header_name,
34 header_value: self.header_value.clone(),
35 inner,
36 }
37 }
38 }
39 };
40}
41
42define_header!(
43 CrossOriginEmbedderPolicy(CROSS_ORIGIN_EMBEDDER_POLICY = "cross-origin-embedder-policy"),
44 UNSAFE_NONE => "unsafe-none",
45 REQUIRE_CORP => "require-corp",
46 CREDENTIALLESS => "credentialless",
47);
48
49define_header!(
50 CrossOriginOpenerPolicy(CROSS_ORIGIN_OPENER_POLICY = "cross-origin-opener-policy"),
51 UNSAFE_NONE => "unsafe-none",
52 SAME_ORIGIN_ALLOW_POPUPS => "same-origin-allow-popups",
53 SAME_ORIGIN => "same-origin",
54 NOOPENER_ALLOW_POPUPS => "noopener-allow-popups"
55);
56
57define_header!(
58 CrossOriginResourcePolicy(CROSS_ORIGIN_RESOURCE_POLICY = "cross-origin-resource-policy"),
59 SAME_SITE => "same-site",
60 SAME_ORIGIN => "same-origin",
61 CROSS_ORIGIN => "cross-origin",
62);
63
64define_header!(
65 OriginAgentCluster(ORIGIN_AGENT_CLUSTER = "origin-agent-cluster"),
66 ON => "?1",
67 OFF => "?0",
68);
69
70define_header!(
71 ReferrerPolicy(REFERRER_POLICY = "referer-policy"),
72 NO_REFERRER => "no-referrer",
73 NO_REFERRER_WHEN_DOWNGRADE => "no-referrer-when-downgrade",
74 ORIGIN => "origin",
75 ORIGIN_WHEN_CROSS_ORIGIN => "origin-when-cross-origin",
76 SAME_ORIGIN => "same-origin",
77 STRICT_ORIGIN => "strict-origin",
78 STRICT_ORIGIN_WHEN_CROSS_ORIGIN => "strict-origin-when-cross-origin",
79 UNSAFE_URL => "unsafe-url",
80);
81
82define_header!(
83 ContentTypeOptions(X_CONTENT_TYPE_OPTIONS = "x-content-type-options"),
84 NO_SNIFF => "nosniff"
85);
86
87define_header!(
88 DnsPrefetchControl(X_DNS_PREFETCH_CONTROL = "x-dns-prefetch-control"),
89 ON => "ON",
90 OFF => "OFF",
91);
92
93define_header!(
94 FrameOptions(X_FRAME_OPTIONS= "x-frame-options"),
95 DENY => "DENY",
96 SAMEORIGIN => "SAMEORIGIN",
97);