Replace expirationTimeoutSec with expirationTime

expirationTimeoutSec was relative time.
expirationTime is absolute j2000 time.

BUG: 27313743
Change-Id: I9a6d04cf5c9f623a36e815dc2466cf93d9a6a608
Reviewed-on: https://weave-review.googlesource.com/2711
Reviewed-by: Alex Vakulenko <avakulenko@google.com>
diff --git a/src/access_api_handler.cc b/src/access_api_handler.cc
index 9d97d9e..fc7b97b 100644
--- a/src/access_api_handler.cc
+++ b/src/access_api_handler.cc
@@ -11,6 +11,7 @@
 #include "src/commands/schema_constants.h"
 #include "src/data_encoding.h"
 #include "src/json_error_codes.h"
+#include "src/utils.h"
 
 namespace weave {
 
@@ -21,7 +22,7 @@
 const char kStateCapacity[] = "_accessRevocationList.capacity";
 const char kUserId[] = "userId";
 const char kApplicationId[] = "applicationId";
-const char kExpirationTimeout[] = "expirationTimeoutSec";
+const char kExpirationTime[] = "expirationTime";
 const char kBlackList[] = "revocationListEntries";
 
 bool GetIds(const base::DictionaryValue& parameters,
@@ -64,7 +65,7 @@
             "applicationId": {
               "type": "string"
             },
-            "expirationTimeoutSec": {
+            "expirationTime": {
               "type": "integer"
             }
           }
@@ -83,6 +84,9 @@
                   },
                   "applicationId": {
                     "type": "string"
+                  },
+                  "expirationTime": {
+                    "type": "integer"
                   }
                 },
                 "additionalProperties": false
@@ -128,13 +132,15 @@
     return;
   }
 
-  int timeout_sec = 0;
-  parameters.GetInteger(kExpirationTimeout, &timeout_sec);
+  int time_j2k = 0;
+  if (!parameters.GetInteger(kExpirationTime, &time_j2k)) {
+    Error::AddToPrintf(&error, FROM_HERE, errors::commands::kInvalidPropValue,
+                       "Expiration time is missing");
+    command->Abort(error.get(), nullptr);
+    return;
+  }
 
-  base::Time expiration =
-      base::Time::Now() + base::TimeDelta::FromSeconds(timeout_sec);
-
-  manager_->Block(user_id, app_id, expiration,
+  manager_->Block(user_id, app_id, FromJ2000Time(time_j2k),
                   base::Bind(&AccessApiHandler::OnCommandDone,
                              weak_ptr_factory_.GetWeakPtr(), cmd));
 }
diff --git a/src/access_api_handler_unittest.cc b/src/access_api_handler_unittest.cc
index 25dd4da..79f2d49 100644
--- a/src/access_api_handler_unittest.cc
+++ b/src/access_api_handler_unittest.cc
@@ -104,7 +104,7 @@
           "applicationId": {
             "type": "string"
           },
-          "expirationTimeoutSec": {
+          "expirationTime": {
             "type": "integer"
           }
         }
@@ -123,6 +123,9 @@
                 },
                 "applicationId": {
                   "type": "string"
+                },
+                "expirationTime": {
+                  "type": "integer"
                 }
               },
               "additionalProperties": false
@@ -159,7 +162,7 @@
     'parameters': {
       'userId': 'AQID',
       'applicationId': 'AwQF',
-      'expirationTimeoutSec': 1234
+      'expirationTime': 1234
     }
   })");
 
diff --git a/src/privet/auth_manager.cc b/src/privet/auth_manager.cc
index 795dafa..90cf62b 100644
--- a/src/privet/auth_manager.cc
+++ b/src/privet/auth_manager.cc
@@ -17,6 +17,7 @@
 #include "src/privet/constants.h"
 #include "src/privet/openssl_utils.h"
 #include "src/string_utils.h"
+#include "src/utils.h"
 
 extern "C" {
 #include "third_party/libuweave/src/macaroon.h"
@@ -28,20 +29,11 @@
 
 namespace {
 
-const time_t kJ2000ToTimeT = 946684800;
 const size_t kMaxMacaroonSize = 1024;
 const size_t kMaxPendingClaims = 10;
 const char kInvalidTokenError[] = "invalid_token";
 const int kSessionIdTtlMinutes = 1;
 
-uint32_t ToJ2000Time(const base::Time& time) {
-  return std::max(time.ToTimeT(), kJ2000ToTimeT) - kJ2000ToTimeT;
-}
-
-base::Time FromJ2000Time(uint32_t time) {
-  return base::Time::FromTimeT(time + kJ2000ToTimeT);
-}
-
 template <class T>
 void AppendToArray(T value, std::vector<uint8_t>* array) {
   auto begin = reinterpret_cast<const uint8_t*>(&value);
diff --git a/src/utils.cc b/src/utils.cc
index 28828d7..5d1c3e3 100644
--- a/src/utils.cc
+++ b/src/utils.cc
@@ -26,6 +26,8 @@
 const char kErrorCodeKey[] = "code";
 const char kErrorMessageKey[] = "message";
 
+const time_t kJ2000ToTimeT = 946684800;
+
 }  // anonymous namespace
 
 namespace errors {
@@ -69,4 +71,12 @@
   return output;
 }
 
+uint32_t ToJ2000Time(const base::Time& time) {
+  return std::max(time.ToTimeT(), kJ2000ToTimeT) - kJ2000ToTimeT;
+}
+
+base::Time FromJ2000Time(uint32_t time) {
+  return base::Time::FromTimeT(time + kJ2000ToTimeT);
+}
+
 }  // namespace weave
diff --git a/src/utils.h b/src/utils.h
index 99d7bda..40c76b4 100644
--- a/src/utils.h
+++ b/src/utils.h
@@ -8,6 +8,7 @@
 #include <memory>
 #include <string>
 
+#include <base/time/time.h>
 #include <base/values.h>
 #include <weave/error.h>
 
@@ -31,6 +32,9 @@
 
 std::unique_ptr<base::DictionaryValue> ErrorInfoToJson(const Error& error);
 
+uint32_t ToJ2000Time(const base::Time& time);
+base::Time FromJ2000Time(uint32_t time);
+
 }  // namespace weave
 
 #endif  // LIBWEAVE_SRC_UTILS_H_