From: Changgyu Choi Date: Mon, 28 Apr 2025 08:31:07 +0000 (+0900) Subject: Change requiredPrivileges members to optional X-Git-Tag: accepted/tizen/unified/20250514.114137~16^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=558a7109d53ad3d0da1a415a5c9f752fd505cd7d;p=platform%2Fcore%2Fappfw%2Ftizen-action.git Change requiredPrivileges members to optional Action schemas may not have requiredPrivileges. Signed-off-by: Changgyu Choi --- diff --git a/src/common/action_schema.cc b/src/common/action_schema.cc index 565642e..03e1692 100644 --- a/src/common/action_schema.cc +++ b/src/common/action_schema.cc @@ -90,8 +90,13 @@ ActionSchema::ActionSchema(const std::string& json_str) { returns_.emplace_back(name, type, "", description, false); } - for (auto const& it : root.array("requiredPrivileges")) - privileges_.push_back(it->GetString()); + try { + for (auto const& it : root.array("requiredPrivileges")) + privileges_.push_back(it->GetString()); + } catch (const std::runtime_error& e) { + // optional + privileges_.clear(); + } // details switch (type_) { diff --git a/src/pkgmgr_plugin_parser/json_action_schema_parser.cc b/src/pkgmgr_plugin_parser/json_action_schema_parser.cc index bce1099..ecd9cce 100644 --- a/src/pkgmgr_plugin_parser/json_action_schema_parser.cc +++ b/src/pkgmgr_plugin_parser/json_action_schema_parser.cc @@ -36,12 +36,20 @@ ActionSchema JsonActionSchemaParser::Parse(const std::string& pkgid, common::SafeJson root(json); std::string name = root.get("name"); std::string category = root.get("category"); - const auto priv_array = root.array("requiredPrivileges"); std::vector privs; - privs.reserve(priv_array.size()); - std::transform(priv_array.begin(), priv_array.end(), - std::back_inserter(privs), - [](const auto& priv) { return priv->GetString(); }); + + try { + const auto priv_array = root.array("requiredPrivileges"); + privs.reserve(priv_array.size()); + std::transform(priv_array.begin(), priv_array.end(), + std::back_inserter(privs), + [](const auto& priv) { return priv->GetString(); }); + } catch (const std::runtime_error& e) { + // optional + LOG(WARNING) << "No required privileges found for action: " << name; + privs.clear(); + } + LOG(DEBUG) << "Parased action for pkgid[ " << pkgid << " ] : " << name; LOG(DEBUG) << json; diff --git a/test/unit_tests/action_schema_test.cc b/test/unit_tests/action_schema_test.cc index 29e14e6..f08be2f 100644 --- a/test/unit_tests/action_schema_test.cc +++ b/test/unit_tests/action_schema_test.cc @@ -29,7 +29,6 @@ class ActionSchemaTest : public ::testing::Test { "desc": "Return 1" } }, - "requiredPrivileges": ["priv1", "priv2"], "details": { "appid": "com.example.app" } @@ -89,9 +88,7 @@ TEST_F(ActionSchemaTest, ValidAppControlActionJsonParsing) { EXPECT_EQ(returns[0].GetType(), ParameterType::NumberType); const auto& privileges = schema.GetPrivileges(); - EXPECT_EQ(privileges.size(), 2); - EXPECT_EQ(privileges[0], "priv1"); - EXPECT_EQ(privileges[1], "priv2"); + EXPECT_EQ(privileges.size(), 0); } TEST_F(ActionSchemaTest, ValidPluginActionJsonParsing) {