Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Upgrade time to 0.2.5 #1254

Merged
merged 37 commits into from
Jan 28, 2020
Merged
Show file tree
Hide file tree
Changes from 16 commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
ebe92a0
Upgrade `time` to 0.2.1
kevinpoitra Jan 4, 2020
729004a
Use `OffsetDateTime` instead of `PrimitiveDateTime`
kevinpoitra Jan 6, 2020
2158a8e
Parse time strings with `PrimitiveDateTime::parse` instead of `Offset…
kevinpoitra Jan 6, 2020
381c8eb
Remove unused `time` dependency from actix-multipart
kevinpoitra Jan 6, 2020
bd4807f
Update CHANGES.md
kevinpoitra Jan 6, 2020
52018a6
Fix a few errors with time related tests from the `time` upgrade
kevinpoitra Jan 6, 2020
dca8e23
Merge branch 'master' into master
kevinpoitra Jan 6, 2020
34bbf75
Implement logic to convert a RFC 850 two-digit year into a full lengt…
kevinpoitra Jan 7, 2020
555dead
Upgrade `time` to 0.2.2
kevinpoitra Jan 8, 2020
a3b6f29
Correctly parse C's asctime time format using time 0.2's new format p…
kevinpoitra Jan 8, 2020
92381b1
Update CHANGES.md
kevinpoitra Jan 8, 2020
edd2cb8
Use `time` without any of its deprecated functions
kevinpoitra Jan 8, 2020
c3b4f05
Enforce a UTC time offset when converting an `OffsetDateTime` into a …
kevinpoitra Jan 8, 2020
a1366e2
Use the more readable version of `Duration::seconds(0)`, `Duration::z…
kevinpoitra Jan 8, 2020
29116b8
Remove unneeded conversion of time::Duration to std::time::Duration
kevinpoitra Jan 8, 2020
3554e2d
Use `OffsetDateTime::as_seconds_f64` instead of manually calculating …
kevinpoitra Jan 8, 2020
7e569bc
Replace a few additional instances of `Duration::seconds(0)` with `Du…
kevinpoitra Jan 8, 2020
0eb8d07
Truncate any nanoseconds from a supplied `Duration` within `Cookie::s…
kevinpoitra Jan 8, 2020
85e341b
Fix the actix-http::cookie::do_not_panic_on_large_max_ages test
kevinpoitra Jan 8, 2020
7a43c56
Convert `Cookie::max_age` and `Cookie::expires` examples to `time` 0.2
kevinpoitra Jan 8, 2020
3e5e3cd
Merge branch 'master' into master
kevinpoitra Jan 11, 2020
4afe09b
Merge branch 'master' into master
kevinpoitra Jan 16, 2020
5192d29
Upgrade to time 0.2.3
jhpratt Jan 17, 2020
b69716c
Merge pull request #1 from jhpratt/master
kevinpoitra Jan 20, 2020
55ef6b9
Upgrade to time v0.2.4
jhpratt Jan 21, 2020
bcf7e01
Merge pull request #2 from jhpratt/master
kevinpoitra Jan 21, 2020
9398e00
Merge branch 'master' into master
kevinpoitra Jan 23, 2020
afd5c21
Merge branch 'master' into master
kevinpoitra Jan 23, 2020
8945236
Merge branch 'master' into master
kevinpoitra Jan 24, 2020
8d692c0
Add missing `time::offset` macro import
kevinpoitra Jan 24, 2020
3d622d6
Fix type confusion when using `time::parse` followed by `using_offset`
kevinpoitra Jan 24, 2020
0efaed9
Merge branch 'master' into master
kevinpoitra Jan 24, 2020
489a3b9
Merge branch 'master' into master
cdbattags Jan 27, 2020
f877a77
Merge branch 'master' into master
kevinpoitra Jan 28, 2020
6d575e7
Merge branch 'master' into master
kevinpoitra Jan 28, 2020
0acacd9
Update `time` to 0.2.5
kevinpoitra Jan 28, 2020
b2fc637
Update CHANGES.md
kevinpoitra Jan 28, 2020
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# Changes

## [2.x.x] - 2020-01-xx

### Changed

* Update the `time` dependency to 0.2.2

## [2.0.0] - 2019-12-25

### Changed
Expand Down
4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ regex = "1.3"
serde = { version = "1.0", features=["derive"] }
serde_json = "1.0"
serde_urlencoded = "0.6.1"
time = "0.1.42"
time = { version = "0.2.2", default-features = false, features = ["std"] }
url = "2.1"
open-ssl = { version="0.10", package = "openssl", optional = true }
rust-tls = { version = "0.16.0", package = "rustls", optional = true }
Expand Down Expand Up @@ -115,4 +115,4 @@ actix-identity = { path = "actix-identity" }
actix-session = { path = "actix-session" }
actix-files = { path = "actix-files" }
actix-multipart = { path = "actix-multipart" }
awc = { path = "awc" }
awc = { path = "awc" }
6 changes: 6 additions & 0 deletions actix-http/CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# Changes

## [1.x.x] - 2020-01-x

### Changed

* Update the `time` dependency to 0.2.2

## [1.0.1] - 2019-12-20

### Fixed
Expand Down
3 changes: 1 addition & 2 deletions actix-http/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ base64 = "0.11"
bitflags = "1.2"
bytes = "0.5.3"
copyless = "0.1.4"
chrono = "0.4.6"
derive_more = "0.99.2"
either = "1.5.3"
encoding_rs = "0.8"
Expand All @@ -77,7 +76,7 @@ serde_json = "1.0"
sha1 = "0.6"
slab = "0.4"
serde_urlencoded = "0.6.1"
time = "0.1.42"
time = { version = "0.2.2", default-features = false, features = ["std"] }

# for secure cookie
ring = { version = "0.16.9", optional = true }
Expand Down
3 changes: 2 additions & 1 deletion actix-http/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ use actix_rt::time::{delay_for, delay_until, Delay, Instant};
use bytes::BytesMut;
use futures_util::{future, FutureExt};
use time;
use time::OffsetDateTime;

// "Sun, 06 Nov 1994 08:49:37 GMT".len()
const DATE_VALUE_LENGTH: usize = 29;
Expand Down Expand Up @@ -211,7 +212,7 @@ impl Date {
}
fn update(&mut self) {
self.pos = 0;
write!(self, "{}", time::at_utc(time::get_time()).rfc822()).unwrap();
write!(self, "{}", OffsetDateTime::now().format("%a, %d %b %Y %H:%M:%S GMT")).unwrap();
}
}

Expand Down
9 changes: 4 additions & 5 deletions actix-http/src/cookie/builder.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
use std::borrow::Cow;

use chrono::Duration;
use time::Tm;
use time::{Duration, OffsetDateTime};

use super::{Cookie, SameSite};

Expand Down Expand Up @@ -64,13 +63,13 @@ impl CookieBuilder {
/// use actix_http::cookie::Cookie;
///
/// let c = Cookie::build("foo", "bar")
/// .expires(time::now())
/// .expires(time::OffsetDateTime::now())
/// .finish();
///
/// assert!(c.expires().is_some());
/// ```
#[inline]
pub fn expires(mut self, when: Tm) -> CookieBuilder {
pub fn expires(mut self, when: OffsetDateTime) -> CookieBuilder {
self.cookie.set_expires(when);
self
}
Expand Down Expand Up @@ -212,7 +211,7 @@ impl CookieBuilder {
///
/// ```rust
/// use actix_http::cookie::Cookie;
/// use chrono::Duration;
/// use time::Duration;
///
/// let c = Cookie::build("foo", "bar")
/// .permanent()
Expand Down
10 changes: 5 additions & 5 deletions actix-http/src/cookie/jar.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use std::collections::HashSet;
use std::mem::replace;

use chrono::Duration;
use time::{Duration, OffsetDateTime};

use super::delta::DeltaCookie;
use super::Cookie;
Expand Down Expand Up @@ -188,7 +188,7 @@ impl CookieJar {
///
/// ```rust
/// use actix_http::cookie::{CookieJar, Cookie};
/// use chrono::Duration;
/// use time::Duration;
///
/// let mut jar = CookieJar::new();
///
Expand Down Expand Up @@ -221,7 +221,7 @@ impl CookieJar {
if self.original_cookies.contains(cookie.name()) {
cookie.set_value("");
cookie.set_max_age(Duration::seconds(0));
cookie.set_expires(time::now() - Duration::days(365));
cookie.set_expires(OffsetDateTime::now() - Duration::days(365));
self.delta_cookies.replace(DeltaCookie::removed(cookie));
} else {
self.delta_cookies.remove(cookie.name());
Expand All @@ -239,7 +239,7 @@ impl CookieJar {
///
/// ```rust
/// use actix_http::cookie::{CookieJar, Cookie};
/// use chrono::Duration;
/// use time::Duration;
///
/// let mut jar = CookieJar::new();
///
Expand Down Expand Up @@ -533,7 +533,7 @@ mod test {
#[test]
#[cfg(feature = "secure-cookies")]
fn delta() {
use chrono::Duration;
use time::Duration;
use std::collections::HashMap;

let mut c = CookieJar::new();
Expand Down
28 changes: 14 additions & 14 deletions actix-http/src/cookie/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,8 @@ use std::borrow::Cow;
use std::fmt;
use std::str::FromStr;

use chrono::Duration;
use percent_encoding::{percent_encode, AsciiSet, CONTROLS};
use time::Tm;
use time::{Duration, OffsetDateTime};

pub use self::builder::CookieBuilder;
pub use self::draft::*;
Expand Down Expand Up @@ -172,7 +171,7 @@ pub struct Cookie<'c> {
/// The cookie's value.
value: CookieStr,
/// The cookie's expiration, if any.
expires: Option<Tm>,
expires: Option<OffsetDateTime>,
/// The cookie's maximum age, if any.
max_age: Option<Duration>,
/// The cookie's domain, if any.
Expand Down Expand Up @@ -547,7 +546,7 @@ impl<'c> Cookie<'c> {
/// assert_eq!(c.expires().map(|t| t.tm_year), Some(117));
/// ```
#[inline]
pub fn expires(&self) -> Option<Tm> {
pub fn expires(&self) -> Option<OffsetDateTime> {
self.expires
}

Expand Down Expand Up @@ -645,7 +644,7 @@ impl<'c> Cookie<'c> {
///
/// ```rust
/// use actix_http::cookie::Cookie;
/// use chrono::Duration;
/// use time::Duration;
///
/// let mut c = Cookie::new("name", "value");
/// assert_eq!(c.max_age(), None);
Expand Down Expand Up @@ -698,18 +697,19 @@ impl<'c> Cookie<'c> {
///
/// ```rust
/// use actix_http::cookie::Cookie;
/// use time::{Duration, OffsetDateTime};
///
/// let mut c = Cookie::new("name", "value");
/// assert_eq!(c.expires(), None);
///
/// let mut now = time::now();
/// now.tm_year += 1;
/// let mut now = OffsetDateTime::now();
/// now += Duration::week();
///
/// c.set_expires(now);
/// assert!(c.expires().is_some())
/// ```
#[inline]
pub fn set_expires(&mut self, time: Tm) {
pub fn set_expires(&mut self, time: OffsetDateTime) {
self.expires = Some(time);
}

Expand All @@ -720,7 +720,7 @@ impl<'c> Cookie<'c> {
///
/// ```rust
/// use actix_http::cookie::Cookie;
/// use chrono::Duration;
/// use time::Duration;
///
/// let mut c = Cookie::new("foo", "bar");
/// assert!(c.expires().is_none());
Expand All @@ -733,7 +733,7 @@ impl<'c> Cookie<'c> {
pub fn make_permanent(&mut self) {
let twenty_years = Duration::days(365 * 20);
self.set_max_age(twenty_years);
self.set_expires(time::now() + twenty_years);
self.set_expires(OffsetDateTime::now() + twenty_years);
}

fn fmt_parameters(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
Expand All @@ -760,11 +760,11 @@ impl<'c> Cookie<'c> {
}

if let Some(max_age) = self.max_age() {
write!(f, "; Max-Age={}", max_age.num_seconds())?;
write!(f, "; Max-Age={}", max_age.whole_seconds())?;
}

if let Some(time) = self.expires() {
write!(f, "; Expires={}", time.rfc822())?;
write!(f, "; Expires={}", time.format("%a, %d %b %Y %H:%M:%S GMT"))?;
}

Ok(())
Expand Down Expand Up @@ -992,7 +992,7 @@ impl<'a, 'b> PartialEq<Cookie<'b>> for Cookie<'a> {
#[cfg(test)]
mod tests {
use super::{Cookie, SameSite};
use time::strptime;
use time::{PrimitiveDateTime, UtcOffset};

#[test]
fn format() {
Expand All @@ -1017,7 +1017,7 @@ mod tests {
assert_eq!(&cookie.to_string(), "foo=bar; Domain=www.rust-lang.org");

let time_str = "Wed, 21 Oct 2015 07:28:00 GMT";
let expires = strptime(time_str, "%a, %d %b %Y %H:%M:%S %Z").unwrap();
let expires = PrimitiveDateTime::parse(time_str, "%a, %d %b %Y %H:%M:%S").unwrap().using_offset(UtcOffset::UTC);
let cookie = Cookie::build("foo", "bar").expires(expires).finish();
assert_eq!(
&cookie.to_string(),
Expand Down
27 changes: 13 additions & 14 deletions actix-http/src/cookie/parse.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@ use std::error::Error;
use std::fmt;
use std::str::Utf8Error;

use chrono::Duration;
use percent_encoding::percent_decode;
use time::{Duration, PrimitiveDateTime, UtcOffset};

use super::{Cookie, CookieStr, SameSite};

use crate::time_parser;

/// Enum corresponding to a parsing error.
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
pub enum ParseError {
Expand Down Expand Up @@ -147,7 +149,7 @@ fn parse_inner<'c>(s: &str, decode: bool) -> Result<Cookie<'c>, ParseError> {
Ok(val) => {
// Don't panic if the max age seconds is greater than what's supported by
// `Duration`.
let val = cmp::min(val, Duration::max_value().num_seconds());
let val = cmp::min(val, Duration::max_value().whole_seconds());
Some(Duration::seconds(val))
}
Err(_) => continue,
Expand Down Expand Up @@ -179,16 +181,14 @@ fn parse_inner<'c>(s: &str, decode: bool) -> Result<Cookie<'c>, ParseError> {
}
}
("expires", Some(v)) => {
// Try strptime with three date formats according to
// Try parsing with three date formats according to
// http://tools.ietf.org/html/rfc2616#section-3.3.1. Try
// additional ones as encountered in the real world.
let tm = time::strptime(v, "%a, %d %b %Y %H:%M:%S %Z")
.or_else(|_| time::strptime(v, "%A, %d-%b-%y %H:%M:%S %Z"))
.or_else(|_| time::strptime(v, "%a, %d-%b-%Y %H:%M:%S %Z"))
.or_else(|_| time::strptime(v, "%a %b %d %H:%M:%S %Y"));
let tm = time_parser::parse_http_date(v)
.or_else(|| PrimitiveDateTime::parse(v, "%a, %d-%b-%Y %H:%M:%S").ok());

if let Ok(time) = tm {
cookie.expires = Some(time)
if let Some(time) = tm {
cookie.expires = Some(time.using_offset(UtcOffset::UTC))
}
}
_ => {
Expand Down Expand Up @@ -216,8 +216,7 @@ where
#[cfg(test)]
mod tests {
use super::{Cookie, SameSite};
use chrono::Duration;
use time::strptime;
use time::{Duration, PrimitiveDateTime, UtcOffset};

macro_rules! assert_eq_parse {
($string:expr, $expected:expr) => {
Expand Down Expand Up @@ -377,7 +376,7 @@ mod tests {
);

let time_str = "Wed, 21 Oct 2015 07:28:00 GMT";
let expires = strptime(time_str, "%a, %d %b %Y %H:%M:%S %Z").unwrap();
let expires = PrimitiveDateTime::parse(time_str, "%a, %d %b %Y %H:%M:%S").unwrap().using_offset(UtcOffset::UTC);
expected.set_expires(expires);
assert_eq_parse!(
" foo=bar ;HttpOnly; Secure; Max-Age=4; Path=/foo; \
Expand All @@ -386,7 +385,7 @@ mod tests {
);

unexpected.set_domain("foo.com");
let bad_expires = strptime(time_str, "%a, %d %b %Y %H:%S:%M %Z").unwrap();
let bad_expires = PrimitiveDateTime::parse(time_str, "%a, %d %b %Y %H:%S:%M").unwrap().using_offset(UtcOffset::UTC);
expected.set_expires(bad_expires);
assert_ne_parse!(
" foo=bar ;HttpOnly; Secure; Max-Age=4; Path=/foo; \
Expand Down Expand Up @@ -414,7 +413,7 @@ mod tests {

#[test]
fn do_not_panic_on_large_max_ages() {
let max_seconds = Duration::max_value().num_seconds();
let max_seconds = Duration::max_value().whole_seconds();
let expected = Cookie::build("foo", "bar").max_age(max_seconds).finish();
assert_eq_parse!(format!(" foo=bar; Max-Age={:?}", max_seconds + 1), expected);
}
Expand Down
Loading