1 // Copyright 2015 The Weave Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "examples/provider/file_config_store.h" 6 7 #include <sys/stat.h> 8 #include <sys/utsname.h> 9 10 #include <fstream> 11 #include <map> 12 #include <string> 13 #include <vector> 14 15 #include <base/bind.h> 16 17 namespace weave { 18 namespace examples { 19 20 const char kSettingsDir[] = "/var/lib/weave/"; 21 22 FileConfigStore::FileConfigStore(const std::string& model_id, 23 provider::TaskRunner* task_runner) 24 : model_id_{model_id}, 25 task_runner_{task_runner} {} 26 27 std::string FileConfigStore::GetPath(const std::string& name) const { 28 std::string path{kSettingsDir}; 29 path += "weave_settings_" + model_id_; 30 if (!name.empty()) 31 path += "_" + name; 32 return path + ".json"; 33 } 34 35 bool FileConfigStore::LoadDefaults(Settings* settings) { 36 char host_name[HOST_NAME_MAX] = {}; 37 gethostname(host_name, HOST_NAME_MAX); 38 39 settings->name = host_name; 40 settings->description = ""; 41 42 utsname uname_data; 43 uname(&uname_data); 44 45 settings->firmware_version = uname_data.sysname; 46 settings->oem_name = "Unknown"; 47 settings->model_name = "Unknown"; 48 settings->model_id = model_id_; 49 settings->pairing_modes = {PairingType::kEmbeddedCode}; 50 settings->embedded_code = "0000"; 51 52 // Keys owners: 53 // avakulenko (at) google.com 54 // gene (at) chromium.org 55 // vitalybuka (at) chromium.org 56 settings->client_id = 57 "338428340000-vkb4p6h40c7kja1k3l70kke8t615cjit.apps.googleusercontent." 58 "com"; 59 settings->client_secret = "LS_iPYo_WIOE0m2VnLdduhnx"; 60 settings->api_key = "AIzaSyACK3oZtmIylUKXiTMqkZqfuRiCgQmQSAQ"; 61 62 return true; 63 } 64 65 std::string FileConfigStore::LoadSettings() { 66 return LoadSettings(""); 67 } 68 69 std::string FileConfigStore::LoadSettings(const std::string& name) { 70 LOG(INFO) << "Loading settings from " << GetPath(name); 71 std::ifstream str(GetPath(name)); 72 return std::string(std::istreambuf_iterator<char>(str), 73 std::istreambuf_iterator<char>()); 74 } 75 76 void FileConfigStore::SaveSettings(const std::string& name, 77 const std::string& settings, 78 const DoneCallback& callback) { 79 CHECK(mkdir(kSettingsDir, S_IRWXU) == 0 || errno == EEXIST); 80 LOG(INFO) << "Saving settings to " << GetPath(name); 81 std::ofstream str(GetPath(name)); 82 str << settings; 83 if (!callback.is_null()) 84 task_runner_->PostDelayedTask(FROM_HERE, base::Bind(callback, nullptr), {}); 85 } 86 87 } // namespace examples 88 } // namespace weave 89