examples/ubuntu: add disable_security and registration_ticket flag

Bug: 24216016
Change-Id: I0a38ff90711a2c3157aadd445006c257226d1875
Reviewed-on: https://weave-review.googlesource.com/1130
Reviewed-by: Vitaly Buka <vitalybuka@google.com>
diff --git a/libweave/examples/ubuntu/main.cc b/libweave/examples/ubuntu/main.cc
index a9eee98..e4c4db7 100644
--- a/libweave/examples/ubuntu/main.cc
+++ b/libweave/examples/ubuntu/main.cc
@@ -5,6 +5,7 @@
 #include <base/bind.h>
 #include <base/values.h>
 #include <weave/device.h>
+#include <weave/error.h>
 
 #include "libweave/examples/ubuntu/avahi_client.h"
 #include "libweave/examples/ubuntu/bluez_client.h"
@@ -18,8 +19,10 @@
 void ShowUsage(const std::string& name) {
   LOG(ERROR) << "\nUsage: " << name << " <option(s)>"
              << "\nOptions:\n"
-             << "\t-h,--help             Show this help message\n"
-             << "\t-b,--bootstrapping    Force WiFi bootstrapping\n";
+             << "\t-h,--help                    Show this help message\n"
+             << "\t-b,--bootstrapping           Force WiFi bootstrapping\n"
+             << "\t--disable_security           Disable privet security\n"
+             << "\t--registration_ticket=TICKET Register device with the given ticket\n";
 }
 
 class CommandHandler {
@@ -47,14 +50,28 @@
 
 int main(int argc, char** argv) {
   bool force_bootstrapping = false;
+  bool disable_security = false;
+  std::string registration_ticket;
   for (int i = 1; i < argc; ++i) {
     std::string arg = argv[i];
     if (arg == "-h" || arg == "--help") {
       ShowUsage(argv[0]);
       return 0;
-    }
-    if (arg == "-b" || arg == "--bootstrapping")
+    } else if (arg == "-b" || arg == "--bootstrapping") {
       force_bootstrapping = true;
+    } else if (arg == "--disable_security") {
+      disable_security = true;
+    } else if  (arg.find("--registration_ticket") != std::string::npos) {
+      auto pos = arg.find("=");
+      if (pos == std::string::npos) {
+        ShowUsage(argv[0]);
+        return 1;
+      }
+      registration_ticket = arg.substr(pos+1);
+    } else {
+      ShowUsage(argv[0]);
+      return 1;
+    }
   }
 
   weave::examples::FileConfigStore config_store;
@@ -69,15 +86,25 @@
   weave::Device::Options opts;
   opts.xmpp_enabled = true;
   opts.disable_privet = false;
-  opts.disable_security = false;
+  opts.disable_security = disable_security;
   opts.enable_ping = true;
   device->Start(
       opts, &config_store, &task_runner, &http_client, &network, &mdns,
       &http_server,
       weave::examples::NetworkImpl::HasWifiCapability() ? &network : nullptr,
       &bluetooth);
-  CommandHandler handler(device.get());
 
+  if (!registration_ticket.empty()) {
+    weave::ErrorPtr error;
+    auto device_id = device->GetCloud()->RegisterDevice(registration_ticket, &error);
+    if (error != nullptr) {
+      LOG(ERROR) << "Fail to register device: " << error->GetMessage();
+    } else {
+      LOG(INFO) << "Device registered: " << device_id;
+    }
+  }
+
+  CommandHandler handler(device.get());
   task_runner.Run();
 
   LOG(INFO) << "exit";