blob: d5c78c8379179df8c5db0c8912a3c00abd40e31e [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "peridot/lib/modular_config/modular_config.h"
#include "lib/json/json_parser.h"
#include "peridot/lib/modular_config/modular_config_constants.h"
#include "peridot/lib/modular_config/modular_config_xdr.h"
#include "src/lib/files/file.h"
namespace modular {
ModularConfigReader::ModularConfigReader() {}
ModularConfigReader::~ModularConfigReader() {}
fuchsia::modular::session::BasemgrConfig
ModularConfigReader::GetBasemgrConfig() {
std::string config_path;
if (files::IsFile(modular_config::kOverridenStartupConfigPath)) {
config_path = modular_config::kOverridenStartupConfigPath;
} else {
config_path = modular_config::kStartupConfigPath;
}
// Get basemgr config section from file
auto basemgr_config_str =
GetConfigAsString(modular_config::kBasemgrConfigName, config_path);
// Parse with xdr
fuchsia::modular::session::BasemgrConfig basemgr_config;
if (!basemgr_config_str.empty() &&
!XdrRead(basemgr_config_str, &basemgr_config, XdrBasemgrConfig)) {
FXL_LOG(ERROR) << "Unable to parse startup.json";
}
return basemgr_config;
}
fuchsia::modular::session::SessionmgrConfig
ModularConfigReader::GetSessionmgrConfig() {
// Get sessionmgr config section from file
auto sessionmgr_config_str =
GetConfigAsString(modular_config::kSessionmgrConfigName,
modular_config::kOverridenStartupConfigPath);
// Parse with xdr
fuchsia::modular::session::SessionmgrConfig sessionmgr_config;
if (!XdrRead(sessionmgr_config_str, &sessionmgr_config,
XdrSessionmgrConfig)) {
FXL_LOG(ERROR) << "Unable to parse startup.json";
}
return sessionmgr_config;
}
fuchsia::modular::session::SessionmgrConfig
ModularConfigReader::GetDefaultSessionmgrConfig() {
fuchsia::modular::session::SessionmgrConfig sessionmgr_config;
XdrRead("\"\"", &sessionmgr_config, XdrSessionmgrConfig);
return sessionmgr_config;
}
std::string ModularConfigReader::GetConfigAsString(
const std::string& config_name, std::string config_path) {
// Check that config file exists
if (!files::IsFile(config_path)) {
FXL_LOG(ERROR) << config_path << " does not exist.";
return "\"\"";
}
std::string json;
if (!files::ReadFileToString(config_path, &json)) {
FXL_LOG(ERROR) << "Unable to read " << config_path;
return "\"\"";
}
json::JSONParser json_parser;
auto startup_config = json_parser.ParseFromString(json, config_path);
if (json_parser.HasError()) {
FXL_LOG(ERROR) << "Error while parsing " << config_path
<< " to string. Error: " << json_parser.error_str();
return "\"\"";
}
// Get |config_name| section from file
auto config_json = startup_config.FindMember(config_name);
if (config_json == startup_config.MemberEnd()) {
// |config_name| was not found
FXL_LOG(ERROR) << config_name << " configurations were not found in "
<< config_path;
return "\"\"";
}
return modular::JsonValueToString(config_json->value);
}
} // namespace modular