1
1
use std:: sync:: Arc ;
2
+ use std:: time:: Duration ;
2
3
use std:: { fmt, io} ;
3
4
5
+ use chrono:: { DateTime , Utc } ;
4
6
use hyper:: Client ;
5
7
use hyper_rustls:: HttpsConnectorBuilder ;
6
8
use ring:: {
7
9
rand:: SystemRandom ,
8
10
signature:: { RsaKeyPair , RSA_PKCS1_SHA256 } ,
9
11
} ;
10
12
use serde:: { Deserialize , Deserializer } ;
11
- use time:: { Duration , OffsetDateTime } ;
12
13
13
14
use crate :: Error ;
14
15
/// Represents an access token. All access tokens are Bearer tokens.
@@ -34,7 +35,7 @@ impl Token {
34
35
Token {
35
36
inner : Arc :: new ( InnerToken {
36
37
access_token,
37
- expires_at : OffsetDateTime :: now_utc ( ) + expires_in,
38
+ expires_at : Utc :: now ( ) + expires_in,
38
39
} ) ,
39
40
}
40
41
}
@@ -56,7 +57,7 @@ struct InnerToken {
56
57
deserialize_with = "deserialize_time" ,
57
58
rename( deserialize = "expires_in" )
58
59
) ]
59
- expires_at : OffsetDateTime ,
60
+ expires_at : DateTime < Utc > ,
60
61
}
61
62
62
63
impl Token {
@@ -71,7 +72,7 @@ impl Token {
71
72
/// The docs state, the metadata server caches tokens until 5 minutes before expiry.
72
73
/// We use 20s to be on the safe side.
73
74
pub fn has_expired ( & self ) -> bool {
74
- self . inner . expires_at - Duration :: seconds ( 20 ) <= OffsetDateTime :: now_utc ( )
75
+ self . inner . expires_at - Duration :: from_secs ( 20 ) <= Utc :: now ( )
75
76
}
76
77
77
78
/// Get str representation of the token.
@@ -80,7 +81,7 @@ impl Token {
80
81
}
81
82
82
83
/// Get expiry of token, if available
83
- pub fn expires_at ( & self ) -> OffsetDateTime {
84
+ pub fn expires_at ( & self ) -> DateTime < Utc > {
84
85
self . inner . expires_at
85
86
}
86
87
}
@@ -138,12 +139,12 @@ impl fmt::Debug for Signer {
138
139
}
139
140
}
140
141
141
- fn deserialize_time < ' de , D > ( deserializer : D ) -> Result < OffsetDateTime , D :: Error >
142
+ fn deserialize_time < ' de , D > ( deserializer : D ) -> Result < DateTime < Utc > , D :: Error >
142
143
where
143
144
D : Deserializer < ' de > ,
144
145
{
145
- let seconds_from_now: i64 = Deserialize :: deserialize ( deserializer) ?;
146
- Ok ( OffsetDateTime :: now_utc ( ) + Duration :: seconds ( seconds_from_now) )
146
+ let seconds_from_now: u64 = Deserialize :: deserialize ( deserializer) ?;
147
+ Ok ( Utc :: now ( ) + Duration :: from_secs ( seconds_from_now) )
147
148
}
148
149
149
150
pub ( crate ) fn client ( ) -> HyperClient {
@@ -166,13 +167,13 @@ mod tests {
166
167
fn test_deserialize_with_time ( ) {
167
168
let s = r#"{"access_token":"abc123","expires_in":100}"# ;
168
169
let token: Token = serde_json:: from_str ( s) . unwrap ( ) ;
169
- let expires = OffsetDateTime :: now_utc ( ) + Duration :: seconds ( 100 ) ;
170
+ let expires = Utc :: now ( ) + Duration :: from_secs ( 100 ) ;
170
171
171
172
assert_eq ! ( token. as_str( ) , "abc123" ) ;
172
173
173
174
// Testing time is always racy, give it 1s leeway.
174
175
let expires_at = token. expires_at ( ) ;
175
- assert ! ( expires_at < expires + Duration :: seconds ( 1 ) ) ;
176
- assert ! ( expires_at > expires - Duration :: seconds ( 1 ) ) ;
176
+ assert ! ( expires_at < expires + Duration :: from_secs ( 1 ) ) ;
177
+ assert ! ( expires_at > expires - Duration :: from_secs ( 1 ) ) ;
177
178
}
178
179
}
0 commit comments