| // Copyright 2015 The Weave Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "examples/provider/file_config_store.h" |
| |
| #include <sys/stat.h> |
| #include <sys/utsname.h> |
| |
| #include <fstream> |
| #include <map> |
| #include <string> |
| #include <vector> |
| |
| #include <base/bind.h> |
| |
| namespace weave { |
| namespace examples { |
| |
| const char kSettingsDir[] = "/var/lib/weave/"; |
| |
| FileConfigStore::FileConfigStore(const std::string& model_id, |
| provider::TaskRunner* task_runner) |
| : model_id_{model_id}, |
| task_runner_{task_runner} {} |
| |
| std::string FileConfigStore::GetPath(const std::string& name) const { |
| std::string path{kSettingsDir}; |
| path += "weave_settings_" + model_id_; |
| if (!name.empty()) |
| path += "_" + name; |
| return path + ".json"; |
| } |
| |
| bool FileConfigStore::LoadDefaults(Settings* settings) { |
| char host_name[HOST_NAME_MAX] = {}; |
| gethostname(host_name, HOST_NAME_MAX); |
| |
| settings->name = host_name; |
| settings->description = ""; |
| |
| utsname uname_data; |
| uname(&uname_data); |
| |
| settings->firmware_version = uname_data.sysname; |
| settings->serial_number = ""; |
| settings->oem_name = "Unknown"; |
| settings->model_name = "Unknown"; |
| settings->model_id = model_id_; |
| settings->pairing_modes = {PairingType::kEmbeddedCode}; |
| settings->embedded_code = "0000"; |
| settings->allow_endpoints_override = true; |
| |
| // Keys owners: |
| // avakulenko@google.com |
| // gene@chromium.org |
| // vitalybuka@chromium.org |
| settings->client_id = |
| "338428340000-vkb4p6h40c7kja1k3l70kke8t615cjit.apps.googleusercontent." |
| "com"; |
| settings->client_secret = "LS_iPYo_WIOE0m2VnLdduhnx"; |
| settings->api_key = "AIzaSyACK3oZtmIylUKXiTMqkZqfuRiCgQmQSAQ"; |
| |
| return true; |
| } |
| |
| std::string FileConfigStore::LoadSettings() { |
| return LoadSettings(""); |
| } |
| |
| std::string FileConfigStore::LoadSettings(const std::string& name) { |
| LOG(INFO) << "Loading settings from " << GetPath(name); |
| std::ifstream str(GetPath(name)); |
| return std::string(std::istreambuf_iterator<char>(str), |
| std::istreambuf_iterator<char>()); |
| } |
| |
| void FileConfigStore::SaveSettings(const std::string& name, |
| const std::string& settings, |
| const DoneCallback& callback) { |
| CHECK(mkdir(kSettingsDir, S_IRWXU) == 0 || errno == EEXIST); |
| LOG(INFO) << "Saving settings to " << GetPath(name); |
| std::ofstream str(GetPath(name)); |
| str << settings; |
| if (!callback.is_null()) |
| task_runner_->PostDelayedTask(FROM_HERE, base::Bind(callback, nullptr), {}); |
| } |
| |
| } // namespace examples |
| } // namespace weave |