blob: ed85d39f6e9c57b87facb76b31f68c2836ede5ed [file] [log] [blame]
Vitaly Buka72410b22015-05-13 13:48:59 -07001// Copyright 2015 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Vitaly Buka912b6982015-07-06 11:13:03 -07005#include "libweave/src/base_api_handler.h"
Vitaly Buka72410b22015-05-13 13:48:59 -07006
Vitaly Buka912b6982015-07-06 11:13:03 -07007#include "libweave/src/commands/command_instance.h"
8#include "libweave/src/commands/command_manager.h"
9#include "libweave/src/device_registration_info.h"
10#include "libweave/src/states/state_manager.h"
Vitaly Buka72410b22015-05-13 13:48:59 -070011
Vitaly Bukab6f015a2015-07-09 14:59:23 -070012namespace weave {
Vitaly Buka72410b22015-05-13 13:48:59 -070013
Vitaly Buka4c808b22015-08-02 13:44:52 -070014namespace {
15const char kBaseStateFirmwareVersion[] = "base.firmwareVersion";
16const char kBaseStateAnonymousAccessRole[] = "base.localAnonymousAccessMaxRole";
17const char kBaseStateDiscoveryEnabled[] = "base.localDiscoveryEnabled";
18const char kBaseStatePairingEnabled[] = "base.localPairingEnabled";
19} // namespace
20
Vitaly Buka72410b22015-05-13 13:48:59 -070021BaseApiHandler::BaseApiHandler(
Vitaly Buka4c808b22015-08-02 13:44:52 -070022 DeviceRegistrationInfo* device_info,
Vitaly Buka2f7efdb2015-05-27 16:00:21 -070023 const std::shared_ptr<StateManager>& state_manager,
Vitaly Buka72410b22015-05-13 13:48:59 -070024 const std::shared_ptr<CommandManager>& command_manager)
Vitaly Buka2f7efdb2015-05-27 16:00:21 -070025 : device_info_{device_info}, state_manager_{state_manager} {
Vitaly Buka4c808b22015-08-02 13:44:52 -070026 device_info_->AddOnConfigChangedCallback(base::Bind(
27 &BaseApiHandler::OnConfigChanged, weak_ptr_factory_.GetWeakPtr()));
28
29 // Populate state fields that belong to the system.
30 base::FilePath lsb_release_path("/etc/lsb-release");
31 chromeos::KeyValueStore lsb_release_store;
32 std::string firmware_version;
33 if (lsb_release_store.Load(lsb_release_path) &&
34 lsb_release_store.GetString("CHROMEOS_RELEASE_VERSION",
35 &firmware_version)) {
36 base::DictionaryValue state;
37 state.SetStringWithoutPathExpansion(kBaseStateFirmwareVersion,
38 firmware_version);
39 CHECK(state_manager_->SetProperties(state, nullptr));
40 } else {
41 LOG(ERROR) << "Failed to get CHROMEOS_RELEASE_VERSION from "
42 << lsb_release_path.value();
43 }
44
Vitaly Buka72410b22015-05-13 13:48:59 -070045 command_manager->AddOnCommandAddedCallback(base::Bind(
46 &BaseApiHandler::OnCommandAdded, weak_ptr_factory_.GetWeakPtr()));
47}
48
Vitaly Buka12affd82015-07-23 18:45:35 -070049void BaseApiHandler::OnCommandAdded(Command* command) {
Vitaly Buka15f59092015-07-24 16:54:32 -070050 if (command->GetStatus() != CommandStatus::kQueued)
Vitaly Buka72410b22015-05-13 13:48:59 -070051 return;
52
Vitaly Buka2f7efdb2015-05-27 16:00:21 -070053 if (command->GetName() == "base.updateBaseConfiguration")
54 return UpdateBaseConfiguration(command);
55
Vitaly Buka72410b22015-05-13 13:48:59 -070056 if (command->GetName() == "base.updateDeviceInfo")
57 return UpdateDeviceInfo(command);
58}
59
Vitaly Buka12affd82015-07-23 18:45:35 -070060void BaseApiHandler::UpdateBaseConfiguration(Command* command) {
Vitaly Buka4f4e2282015-07-23 17:50:07 -070061 command->SetProgress(base::DictionaryValue{}, nullptr);
Vitaly Buka2f7efdb2015-05-27 16:00:21 -070062
63 const BuffetConfig& config{device_info_->GetConfig()};
64 std::string anonymous_access_role{config.local_anonymous_access_role()};
65 bool discovery_enabled{config.local_discovery_enabled()};
66 bool pairing_enabled{config.local_pairing_enabled()};
67
Vitaly Buka8d8d2192015-07-21 22:25:09 -070068 auto parameters = command->GetParameters();
69 parameters->GetString("localAnonymousAccessMaxRole", &anonymous_access_role);
70 parameters->GetBoolean("localDiscoveryEnabled", &discovery_enabled);
71 parameters->GetBoolean("localPairingEnabled", &pairing_enabled);
Vitaly Buka2f7efdb2015-05-27 16:00:21 -070072
Vitaly Buka2f7efdb2015-05-27 16:00:21 -070073 if (!device_info_->UpdateBaseConfig(anonymous_access_role, discovery_enabled,
74 pairing_enabled, nullptr)) {
75 return command->Abort();
76 }
77
78 command->Done();
79}
80
Vitaly Buka4c808b22015-08-02 13:44:52 -070081void BaseApiHandler::OnConfigChanged(const Settings& settings) {
82 base::DictionaryValue state;
83 state.SetStringWithoutPathExpansion(kBaseStateAnonymousAccessRole,
84 settings.local_anonymous_access_role);
85 state.SetBooleanWithoutPathExpansion(kBaseStateDiscoveryEnabled,
86 settings.local_discovery_enabled);
87 state.SetBooleanWithoutPathExpansion(kBaseStatePairingEnabled,
88 settings.local_pairing_enabled);
89 state_manager_->SetProperties(state, nullptr);
90}
91
Vitaly Buka12affd82015-07-23 18:45:35 -070092void BaseApiHandler::UpdateDeviceInfo(Command* command) {
Vitaly Buka4f4e2282015-07-23 17:50:07 -070093 command->SetProgress(base::DictionaryValue{}, nullptr);
Vitaly Buka72410b22015-05-13 13:48:59 -070094
95 const BuffetConfig& config{device_info_->GetConfig()};
96 std::string name{config.name()};
97 std::string description{config.description()};
98 std::string location{config.location()};
99
Vitaly Buka8d8d2192015-07-21 22:25:09 -0700100 auto parameters = command->GetParameters();
101 parameters->GetString("name", &name);
102 parameters->GetString("description", &description);
103 parameters->GetString("location", &location);
Vitaly Buka72410b22015-05-13 13:48:59 -0700104
105 if (!device_info_->UpdateDeviceInfo(name, description, location, nullptr)) {
106 return command->Abort();
107 }
108
109 command->Done();
110}
111
Vitaly Bukab6f015a2015-07-09 14:59:23 -0700112} // namespace weave