blob: af3f047c878d57cf1edecf989b31f8943a15e89a [file] [log] [blame]
Vitaly Buka4615e0d2015-10-14 15:35:12 -07001// Copyright 2015 The Weave Authors. All rights reserved.
Vitaly Buka17b0a8a2015-08-31 19:12:35 -07002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Johan Euphrosine3523fdd2015-10-14 20:46:05 -07005#include "examples/provider/file_config_store.h"
Vitaly Buka17b0a8a2015-08-31 19:12:35 -07006
7#include <sys/stat.h>
8#include <sys/utsname.h>
9
10#include <fstream>
11#include <map>
12#include <string>
13#include <vector>
14
Vitaly Bukaac18fcf2016-01-15 14:48:54 -080015#include <base/bind.h>
16
Vitaly Buka17b0a8a2015-08-31 19:12:35 -070017namespace weave {
18namespace examples {
19
20const char kSettingsDir[] = "/var/lib/weave/";
Vitaly Buka17b0a8a2015-08-31 19:12:35 -070021
Vitaly Buka919a8a92016-01-27 15:59:28 -080022FileConfigStore::FileConfigStore(const std::string& model_id,
Vitaly Bukaac18fcf2016-01-15 14:48:54 -080023 provider::TaskRunner* task_runner)
Vitaly Buka919a8a92016-01-27 15:59:28 -080024 : model_id_{model_id},
Vitaly Bukaac18fcf2016-01-15 14:48:54 -080025 task_runner_{task_runner} {}
Vitaly Bukad1e6c4f2016-01-15 12:19:17 -080026
27std::string FileConfigStore::GetPath(const std::string& name) const {
28 std::string path{kSettingsDir};
Harry Pandcf2bde2016-02-03 15:44:24 +080029 path += "weave_settings_" + model_id_;
Vitaly Bukad1e6c4f2016-01-15 12:19:17 -080030 if (!name.empty())
31 path += "_" + name;
32 return path + ".json";
33}
Vitaly Buka41a90d62015-09-29 16:58:39 -070034
Vitaly Buka17b0a8a2015-08-31 19:12:35 -070035bool 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";
Paul Westbrook321dae62015-11-16 09:31:35 -080048 settings->model_id = model_id_;
Vitaly Buka17b0a8a2015-08-31 19:12:35 -070049 settings->pairing_modes = {PairingType::kEmbeddedCode};
50 settings->embedded_code = "0000";
Vitaly Buka03ee8ac2016-02-05 11:40:33 -080051 settings->allow_endpoints_override = true;
Vitaly Buka0fadc352015-11-17 09:47:26 -080052
53 // Keys owners:
54 // avakulenko@google.com
55 // gene@chromium.org
56 // vitalybuka@chromium.org
57 settings->client_id =
58 "338428340000-vkb4p6h40c7kja1k3l70kke8t615cjit.apps.googleusercontent."
59 "com";
60 settings->client_secret = "LS_iPYo_WIOE0m2VnLdduhnx";
61 settings->api_key = "AIzaSyACK3oZtmIylUKXiTMqkZqfuRiCgQmQSAQ";
Vitaly Buka41a90d62015-09-29 16:58:39 -070062
Vitaly Buka17b0a8a2015-08-31 19:12:35 -070063 return true;
64}
65
66std::string FileConfigStore::LoadSettings() {
Vitaly Bukad1e6c4f2016-01-15 12:19:17 -080067 return LoadSettings("");
68}
69
70std::string FileConfigStore::LoadSettings(const std::string& name) {
71 LOG(INFO) << "Loading settings from " << GetPath(name);
72 std::ifstream str(GetPath(name));
Vitaly Buka17b0a8a2015-08-31 19:12:35 -070073 return std::string(std::istreambuf_iterator<char>(str),
74 std::istreambuf_iterator<char>());
75}
76
Vitaly Bukad1e6c4f2016-01-15 12:19:17 -080077void FileConfigStore::SaveSettings(const std::string& name,
Vitaly Bukaac18fcf2016-01-15 14:48:54 -080078 const std::string& settings,
79 const DoneCallback& callback) {
Vitaly Buka17b0a8a2015-08-31 19:12:35 -070080 CHECK(mkdir(kSettingsDir, S_IRWXU) == 0 || errno == EEXIST);
Vitaly Bukad1e6c4f2016-01-15 12:19:17 -080081 LOG(INFO) << "Saving settings to " << GetPath(name);
82 std::ofstream str(GetPath(name));
Vitaly Buka17b0a8a2015-08-31 19:12:35 -070083 str << settings;
Vitaly Bukaac18fcf2016-01-15 14:48:54 -080084 if (!callback.is_null())
85 task_runner_->PostDelayedTask(FROM_HERE, base::Bind(callback, nullptr), {});
Vitaly Buka17b0a8a2015-08-31 19:12:35 -070086}
87
Vitaly Buka17b0a8a2015-08-31 19:12:35 -070088} // namespace examples
89} // namespace weave