blob: a2b25d9a2c26e4c7e1b8a1c6bb653e16515488ce [file] [log] [blame]
Christopher Wileyb024ca92015-03-24 14:30:17 -07001// Copyright 2015 The Chromium OS 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#ifndef BUFFET_BUFFET_CONFIG_H_
6#define BUFFET_BUFFET_CONFIG_H_
7
Vitaly Buka0c68cac2015-06-21 18:39:34 -07008#include <set>
Christopher Wileyb024ca92015-03-24 14:30:17 -07009#include <string>
Vitaly Bukabf4ba652015-05-14 16:57:23 -070010#include <vector>
Christopher Wileyb024ca92015-03-24 14:30:17 -070011
Vitaly Bukabf4ba652015-05-14 16:57:23 -070012#include <base/callback.h>
Christopher Wileyb024ca92015-03-24 14:30:17 -070013#include <base/files/file_path.h>
Vitaly Bukabf4ba652015-05-14 16:57:23 -070014#include <chromeos/errors/error.h>
Christopher Wileyb024ca92015-03-24 14:30:17 -070015#include <chromeos/key_value_store.h>
16
Vitaly Buka0c68cac2015-06-21 18:39:34 -070017#include "buffet/privet/security_delegate.h"
18
Christopher Wileyb024ca92015-03-24 14:30:17 -070019namespace buffet {
20
Vitaly Bukabf4ba652015-05-14 16:57:23 -070021class StorageInterface;
22
23// Handles reading buffet config and state files.
24class BuffetConfig final {
Christopher Wileyb024ca92015-03-24 14:30:17 -070025 public:
Vitaly Bukabf4ba652015-05-14 16:57:23 -070026 using OnChangedCallback = base::Callback<void(const BuffetConfig&)>;
27
28 explicit BuffetConfig(std::unique_ptr<StorageInterface> storage);
29
30 explicit BuffetConfig(const base::FilePath& state_path);
31
32 void AddOnChangedCallback(const OnChangedCallback& callback) {
33 on_changed_.push_back(callback);
34 // Force to read current state.
35 callback.Run(*this);
36 }
Christopher Wileyb024ca92015-03-24 14:30:17 -070037
38 void Load(const base::FilePath& config_path);
39 void Load(const chromeos::KeyValueStore& store);
40
Vitaly Bukabf4ba652015-05-14 16:57:23 -070041 // Allows editing of config. Makes sure that callbacks were called and changes
42 // were saved.
43 // User can commit changes by calling Commit method or by destroying the
44 // object.
45 class Transaction final {
46 public:
47 explicit Transaction(BuffetConfig* config) : config_(config) {
48 CHECK(config_);
49 }
50
51 ~Transaction();
52
Vitaly Buka7cd01972015-05-14 21:25:45 -070053 void set_client_id(const std::string& id) { config_->client_id_ = id; }
54 void set_client_secret(const std::string& secret) {
55 config_->client_secret_ = secret;
56 }
57 void set_api_key(const std::string& key) { config_->api_key_ = key; }
58 void set_oauth_url(const std::string& url) { config_->oauth_url_ = url; }
59 void set_service_url(const std::string& url) {
60 config_->service_url_ = url;
61 }
Vitaly Bukae30d3782015-06-02 15:37:51 -070062 void set_name(const std::string& name) { config_->name_ = name; }
Vitaly Bukabf4ba652015-05-14 16:57:23 -070063 void set_description(const std::string& description) {
64 config_->description_ = description;
65 }
66 void set_location(const std::string& location) {
67 config_->location_ = location;
68 }
69 bool set_local_anonymous_access_role(const std::string& role);
70 void set_local_discovery_enabled(bool enabled) {
71 config_->local_discovery_enabled_ = enabled;
72 }
73 void set_local_pairing_enabled(bool enabled) {
74 config_->local_pairing_enabled_ = enabled;
75 }
76 void set_device_id(const std::string& id) { config_->device_id_ = id; }
77 void set_refresh_token(const std::string& token) {
78 config_->refresh_token_ = token;
79 }
80 void set_robot_account(const std::string& account) {
81 config_->robot_account_ = account;
82 }
Vitaly Buka0c68cac2015-06-21 18:39:34 -070083 void set_last_configured_ssid(const std::string& ssid) {
84 config_->last_configured_ssid_ = ssid;
85 }
Vitaly Bukabf4ba652015-05-14 16:57:23 -070086
87 void Commit();
88
89 private:
90 friend class BuffetConfig;
91 void LoadState();
92 BuffetConfig* config_;
93 bool save_{true};
94 };
95
Vitaly Bukacc75d5f2015-04-16 10:03:26 -070096 const std::string& client_id() const { return client_id_; }
97 const std::string& client_secret() const { return client_secret_; }
98 const std::string& api_key() const { return api_key_; }
99 const std::string& oauth_url() const { return oauth_url_; }
100 const std::string& service_url() const { return service_url_; }
101 const std::string& oem_name() const { return oem_name_; }
102 const std::string& model_name() const { return model_name_; }
103 const std::string& model_id() const { return model_id_; }
104 const std::string& device_kind() const { return device_kind_; }
Vitaly Buka76ad11b2015-06-22 16:01:58 -0700105 base::TimeDelta polling_period() const { return polling_period_; }
106 base::TimeDelta backup_polling_period() const {
107 return backup_polling_period_;
Alex Vakulenkodf67dd22015-05-27 15:48:19 -0700108 }
Christopher Wileyb024ca92015-03-24 14:30:17 -0700109
Vitaly Buka0c68cac2015-06-21 18:39:34 -0700110 bool wifi_auto_setup_enabled() const { return wifi_auto_setup_enabled_; }
111 const std::set<privetd::PairingType>& pairing_modes() const {
112 return pairing_modes_;
113 }
114 const base::FilePath& embedded_code_path() const {
115 return embedded_code_path_;
116 }
117
Vitaly Bukacc75d5f2015-04-16 10:03:26 -0700118 const std::string& name() const { return name_; }
119 const std::string& description() const { return description_; }
120 const std::string& location() const { return location_; }
Vitaly Buka0c68cac2015-06-21 18:39:34 -0700121 const std::string& local_anonymous_access_role() const {
Vitaly Buka15f24dc2015-05-13 16:06:01 -0700122 return local_anonymous_access_role_;
123 }
124 bool local_pairing_enabled() const { return local_pairing_enabled_; }
125 bool local_discovery_enabled() const { return local_discovery_enabled_; }
Vitaly Bukacc75d5f2015-04-16 10:03:26 -0700126
Vitaly Buka0c68cac2015-06-21 18:39:34 -0700127 const std::string& device_id() const { return device_id_; }
128 const std::string& refresh_token() const { return refresh_token_; }
129 const std::string& robot_account() const { return robot_account_; }
130 const std::string& last_configured_ssid() const {
131 return last_configured_ssid_;
132 }
Vitaly Bukacc75d5f2015-04-16 10:03:26 -0700133
Christopher Wileyb024ca92015-03-24 14:30:17 -0700134 private:
Vitaly Bukabf4ba652015-05-14 16:57:23 -0700135 bool Save();
136
Christopher Wileyb024ca92015-03-24 14:30:17 -0700137 std::string client_id_{"58855907228.apps.googleusercontent.com"};
138 std::string client_secret_{"eHSAREAHrIqPsHBxCE9zPPBi"};
139 std::string api_key_{"AIzaSyDSq46gG-AxUnC3zoqD9COIPrjolFsMfMA"};
140 std::string oauth_url_{"https://accounts.google.com/o/oauth2/"};
141 std::string service_url_{"https://www.googleapis.com/clouddevices/v1/"};
Alex Vakulenkoe6b2c652015-04-08 10:42:45 -0700142 std::string name_{"Developer device"};
Vitaly Bukacc75d5f2015-04-16 10:03:26 -0700143 std::string description_;
144 std::string location_;
Vitaly Buka15f24dc2015-05-13 16:06:01 -0700145 std::string local_anonymous_access_role_{"viewer"};
146 bool local_discovery_enabled_{true};
147 bool local_pairing_enabled_{true};
Vitaly Bukacc75d5f2015-04-16 10:03:26 -0700148 std::string oem_name_{"Chromium"};
149 std::string model_name_{"Brillo"};
150 std::string model_id_{"AAAAA"};
Alex Vakulenko6ae9e352015-04-20 10:59:20 -0700151 std::string device_kind_{"vendor"};
Vitaly Buka76ad11b2015-06-22 16:01:58 -0700152 base::TimeDelta polling_period_{base::TimeDelta::FromSeconds(7)};
153 base::TimeDelta backup_polling_period_{base::TimeDelta::FromMinutes(30)};
Christopher Wileyb024ca92015-03-24 14:30:17 -0700154
Vitaly Buka0c68cac2015-06-21 18:39:34 -0700155 bool wifi_auto_setup_enabled_{true};
156 std::set<privetd::PairingType> pairing_modes_{privetd::PairingType::kPinCode};
157 base::FilePath embedded_code_path_;
158
Vitaly Bukabf4ba652015-05-14 16:57:23 -0700159 std::string device_id_;
160 std::string refresh_token_;
161 std::string robot_account_;
Vitaly Buka0c68cac2015-06-21 18:39:34 -0700162 std::string last_configured_ssid_;
Vitaly Bukabf4ba652015-05-14 16:57:23 -0700163
164 // Serialization interface to save and load buffet state.
165 std::unique_ptr<StorageInterface> storage_;
166
167 std::vector<OnChangedCallback> on_changed_;
168
Christopher Wileyb024ca92015-03-24 14:30:17 -0700169 DISALLOW_COPY_AND_ASSIGN(BuffetConfig);
170};
171
172} // namespace buffet
173
174#endif // BUFFET_BUFFET_CONFIG_H_