buffet: Move privetd sources into buffet

No functional changes, only renaming, fixed include paths and include
guards to avoid resubmit warnings.

BUG=brillo:1161
CQ-DEPEND=CL:276521
TEST=none

Change-Id: Icacff92aef47fdd46542bc96eba3ffbb4df6241a
Reviewed-on: https://chromium-review.googlesource.com/276319
Reviewed-by: Vitaly Buka <vitalybuka@chromium.org>
Commit-Queue: Vitaly Buka <vitalybuka@chromium.org>
Tested-by: Vitaly Buka <vitalybuka@chromium.org>
diff --git a/buffet/privet/privet_handler.h b/buffet/privet/privet_handler.h
new file mode 100644
index 0000000..bb86c0a
--- /dev/null
+++ b/buffet/privet/privet_handler.h
@@ -0,0 +1,139 @@
+// Copyright 2014 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef BUFFET_PRIVET_PRIVET_HANDLER_H_
+#define BUFFET_PRIVET_PRIVET_HANDLER_H_
+
+#include <map>
+#include <string>
+#include <utility>
+
+#include <base/macros.h>
+#include <base/memory/weak_ptr.h>
+#include <base/scoped_observer.h>
+
+#include "buffet/privet/cloud_delegate.h"
+
+namespace base {
+class Value;
+class DictionaryValue;
+}  // namespace base
+
+namespace privetd {
+
+class DeviceDelegate;
+class IdentityDelegate;
+class SecurityDelegate;
+class WifiDelegate;
+
+enum class AuthScope;
+
+// Privet V3 HTTP/HTTPS requests handler.
+// API details at https://developers.google.com/cloud-devices/
+class PrivetHandler : public CloudDelegate::Observer {
+ public:
+  // Callback to handle requests asynchronously.
+  // |status| is HTTP status code.
+  // |output| is result returned in HTTP response. Contains result of
+  // successfully request of information about error.
+  using RequestCallback =
+      base::Callback<void(int status, const base::DictionaryValue& output)>;
+
+  PrivetHandler(CloudDelegate* cloud,
+                DeviceDelegate* device,
+                SecurityDelegate* pairing,
+                WifiDelegate* wifi,
+                IdentityDelegate* identity);
+  ~PrivetHandler() override;
+
+  void OnCommandDefsChanged() override;
+  void OnStateChanged() override;
+
+  // Handles HTTP/HTTPS Privet request.
+  // |api| is the path from the HTTP request, e.g /privet/info.
+  // |auth_header| is the Authentication header from HTTP request.
+  // |input| is the the POST data from HTTP request. If nullptr, data format is
+  // not valid JSON.
+  // |callback| will be called exactly once during or after |HandleRequest|
+  // call.
+  void HandleRequest(const std::string& api,
+                     const std::string& auth_header,
+                     const base::DictionaryValue* input,
+                     const RequestCallback& callback);
+
+ private:
+  using ApiHandler = void (PrivetHandler::*)(const base::DictionaryValue&,
+                                             const UserInfo&,
+                                             const RequestCallback&);
+
+  void AddHandler(const std::string& path, ApiHandler handler, AuthScope scope);
+
+  void HandleInfo(const base::DictionaryValue&,
+                  const UserInfo& user_info,
+                  const RequestCallback& callback);
+  void HandlePairingStart(const base::DictionaryValue& input,
+                          const UserInfo& user_info,
+                          const RequestCallback& callback);
+  void HandlePairingConfirm(const base::DictionaryValue& input,
+                            const UserInfo& user_info,
+                            const RequestCallback& callback);
+  void HandlePairingCancel(const base::DictionaryValue& input,
+                           const UserInfo& user_info,
+                           const RequestCallback& callback);
+  void HandleAuth(const base::DictionaryValue& input,
+                  const UserInfo& user_info,
+                  const RequestCallback& callback);
+  void HandleSetupStart(const base::DictionaryValue& input,
+                        const UserInfo& user_info,
+                        const RequestCallback& callback);
+  void HandleSetupStatus(const base::DictionaryValue&,
+                         const UserInfo& user_info,
+                         const RequestCallback& callback);
+  void HandleState(const base::DictionaryValue& input,
+                   const UserInfo& user_info,
+                   const RequestCallback& callback);
+  void HandleCommandDefs(const base::DictionaryValue& input,
+                         const UserInfo& user_info,
+                         const RequestCallback& callback);
+  void HandleCommandsExecute(const base::DictionaryValue& input,
+                             const UserInfo& user_info,
+                             const RequestCallback& callback);
+  void HandleCommandsStatus(const base::DictionaryValue& input,
+                            const UserInfo& user_info,
+                            const RequestCallback& callback);
+  void HandleCommandsList(const base::DictionaryValue& input,
+                          const UserInfo& user_info,
+                          const RequestCallback& callback);
+  void HandleCommandsCancel(const base::DictionaryValue& input,
+                            const UserInfo& user_info,
+                            const RequestCallback& callback);
+
+  void OnUpdateDeviceInfoDone(const std::string& ssid,
+                              const std::string& passphrase,
+                              const std::string& ticket,
+                              const std::string& user,
+                              const RequestCallback& callback) const;
+  void ReplyWithSetupStatus(const RequestCallback& callback) const;
+
+  CloudDelegate* cloud_ = nullptr;
+  DeviceDelegate* device_ = nullptr;
+  SecurityDelegate* security_ = nullptr;
+  WifiDelegate* wifi_ = nullptr;
+  IdentityDelegate* identity_ = nullptr;
+
+  std::map<std::string, std::pair<AuthScope, ApiHandler>> handlers_;
+
+  uint64_t last_user_id_{0};
+  int state_fingerprint_{0};
+  int command_defs_fingerprint_{0};
+  ScopedObserver<CloudDelegate, CloudDelegate::Observer> cloud_observer_{this};
+
+  base::WeakPtrFactory<PrivetHandler> weak_ptr_factory_{this};
+
+  DISALLOW_COPY_AND_ASSIGN(PrivetHandler);
+};
+
+}  // namespace privetd
+
+#endif  // BUFFET_PRIVET_PRIVET_HANDLER_H_