buffet_config.cc revision 2915a7b9a45821a7530d2fea8a982bc1b6efc7d3
11175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka// Copyright 2015 The Chromium OS Authors. All rights reserved. 21175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka// Use of this source code is governed by a BSD-style license that can be 31175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka// found in the LICENSE file. 41175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka 51175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka#include "buffet/buffet_config.h" 61175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka 7becd461462f428f136cd5368c664a951935222e9Vitaly Buka#include <map> 81175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka#include <set> 91175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka 101175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka#include <base/files/file_util.h> 111175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka#include <base/files/important_file_writer.h> 121175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka#include <base/logging.h> 131175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka#include <base/strings/string_number_conversions.h> 14becd461462f428f136cd5368c664a951935222e9Vitaly Buka#include <chromeos/errors/error.h> 15becd461462f428f136cd5368c664a951935222e9Vitaly Buka#include <chromeos/errors/error_codes.h> 161175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka#include <chromeos/strings/string_utils.h> 171175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka#include <weave/enum_to_string.h> 181175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka 191175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Bukanamespace buffet { 201175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka 211175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Bukanamespace config_keys { 221175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka 231175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Bukaconst char kClientId[] = "client_id"; 241175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Bukaconst char kClientSecret[] = "client_secret"; 251175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Bukaconst char kApiKey[] = "api_key"; 261175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Bukaconst char kOAuthURL[] = "oauth_url"; 271175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Bukaconst char kServiceURL[] = "service_url"; 281175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Bukaconst char kName[] = "name"; 291175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Bukaconst char kDescription[] = "description"; 301175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Bukaconst char kLocation[] = "location"; 311175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Bukaconst char kLocalAnonymousAccessRole[] = "local_anonymous_access_role"; 321175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Bukaconst char kLocalDiscoveryEnabled[] = "local_discovery_enabled"; 331175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Bukaconst char kLocalPairingEnabled[] = "local_pairing_enabled"; 341175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Bukaconst char kOemName[] = "oem_name"; 351175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Bukaconst char kModelName[] = "model_name"; 361175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Bukaconst char kModelId[] = "model_id"; 371175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Bukaconst char kWifiAutoSetupEnabled[] = "wifi_auto_setup_enabled"; 381175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Bukaconst char kEmbeddedCode[] = "embedded_code"; 391175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Bukaconst char kPairingModes[] = "pairing_modes"; 401175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka 411175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka} // namespace config_keys 421175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka 430022b7523bca3bde23c0f982384f83a39791e88bAlex VakulenkoBuffetConfig::BuffetConfig(const Options& options) : options_(options) {} 441175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka 451175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Bukabool BuffetConfig::LoadDefaults(weave::Settings* settings) { 462915a7b9a45821a7530d2fea8a982bc1b6efc7d3Alex Vakulenko // Keep this hardcoded default for sometime. This previously was set by 472915a7b9a45821a7530d2fea8a982bc1b6efc7d3Alex Vakulenko // libweave. It should be set by overlay's buffet.conf. 480022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko settings->client_id = "58855907228.apps.googleusercontent.com"; 490022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko settings->client_secret = "eHSAREAHrIqPsHBxCE9zPPBi"; 500022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko settings->api_key = "AIzaSyDSq46gG-AxUnC3zoqD9COIPrjolFsMfMA"; 510022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko settings->name = "Developer device"; 520022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko settings->oem_name = "Chromium"; 530022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko settings->model_name = "Brillo"; 540022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko settings->model_id = "AAAAA"; 550022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko 560022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko if (!base::PathExists(options_.defaults)) 571175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka return true; // Nothing to load. 581175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka 591175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka chromeos::KeyValueStore store; 600022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko if (!store.Load(options_.defaults)) 611175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka return false; 620022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko bool result = LoadDefaults(store, settings); 630022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko settings->disable_security = options_.disable_security; 640022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko settings->test_privet_ssid = options_.test_privet_ssid; 65becd461462f428f136cd5368c664a951935222e9Vitaly Buka 662915a7b9a45821a7530d2fea8a982bc1b6efc7d3Alex Vakulenko if (!options_.client_id.empty()) 672915a7b9a45821a7530d2fea8a982bc1b6efc7d3Alex Vakulenko settings->client_id = options_.client_id; 682915a7b9a45821a7530d2fea8a982bc1b6efc7d3Alex Vakulenko if (!options_.client_secret.empty()) 692915a7b9a45821a7530d2fea8a982bc1b6efc7d3Alex Vakulenko settings->client_secret = options_.client_secret; 702915a7b9a45821a7530d2fea8a982bc1b6efc7d3Alex Vakulenko if (!options_.api_key.empty()) 712915a7b9a45821a7530d2fea8a982bc1b6efc7d3Alex Vakulenko settings->api_key = options_.api_key; 722915a7b9a45821a7530d2fea8a982bc1b6efc7d3Alex Vakulenko if (!options_.oauth_url.empty()) 732915a7b9a45821a7530d2fea8a982bc1b6efc7d3Alex Vakulenko settings->oauth_url = options_.oauth_url; 742915a7b9a45821a7530d2fea8a982bc1b6efc7d3Alex Vakulenko if (!options_.service_url.empty()) 752915a7b9a45821a7530d2fea8a982bc1b6efc7d3Alex Vakulenko settings->service_url = options_.service_url; 76becd461462f428f136cd5368c664a951935222e9Vitaly Buka 77becd461462f428f136cd5368c664a951935222e9Vitaly Buka return result; 78becd461462f428f136cd5368c664a951935222e9Vitaly Buka} 79becd461462f428f136cd5368c664a951935222e9Vitaly Buka 801175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Bukabool BuffetConfig::LoadDefaults(const chromeos::KeyValueStore& store, 811175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka weave::Settings* settings) { 821175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka store.GetString(config_keys::kClientId, &settings->client_id); 831175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka store.GetString(config_keys::kClientSecret, &settings->client_secret); 841175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka store.GetString(config_keys::kApiKey, &settings->api_key); 851175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka store.GetString(config_keys::kOAuthURL, &settings->oauth_url); 861175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka store.GetString(config_keys::kServiceURL, &settings->service_url); 871175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka store.GetString(config_keys::kOemName, &settings->oem_name); 881175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka store.GetString(config_keys::kModelName, &settings->model_name); 891175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka store.GetString(config_keys::kModelId, &settings->model_id); 907b9ebeea8658473ec823ff5ff6521e7e641bc2ebVitaly Buka 917b9ebeea8658473ec823ff5ff6521e7e641bc2ebVitaly Buka base::FilePath lsb_release_path("/etc/lsb-release"); 927b9ebeea8658473ec823ff5ff6521e7e641bc2ebVitaly Buka chromeos::KeyValueStore lsb_release_store; 937b9ebeea8658473ec823ff5ff6521e7e641bc2ebVitaly Buka if (lsb_release_store.Load(lsb_release_path) && 947b9ebeea8658473ec823ff5ff6521e7e641bc2ebVitaly Buka lsb_release_store.GetString("CHROMEOS_RELEASE_VERSION", 957b9ebeea8658473ec823ff5ff6521e7e641bc2ebVitaly Buka &settings->firmware_version)) { 967b9ebeea8658473ec823ff5ff6521e7e641bc2ebVitaly Buka } else { 977b9ebeea8658473ec823ff5ff6521e7e641bc2ebVitaly Buka LOG(ERROR) << "Failed to get CHROMEOS_RELEASE_VERSION from " 987b9ebeea8658473ec823ff5ff6521e7e641bc2ebVitaly Buka << lsb_release_path.value(); 997b9ebeea8658473ec823ff5ff6521e7e641bc2ebVitaly Buka } 1007b9ebeea8658473ec823ff5ff6521e7e641bc2ebVitaly Buka 1011175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka store.GetBoolean(config_keys::kWifiAutoSetupEnabled, 1021175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka &settings->wifi_auto_setup_enabled); 1031175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka store.GetString(config_keys::kEmbeddedCode, &settings->embedded_code); 1041175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka 1051175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka std::string modes_str; 1061175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka if (store.GetString(config_keys::kPairingModes, &modes_str)) { 1071175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka std::set<weave::PairingType> pairing_modes; 1081175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka for (const std::string& mode : 1091175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka chromeos::string_utils::Split(modes_str, ",", true, true)) { 1101175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka weave::PairingType pairing_mode; 1111175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka if (!StringToEnum(mode, &pairing_mode)) 1121175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka return false; 1131175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka pairing_modes.insert(pairing_mode); 1141175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka } 1151175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka settings->pairing_modes = std::move(pairing_modes); 1161175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka } 1171175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka 1181175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka store.GetString(config_keys::kName, &settings->name); 1191175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka store.GetString(config_keys::kDescription, &settings->description); 1201175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka store.GetString(config_keys::kLocation, &settings->location); 1210022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko 1220022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko std::string role_str; 1230022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko if (store.GetString(config_keys::kLocalAnonymousAccessRole, &role_str)) { 1240022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko if (!StringToEnum(role_str, &settings->local_anonymous_access_role)) 1250022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko return false; 1260022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko } 1271175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka store.GetBoolean(config_keys::kLocalDiscoveryEnabled, 1281175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka &settings->local_discovery_enabled); 1291175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka store.GetBoolean(config_keys::kLocalPairingEnabled, 1301175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka &settings->local_pairing_enabled); 1311175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka return true; 1321175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka} 1331175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka 1341175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Bukastd::string BuffetConfig::LoadSettings() { 1351175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka std::string json_string; 1360022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko base::ReadFileToString(options_.settings, &json_string); 1371175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka return json_string; 1381175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka} 1391175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka 1401175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Bukavoid BuffetConfig::SaveSettings(const std::string& settings) { 1410022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko base::ImportantFileWriter::WriteFileAtomically(options_.settings, settings); 1421175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka} 1431175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka 1441175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka} // namespace buffet 145