- required-privileges element should be located under allowed-packages.
Signed-off-by: Junghyun Yeon <jungh.yeon@samsung.com>
const char kAllowedPackageKey[] = "manifest.allowed-package";
const char kAllowedPackageIdKey[] = "@id";
+const char kRequiredPrivilegesKey[] = "required-privileges";
+const char kPrivilegeKey[] = "privilege";
+const char kPrivilegeTextKey[] = "#text";
+const char kPrivilegeTypeKey[] = "@type";
+const char kPrivilegeTypeDefault[] = "rpk";
+
} // namespace
bool AllowedPackageHandler::Parse(
const parser::Manifest& manifest,
std::shared_ptr<parser::ManifestData>* output,
std::string* /*error*/) {
- auto data = std::make_shared<AllowedPackageInfo>();
+ auto data_list = std::make_shared<AllowedPackageInfoList>();
for (auto& allowed_package_dict :
parser::GetOneOrMany(manifest.value(), kAllowedPackageKey, "")) {
+ auto data = std::make_shared<AllowedPackageInfo>();
std::string id;
allowed_package_dict->GetString(kAllowedPackageIdKey, &id);
- data->Add(id);
+ data->set_pkgid(id);
+
+ for (auto& required_privileges_dict :
+ parser::GetOneOrMany(allowed_package_dict, kRequiredPrivilegesKey, "")) {
+ for (auto& privilege_dict :
+ parser::GetOneOrMany(required_privileges_dict, kPrivilegeKey, "")) {
+ std::string privilege;
+ std::string type = kPrivilegeTypeDefault;
+ if (!privilege_dict->GetString(kPrivilegeTextKey, &privilege) ||
+ privilege.empty())
+ continue;
+ privilege_dict->GetString(kPrivilegeTypeKey, &type);
+ data->add_privilege(privilege, type);
+ }
+ }
+
+ data_list->Add(data);
}
- *output = std::static_pointer_cast<parser::ManifestData>(data);
+ *output = std::static_pointer_cast<parser::ManifestData>(data_list);
return true;
}
public:
static std::string Key();
- const std::vector<std::string>& allowed_packages() const {
+ void set_pkgid(std::string pkgid) {
+ pkgid_ = std::move(pkgid);
+ }
+
+ void add_privilege(const std::string& privilege, const std::string& type) {
+ privileges_.insert(std::make_pair(privilege, type));
+ }
+
+ const std::string& get_pkgid() const {
+ return pkgid_;
+ }
+
+ const std::set<std::pair<std::string, std::string>>& get_privileges() const {
+ return privileges_;
+ }
+
+ private:
+ std::string pkgid_;
+ std::set<std::pair<std::string, std::string>> privileges_;
+};
+
+
+class AllowedPackageInfoList : public parser::ManifestData {
+ public:
+ static std::string Key();
+
+ const std::vector<std::shared_ptr<AllowedPackageInfo>>& allowed_packages() const {
return allowed_packages_;
}
- void Add(const std::string& id) {
- allowed_packages_.push_back(id);
+ void Add(std::shared_ptr<AllowedPackageInfo> data) {
+ allowed_packages_.push_back(std::move(data));
}
private:
- std::vector<std::string> allowed_packages_;
+ std::vector<std::shared_ptr<AllowedPackageInfo>> allowed_packages_;
};
/**
EXPECT_EQ(dep.pkgid(), "org.tizen.testid");
EXPECT_EQ(dep.type(), "wants");
- std::shared_ptr<const rpk::parse::AllowedPackageInfo> allowed_pkg_info =
- std::static_pointer_cast<const rpk::parse::AllowedPackageInfo>(
+ std::shared_ptr<const rpk::parse::AllowedPackageInfoList> allowed_pkg_list =
+ std::static_pointer_cast<const rpk::parse::AllowedPackageInfoList>(
parser->GetManifestData(kAllowedPackageKey));
- EXPECT_NE(allowed_pkg_info, nullptr);
- EXPECT_EQ(allowed_pkg_info->allowed_packages().size(), 3);
- const auto& allowed_pkg_id = allowed_pkg_info->allowed_packages().at(0);
+ EXPECT_NE(allowed_pkg_list, nullptr);
+ EXPECT_EQ(allowed_pkg_list->allowed_packages().size(), 3);
+ const auto& allowed_pkg_id = allowed_pkg_list->allowed_packages().at(0)->get_pkgid();
EXPECT_EQ(allowed_pkg_id, "org.tizen.testuser");
}