1cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// Copyright 2015 The Android Open Source Project 2cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// 3cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// Licensed under the Apache License, Version 2.0 (the "License"); 4cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// you may not use this file except in compliance with the License. 5cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// You may obtain a copy of the License at 6cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// 7cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// http://www.apache.org/licenses/LICENSE-2.0 8cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// 9cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// Unless required by applicable law or agreed to in writing, software 10cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// distributed under the License is distributed on an "AS IS" BASIS, 11cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// See the License for the specific language governing permissions and 13cad20f0768bb6f2b5b647c7663e9bfc4e7ac3cb7Vitaly Buka// limitations under the License. 141175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka 151175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka#ifndef BUFFET_BUFFET_CONFIG_H_ 161175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka#define BUFFET_BUFFET_CONFIG_H_ 171175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka 18becd461462f428f136cd5368c664a951935222e9Vitaly Buka#include <map> 191175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka#include <set> 201175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka#include <string> 211175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka#include <vector> 221175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka 231175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka#include <base/callback.h> 241175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka#include <base/files/file_path.h> 254170585fe75d99036883229081420f2972dd4ec1Alex Vakulenko#include <brillo/errors/error.h> 264170585fe75d99036883229081420f2972dd4ec1Alex Vakulenko#include <brillo/key_value_store.h> 27e32375bdf73d6e79a003a194e4c6931f38348520Alex Vakulenko#include <weave/provider/config_store.h> 281175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka 29df38164c0c7bfef18b68d3ba5be9a516bf6198deAlex Vakulenko#include "buffet/encryptor.h" 30df38164c0c7bfef18b68d3ba5be9a516bf6198deAlex Vakulenko 311175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Bukanamespace buffet { 321175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka 331175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Bukaclass StorageInterface; 341175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka 351175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka// Handles reading buffet config and state files. 36e32375bdf73d6e79a003a194e4c6931f38348520Alex Vakulenkoclass BuffetConfig final : public weave::provider::ConfigStore { 371175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka public: 380022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko struct Options { 392915a7b9a45821a7530d2fea8a982bc1b6efc7d3Alex Vakulenko std::string client_id; 402915a7b9a45821a7530d2fea8a982bc1b6efc7d3Alex Vakulenko std::string client_secret; 412915a7b9a45821a7530d2fea8a982bc1b6efc7d3Alex Vakulenko std::string api_key; 422915a7b9a45821a7530d2fea8a982bc1b6efc7d3Alex Vakulenko std::string oauth_url; 432915a7b9a45821a7530d2fea8a982bc1b6efc7d3Alex Vakulenko std::string service_url; 442915a7b9a45821a7530d2fea8a982bc1b6efc7d3Alex Vakulenko 450022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko base::FilePath defaults; 460022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko base::FilePath settings; 470022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko 480022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko base::FilePath definitions; 490022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko base::FilePath test_definitions; 500022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko 510022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko std::string test_privet_ssid; 520022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko }; 530022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko 54df38164c0c7bfef18b68d3ba5be9a516bf6198deAlex Vakulenko // An IO abstraction to enable testing without using real files. 55df38164c0c7bfef18b68d3ba5be9a516bf6198deAlex Vakulenko class FileIO { 56df38164c0c7bfef18b68d3ba5be9a516bf6198deAlex Vakulenko public: 57df38164c0c7bfef18b68d3ba5be9a516bf6198deAlex Vakulenko virtual bool ReadFile(const base::FilePath& path, std::string* content) = 0; 58df38164c0c7bfef18b68d3ba5be9a516bf6198deAlex Vakulenko virtual bool WriteFile(const base::FilePath& path, 59df38164c0c7bfef18b68d3ba5be9a516bf6198deAlex Vakulenko const std::string& content) = 0; 60df38164c0c7bfef18b68d3ba5be9a516bf6198deAlex Vakulenko }; 61df38164c0c7bfef18b68d3ba5be9a516bf6198deAlex Vakulenko 621175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka ~BuffetConfig() override = default; 631175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka 640022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko explicit BuffetConfig(const Options& options); 651175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka 661175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka // Config overrides. 671175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka bool LoadDefaults(weave::Settings* settings) override; 68e709fa7586dfd3fb8fd41cede0cd5dbc39b31acbVitaly Buka std::string LoadSettings(const std::string& name) override; 691175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka std::string LoadSettings() override; 70e709fa7586dfd3fb8fd41cede0cd5dbc39b31acbVitaly Buka void SaveSettings(const std::string& name, 71e709fa7586dfd3fb8fd41cede0cd5dbc39b31acbVitaly Buka const std::string& settings, 72e709fa7586dfd3fb8fd41cede0cd5dbc39b31acbVitaly Buka const weave::DoneCallback& callback) override; 731175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka 744170585fe75d99036883229081420f2972dd4ec1Alex Vakulenko bool LoadDefaults(const brillo::KeyValueStore& store, 751175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka weave::Settings* settings); 761175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka 77df38164c0c7bfef18b68d3ba5be9a516bf6198deAlex Vakulenko // Allows injection of a non-default |encryptor| for testing. The caller 78df38164c0c7bfef18b68d3ba5be9a516bf6198deAlex Vakulenko // retains ownership of the pointer. 79df38164c0c7bfef18b68d3ba5be9a516bf6198deAlex Vakulenko void SetEncryptor(Encryptor* encryptor) { 80df38164c0c7bfef18b68d3ba5be9a516bf6198deAlex Vakulenko encryptor_ = encryptor; 81df38164c0c7bfef18b68d3ba5be9a516bf6198deAlex Vakulenko } 82df38164c0c7bfef18b68d3ba5be9a516bf6198deAlex Vakulenko 83df38164c0c7bfef18b68d3ba5be9a516bf6198deAlex Vakulenko // Allows injection of non-default |file_io| for testing. The caller retains 84df38164c0c7bfef18b68d3ba5be9a516bf6198deAlex Vakulenko // ownership of the pointer. 85df38164c0c7bfef18b68d3ba5be9a516bf6198deAlex Vakulenko void SetFileIO(FileIO* file_io) { 86df38164c0c7bfef18b68d3ba5be9a516bf6198deAlex Vakulenko file_io_ = file_io; 87df38164c0c7bfef18b68d3ba5be9a516bf6198deAlex Vakulenko } 88df38164c0c7bfef18b68d3ba5be9a516bf6198deAlex Vakulenko 891175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka private: 90e709fa7586dfd3fb8fd41cede0cd5dbc39b31acbVitaly Buka base::FilePath CreatePath(const std::string& name) const; 91df38164c0c7bfef18b68d3ba5be9a516bf6198deAlex Vakulenko bool LoadFile(const base::FilePath& file_path, 92df38164c0c7bfef18b68d3ba5be9a516bf6198deAlex Vakulenko std::string* data, 934170585fe75d99036883229081420f2972dd4ec1Alex Vakulenko brillo::ErrorPtr* error); 94df38164c0c7bfef18b68d3ba5be9a516bf6198deAlex Vakulenko 950022b7523bca3bde23c0f982384f83a39791e88bAlex Vakulenko Options options_; 96df38164c0c7bfef18b68d3ba5be9a516bf6198deAlex Vakulenko std::unique_ptr<Encryptor> default_encryptor_; 97df38164c0c7bfef18b68d3ba5be9a516bf6198deAlex Vakulenko Encryptor* encryptor_{nullptr}; 98df38164c0c7bfef18b68d3ba5be9a516bf6198deAlex Vakulenko std::unique_ptr<FileIO> default_file_io_; 99df38164c0c7bfef18b68d3ba5be9a516bf6198deAlex Vakulenko FileIO* file_io_{nullptr}; 1001175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka 1011175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka DISALLOW_COPY_AND_ASSIGN(BuffetConfig); 1021175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka}; 1031175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka 1041175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka} // namespace buffet 1051175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka 1061175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka#endif // BUFFET_BUFFET_CONFIG_H_ 107