Fixed issues configuring devices with date before 2000.
BUG: 27484275
Change-Id: Ia7158fdea6cac60d8b99630b4cb43b5e368c3776
Reviewed-on: https://weave-review.googlesource.com/2817
Reviewed-by: Alex Vakulenko <avakulenko@google.com>
diff --git a/src/privet/auth_manager.cc b/src/privet/auth_manager.cc
index d905a45..52d3a43 100644
--- a/src/privet/auth_manager.cc
+++ b/src/privet/auth_manager.cc
@@ -447,7 +447,14 @@
}
base::Time AuthManager::Now() const {
- return clock_->Now();
+ base::Time now = clock_->Now();
+ static const base::Time k2010 = base::Time::FromTimeT(1262304000);
+ if (now >= k2010)
+ return now;
+ // Slowdown time before 1 Jan 2010. This will increase expiration time of
+ // access tokens but allow to handle dates which can not be handled by
+ // macaroon library.
+ return k2010 - base::TimeDelta::FromSeconds((k2010 - now).InSeconds() / 10);
}
bool AuthManager::IsValidAuthToken(const std::vector<uint8_t>& token,
diff --git a/src/privet/auth_manager_unittest.cc b/src/privet/auth_manager_unittest.cc
index 648027d..ba1862c 100644
--- a/src/privet/auth_manager_unittest.cc
+++ b/src/privet/auth_manager_unittest.cc
@@ -222,6 +222,15 @@
EXPECT_TRUE(auth_.ParseAccessToken(token2, &user_info, nullptr));
}
+TEST_F(AuthManagerTest, AccessTokenBeforeJ2000) {
+ EXPECT_CALL(clock_, Now())
+ .WillRepeatedly(Return(base::Time::FromTimeT(5678)));
+ UserInfo user_info;
+ auto token1 = auth_.CreateAccessToken(
+ UserInfo{AuthScope::kViewer, TestUserId{"555"}}, {});
+ EXPECT_TRUE(auth_.ParseAccessToken(token1, &user_info, nullptr));
+}
+
TEST_F(AuthManagerTest, GetRootClientAuthToken) {
EXPECT_EQ("WCCDQxkgAUYIGhudoQBCDABQX3fPR5zsPnrs9aOSvS7/eQ==",
Base64Encode(