Disable HTTP access to APIs that may be used to pass sensitive data

BUG:24789091
Change-Id: I364126d7ae80f606ca834b9daf05db783382842d
Reviewed-on: https://weave-review.googlesource.com/1411
Reviewed-by: Alex Vakulenko <avakulenko@google.com>
diff --git a/libweave/src/privet/privet_handler.cc b/libweave/src/privet/privet_handler.cc
index 2180cad..fc344ab 100644
--- a/libweave/src/privet/privet_handler.cc
+++ b/libweave/src/privet/privet_handler.cc
@@ -341,8 +341,10 @@
 }  // namespace
 
 std::vector<std::string> PrivetHandler::GetHttpPaths() const {
-  // TODO(vitalybuka): Should be subset only.
-  return GetHttpsPaths();
+  return {
+      "/privet/info", "/privet/v3/pairing/start", "/privet/v3/pairing/confirm",
+      "/privet/v3/pairing/cancel",
+  };
 }
 
 std::vector<std::string> PrivetHandler::GetHttpsPaths() const {
diff --git a/libweave/src/weave_unittest.cc b/libweave/src/weave_unittest.cc
index 0bfbe0b..eb41294 100644
--- a/libweave/src/weave_unittest.cc
+++ b/libweave/src/weave_unittest.cc
@@ -36,6 +36,8 @@
 
 namespace weave {
 
+namespace {
+
 using provider::HttpClient;
 using provider::Network;
 using provider::test::MockHttpClientResponse;
@@ -133,6 +135,16 @@
   return (arg_copy == txt_copy);
 }
 
+template <class Map>
+std::set<typename Map::key_type> GetKeys(const Map& map) {
+  std::set<typename Map::key_type> result;
+  for (const auto& pair : map)
+    result.insert(pair.first);
+  return result;
+}
+
+}  // namespace
+
 class WeaveTest : public ::testing::Test {
  protected:
   void SetUp() override {}
@@ -208,13 +220,13 @@
         .WillRepeatedly(Invoke(
             [this](const std::string& path_prefix,
                    const provider::HttpServer::RequestHandlerCallback& cb) {
-              http_server_request_cb_.push_back(cb);
+              http_handlers_[path_prefix] = cb;
             }));
     EXPECT_CALL(http_server_, AddHttpsRequestHandler(_, _))
         .WillRepeatedly(Invoke(
             [this](const std::string& path_prefix,
                    const provider::HttpServer::RequestHandlerCallback& cb) {
-              http_server_request_cb_.push_back(cb);
+              https_handlers_[path_prefix] = cb;
             }));
   }
 
@@ -232,6 +244,19 @@
                                     &http_client_, &network_, &dns_sd_,
                                     &http_server_, &wifi_, &bluetooth_);
 
+    EXPECT_EQ((std::set<std::string>{
+                  "/privet/info", "/privet/v3/pairing/cancel",
+                  "/privet/v3/pairing/confirm", "/privet/v3/pairing/start"}),
+              GetKeys(http_handlers_));
+    EXPECT_EQ((std::set<std::string>{
+                  "/privet/info", "/privet/v3/auth", "/privet/v3/commandDefs",
+                  "/privet/v3/commands/cancel", "/privet/v3/commands/execute",
+                  "/privet/v3/commands/list", "/privet/v3/commands/status",
+                  "/privet/v3/pairing/cancel", "/privet/v3/pairing/confirm",
+                  "/privet/v3/pairing/start", "/privet/v3/setup/start",
+                  "/privet/v3/setup/status", "/privet/v3/state"}),
+              GetKeys(https_handlers_));
+
     device_->AddCommandDefinitionsFromJson(kCommandDefs);
     device_->AddStateDefinitionsFromJson(kStateDefs);
     device_->SetStatePropertiesFromJson(kStateDefaults, nullptr);
@@ -247,8 +272,10 @@
     }
   }
 
-  std::vector<provider::HttpServer::RequestHandlerCallback>
-      http_server_request_cb_;
+  std::map<std::string, provider::HttpServer::RequestHandlerCallback>
+      http_handlers_;
+  std::map<std::string, provider::HttpServer::RequestHandlerCallback>
+      https_handlers_;
 
   StrictMock<provider::test::MockConfigStore> config_store_;
   StrictMock<provider::test::FakeTaskRunner> task_runner_;