| // Copyright 2015 The Android Open Source Project |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| #ifndef BUFFET_BUFFET_CONFIG_H_ |
| #define BUFFET_BUFFET_CONFIG_H_ |
| |
| #include <map> |
| #include <set> |
| #include <string> |
| #include <vector> |
| |
| #include <base/callback.h> |
| #include <base/files/file_path.h> |
| #include <brillo/errors/error.h> |
| #include <brillo/key_value_store.h> |
| #include <weave/provider/config_store.h> |
| |
| #include "buffet/encryptor.h" |
| |
| namespace buffet { |
| |
| class StorageInterface; |
| |
| // Handles reading buffet config and state files. |
| class BuffetConfig final : public weave::provider::ConfigStore { |
| public: |
| struct Options { |
| std::string client_id; |
| std::string client_secret; |
| std::string api_key; |
| std::string oauth_url; |
| std::string service_url; |
| |
| base::FilePath defaults; |
| base::FilePath settings; |
| |
| base::FilePath definitions; |
| base::FilePath test_definitions; |
| |
| std::string test_privet_ssid; |
| }; |
| |
| // An IO abstraction to enable testing without using real files. |
| class FileIO { |
| public: |
| virtual bool ReadFile(const base::FilePath& path, std::string* content) = 0; |
| virtual bool WriteFile(const base::FilePath& path, |
| const std::string& content) = 0; |
| }; |
| |
| ~BuffetConfig() override = default; |
| |
| explicit BuffetConfig(const Options& options); |
| |
| // Config overrides. |
| bool LoadDefaults(weave::Settings* settings) override; |
| std::string LoadSettings(const std::string& name) override; |
| std::string LoadSettings() override; |
| void SaveSettings(const std::string& name, |
| const std::string& settings, |
| const weave::DoneCallback& callback) override; |
| |
| bool LoadDefaults(const brillo::KeyValueStore& store, |
| weave::Settings* settings); |
| |
| // Allows injection of a non-default |encryptor| for testing. The caller |
| // retains ownership of the pointer. |
| void SetEncryptor(Encryptor* encryptor) { |
| encryptor_ = encryptor; |
| } |
| |
| // Allows injection of non-default |file_io| for testing. The caller retains |
| // ownership of the pointer. |
| void SetFileIO(FileIO* file_io) { |
| file_io_ = file_io; |
| } |
| |
| private: |
| base::FilePath CreatePath(const std::string& name) const; |
| bool LoadFile(const base::FilePath& file_path, |
| std::string* data, |
| brillo::ErrorPtr* error); |
| |
| Options options_; |
| std::unique_ptr<Encryptor> default_encryptor_; |
| Encryptor* encryptor_{nullptr}; |
| std::unique_ptr<FileIO> default_file_io_; |
| FileIO* file_io_{nullptr}; |
| |
| DISALLOW_COPY_AND_ASSIGN(BuffetConfig); |
| }; |
| |
| } // namespace buffet |
| |
| #endif // BUFFET_BUFFET_CONFIG_H_ |