Skip to content

Commit 1b5d4f2

Browse files
authored
Merge pull request #217 from http-rs/timing-allow-origin-sec
Move TimingAllowOrigin to security submodule
2 parents b59d11f + 2f3d1c7 commit 1b5d4f2

File tree

3 files changed

+58
-54
lines changed

3 files changed

+58
-54
lines changed

src/security/mod.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
//! HTTP Security Headers.
22
//!
3-
//! ## Example
3+
//! # Specifications
4+
//!
5+
//! - [W3C Timing-Allow-Origin header](https://w3c.github.io/resource-timing/#sec-timing-allow-origin)
6+
//!
7+
//! # Example
48
//!
59
//! ```
610
//! use http_types::{StatusCode, Response};
@@ -12,9 +16,13 @@
1216
//! ```
1317
1418
use crate::headers::{HeaderName, HeaderValue, Headers};
15-
pub use csp::{ContentSecurityPolicy, ReportTo, ReportToEndpoint, Source};
1619

1720
mod csp;
21+
mod timing_allow_origin;
22+
23+
pub use csp::{ContentSecurityPolicy, ReportTo, ReportToEndpoint, Source};
24+
#[doc(inline)]
25+
pub use timing_allow_origin::{TimingAllowOrigin, TimingOrigin};
1826

1927
/// Apply a set of default protections.
2028
///

src/trace/allow_origin.rs renamed to src/security/timing_allow_origin.rs

Lines changed: 48 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,17 @@
1111
//! # fn main() -> http_types::Result<()> {
1212
//! #
1313
//! use http_types::Response;
14-
//! use http_types::trace::{AllowOrigin, Origin};
14+
//! use http_types::security::{TimingAllowOrigin, TimingOrigin};
1515
//!
16-
//! let mut origins = AllowOrigin::new();
17-
//! origins.push(Origin::Wildcard);
16+
//! let mut origins = TimingAllowOrigin::new();
17+
//! origins.push(TimingOrigin::Wildcard);
1818
//!
1919
//! let mut res = Response::new(200);
2020
//! origins.apply(&mut res);
2121
//!
22-
//! let origins = AllowOrigin::from_headers(res)?.unwrap();
22+
//! let origins = TimingAllowOrigin::from_headers(res)?.unwrap();
2323
//! let origin = origins.iter().next().unwrap();
24-
//! assert_eq!(origin, &Origin::Wildcard);
24+
//! assert_eq!(origin, &TimingOrigin::Wildcard);
2525
//! #
2626
//! # Ok(()) }
2727
//! ```
@@ -43,26 +43,26 @@ use std::slice;
4343
/// # fn main() -> http_types::Result<()> {
4444
/// #
4545
/// use http_types::Response;
46-
/// use http_types::trace::{AllowOrigin, Origin};
46+
/// use http_types::security::{TimingAllowOrigin, TimingOrigin};
4747
///
48-
/// let mut origins = AllowOrigin::new();
49-
/// origins.push(Origin::Wildcard);
48+
/// let mut origins = TimingAllowOrigin::new();
49+
/// origins.push(TimingOrigin::Wildcard);
5050
///
5151
/// let mut res = Response::new(200);
5252
/// origins.apply(&mut res);
5353
///
54-
/// let origins = AllowOrigin::from_headers(res)?.unwrap();
54+
/// let origins = TimingAllowOrigin::from_headers(res)?.unwrap();
5555
/// let origin = origins.iter().next().unwrap();
56-
/// assert_eq!(origin, &Origin::Wildcard);
56+
/// assert_eq!(origin, &TimingOrigin::Wildcard);
5757
/// #
5858
/// # Ok(()) }
5959
/// ```
6060
#[derive(Clone, Eq, PartialEq)]
61-
pub struct AllowOrigin {
62-
origins: Vec<Origin>,
61+
pub struct TimingAllowOrigin {
62+
origins: Vec<TimingOrigin>,
6363
}
6464

65-
impl AllowOrigin {
65+
impl TimingAllowOrigin {
6666
/// Create a new instance of `AllowOrigin`.
6767
pub fn new() -> Self {
6868
Self { origins: vec![] }
@@ -83,11 +83,11 @@ impl AllowOrigin {
8383
for header in headers {
8484
for origin in header.as_str().split(',') {
8585
match origin.trim_start() {
86-
"*" => origins.push(Origin::Wildcard),
86+
"*" => origins.push(TimingOrigin::Wildcard),
8787
r#""null""# => continue,
8888
origin => {
8989
let url = Url::parse(origin).status(400)?;
90-
origins.push(Origin::Url(url));
90+
origins.push(TimingOrigin::Url(url));
9191
}
9292
}
9393
}
@@ -97,7 +97,7 @@ impl AllowOrigin {
9797
}
9898

9999
/// Append an origin to the list of origins.
100-
pub fn push(&mut self, origin: impl Into<Origin>) {
100+
pub fn push(&mut self, origin: impl Into<TimingOrigin>) {
101101
self.origins.push(origin.into());
102102
}
103103

@@ -141,8 +141,8 @@ impl AllowOrigin {
141141
}
142142
}
143143

144-
impl IntoIterator for AllowOrigin {
145-
type Item = Origin;
144+
impl IntoIterator for TimingAllowOrigin {
145+
type Item = TimingOrigin;
146146
type IntoIter = IntoIter;
147147

148148
#[inline]
@@ -153,8 +153,8 @@ impl IntoIterator for AllowOrigin {
153153
}
154154
}
155155

156-
impl<'a> IntoIterator for &'a AllowOrigin {
157-
type Item = &'a Origin;
156+
impl<'a> IntoIterator for &'a TimingAllowOrigin {
157+
type Item = &'a TimingOrigin;
158158
type IntoIter = Iter<'a>;
159159

160160
// #[inline]serv
@@ -163,8 +163,8 @@ impl<'a> IntoIterator for &'a AllowOrigin {
163163
}
164164
}
165165

166-
impl<'a> IntoIterator for &'a mut AllowOrigin {
167-
type Item = &'a mut Origin;
166+
impl<'a> IntoIterator for &'a mut TimingAllowOrigin {
167+
type Item = &'a mut TimingOrigin;
168168
type IntoIter = IterMut<'a>;
169169

170170
#[inline]
@@ -176,11 +176,11 @@ impl<'a> IntoIterator for &'a mut AllowOrigin {
176176
/// A borrowing iterator over entries in `AllowOrigin`.
177177
#[derive(Debug)]
178178
pub struct IntoIter {
179-
inner: std::vec::IntoIter<Origin>,
179+
inner: std::vec::IntoIter<TimingOrigin>,
180180
}
181181

182182
impl Iterator for IntoIter {
183-
type Item = Origin;
183+
type Item = TimingOrigin;
184184

185185
fn next(&mut self) -> Option<Self::Item> {
186186
self.inner.next()
@@ -195,11 +195,11 @@ impl Iterator for IntoIter {
195195
/// A lending iterator over entries in `AllowOrigin`.
196196
#[derive(Debug)]
197197
pub struct Iter<'a> {
198-
inner: slice::Iter<'a, Origin>,
198+
inner: slice::Iter<'a, TimingOrigin>,
199199
}
200200

201201
impl<'a> Iterator for Iter<'a> {
202-
type Item = &'a Origin;
202+
type Item = &'a TimingOrigin;
203203

204204
fn next(&mut self) -> Option<Self::Item> {
205205
self.inner.next()
@@ -214,11 +214,11 @@ impl<'a> Iterator for Iter<'a> {
214214
/// A mutable iterator over entries in `AllowOrigin`.
215215
#[derive(Debug)]
216216
pub struct IterMut<'a> {
217-
inner: slice::IterMut<'a, Origin>,
217+
inner: slice::IterMut<'a, TimingOrigin>,
218218
}
219219

220220
impl<'a> Iterator for IterMut<'a> {
221-
type Item = &'a mut Origin;
221+
type Item = &'a mut TimingOrigin;
222222

223223
fn next(&mut self) -> Option<Self::Item> {
224224
self.inner.next()
@@ -231,14 +231,14 @@ impl<'a> Iterator for IterMut<'a> {
231231
}
232232

233233
// Conversion from `AllowOrigin` -> `HeaderValue`.
234-
impl ToHeaderValues for AllowOrigin {
234+
impl ToHeaderValues for TimingAllowOrigin {
235235
type Iter = option::IntoIter<HeaderValue>;
236236
fn to_header_values(&self) -> crate::Result<Self::Iter> {
237237
Ok(self.value().to_header_values().unwrap())
238238
}
239239
}
240240

241-
impl Debug for AllowOrigin {
241+
impl Debug for TimingAllowOrigin {
242242
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
243243
let mut list = f.debug_list();
244244
for origin in &self.origins {
@@ -255,27 +255,27 @@ impl Debug for AllowOrigin {
255255
// NOTE: this origin is different than the origin in the fetch spec. It needs to
256256
// be its own type.
257257
#[derive(Debug, Clone, Eq, PartialEq)]
258-
pub enum Origin {
258+
pub enum TimingOrigin {
259259
/// An origin URL.
260260
Url(Url),
261261
/// Allow all origins.
262262
Wildcard,
263263
}
264264

265-
impl From<Url> for Origin {
265+
impl From<Url> for TimingOrigin {
266266
fn from(url: Url) -> Self {
267-
Origin::Url(url)
267+
TimingOrigin::Url(url)
268268
}
269269
}
270270

271-
impl From<Origin> for HeaderValue {
272-
fn from(entry: Origin) -> HeaderValue {
271+
impl From<TimingOrigin> for HeaderValue {
272+
fn from(entry: TimingOrigin) -> HeaderValue {
273273
unsafe {
274274
match entry {
275-
Origin::Url(url) => {
275+
TimingOrigin::Url(url) => {
276276
HeaderValue::from_bytes_unchecked(format!("{}", url).into_bytes())
277277
}
278-
Origin::Wildcard => {
278+
TimingOrigin::Wildcard => {
279279
HeaderValue::from_bytes_unchecked(String::from("*").into_bytes())
280280
}
281281
}
@@ -290,43 +290,43 @@ mod test {
290290

291291
#[test]
292292
fn smoke() -> crate::Result<()> {
293-
let mut origins = AllowOrigin::new();
294-
origins.push(Origin::Wildcard);
293+
let mut origins = TimingAllowOrigin::new();
294+
origins.push(TimingOrigin::Wildcard);
295295

296296
let mut headers = Headers::new();
297297
origins.apply(&mut headers);
298298

299-
let origins = AllowOrigin::from_headers(headers)?.unwrap();
299+
let origins = TimingAllowOrigin::from_headers(headers)?.unwrap();
300300
let origin = origins.iter().next().unwrap();
301-
assert_eq!(origin, &Origin::Wildcard);
301+
assert_eq!(origin, &TimingOrigin::Wildcard);
302302
Ok(())
303303
}
304304

305305
#[test]
306306
fn multi() -> crate::Result<()> {
307-
let mut origins = AllowOrigin::new();
308-
origins.push(Origin::Wildcard);
309-
origins.push(Origin::Url(Url::parse("https://mozilla.org/")?));
307+
let mut origins = TimingAllowOrigin::new();
308+
origins.push(TimingOrigin::Wildcard);
309+
origins.push(TimingOrigin::Url(Url::parse("https://mozilla.org/")?));
310310

311311
let mut headers = Headers::new();
312312
origins.apply(&mut headers);
313313

314-
let origins = AllowOrigin::from_headers(headers)?.unwrap();
314+
let origins = TimingAllowOrigin::from_headers(headers)?.unwrap();
315315
let mut origins = origins.iter();
316316
let origin = origins.next().unwrap();
317-
assert!(matches!(origin, Origin::Wildcard));
317+
assert!(matches!(origin, TimingOrigin::Wildcard));
318318

319319
let origin = origins.next().unwrap();
320320
let rhs = Url::parse("https://mozilla.org/")?;
321-
assert_eq!(origin, &Origin::Url(rhs));
321+
assert_eq!(origin, &TimingOrigin::Url(rhs));
322322
Ok(())
323323
}
324324

325325
#[test]
326326
fn bad_request_on_parse_error() -> crate::Result<()> {
327327
let mut headers = Headers::new();
328328
headers.insert(TIMING_ALLOW_ORIGIN, "server; <nori ate your param omnom>");
329-
let err = AllowOrigin::from_headers(headers).unwrap_err();
329+
let err = TimingAllowOrigin::from_headers(headers).unwrap_err();
330330
assert_eq!(err.status(), 400);
331331
Ok(())
332332
}

src/trace/mod.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,10 @@
88
//!
99
//! - [W3C Trace-Context header](https://w3c.github.io/trace-context/)
1010
//! - [W3C Server-Timing header](https://w3c.github.io/server-timing/#the-server-timing-header-field)
11-
//! - [W3C Timing-Allow-Origin header](https://w3c.github.io/resource-timing/#sec-timing-allow-origin)
1211
13-
pub mod allow_origin;
1412
pub mod server_timing;
1513
mod trace_context;
1614

17-
#[doc(inline)]
18-
pub use allow_origin::{AllowOrigin, Origin};
1915
#[doc(inline)]
2016
pub use server_timing::{Metric, ServerTiming};
2117
pub use trace_context::TraceContext;

0 commit comments

Comments
 (0)