buffet: Added minimal role into command definition
Possible values "viewer", "user", "owner", "manager".
Default minimal role is set to "user".
Role check is not yet implemented.
BUG=brillo:808
TEST=`FEATURES=test emerge-gizmo buffet`
Change-Id: I74d16c24618b50de1e7a2ffa37d7aef36978a38a
Reviewed-on: https://chromium-review.googlesource.com/274117
Reviewed-by: Vitaly Buka <vitalybuka@chromium.org>
Commit-Queue: Vitaly Buka <vitalybuka@chromium.org>
Tested-by: Vitaly Buka <vitalybuka@chromium.org>
diff --git a/buffet/commands/command_dictionary.cc b/buffet/commands/command_dictionary.cc
index 0fdae65..4f66c7d 100644
--- a/buffet/commands/command_dictionary.cc
+++ b/buffet/commands/command_dictionary.cc
@@ -72,6 +72,7 @@
const ObjectSchema* base_results_def = nullptr;
// By default make it available to all clients.
auto visibility = CommandDefinition::Visibility::GetAll();
+ UserRole minimal_role{UserRole::kUser};
if (base_commands) {
auto cmd = base_commands->FindCommand(full_command_name);
if (cmd) {
@@ -79,6 +80,7 @@
base_progress_def = cmd->GetProgress();
base_results_def = cmd->GetResults();
visibility = cmd->GetVisibility();
+ minimal_role = cmd->GetMinimalRole();
}
// If the base command dictionary was provided but the command was not
@@ -123,8 +125,8 @@
return false;
std::string value;
- using commands::attributes::kCommand_Visibility;
- if (command_def_json->GetString(kCommand_Visibility, &value)) {
+ if (command_def_json->GetString(commands::attributes::kCommand_Visibility,
+ &value)) {
if (!visibility.FromString(value, error)) {
chromeos::Error::AddToPrintf(
error, FROM_HERE, errors::commands::kDomain,
@@ -134,12 +136,24 @@
}
}
+ if (command_def_json->GetString(commands::attributes::kCommand_Role,
+ &value)) {
+ if (!FromString(value, &minimal_role, error)) {
+ chromeos::Error::AddToPrintf(
+ error, FROM_HERE, errors::commands::kDomain,
+ errors::commands::kInvalidMinimalRole,
+ "Error parsing command '%s'", full_command_name.c_str());
+ return false;
+ }
+ }
+
std::unique_ptr<CommandDefinition> command_def{
new CommandDefinition{category,
std::move(parameters_schema),
std::move(progress_schema),
std::move(results_schema)}};
command_def->SetVisibility(visibility);
+ command_def->SetMinimalRole(minimal_role);
new_defs.emplace(full_command_name, std::move(command_def));
command_iter.Advance();
@@ -227,6 +241,8 @@
base::DictionaryValue* command_def = new base::DictionaryValue;
command_def->Set(commands::attributes::kCommand_Parameters,
parameters.release());
+ command_def->SetString(commands::attributes::kCommand_Role,
+ ToString(pair.second->GetMinimalRole()));
package->SetWithoutPathExpansion(command_name, command_def);
}
return dict;