106 lines
3 KiB
C++
106 lines
3 KiB
C++
// 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_
|