From: Piotr Kosko
Date: Thu, 21 Apr 2016 07:30:54 +0000 (+0200)
Subject: [Common] Changed way of handling privileges for API versions
X-Git-Tag: submit/tizen/20160427.040804^2~2^2
X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c56689fb298ec746d33d019f8eb8b1d0b3afb5ce;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git
[Common] Changed way of handling privileges for API versions
[Feature] privilege_manager_get_mapped_privilege_list function is used to get
proper mapping of privileges for application version and current platform.
Such solution replaces hardcoded mapping for 3.0 in utils_api.js file.
[Verification] auto TCT's passrate didn't change.
Change-Id: If39de763d92a4489e56a824bd035ee5db1548df9
Signed-off-by: Piotr Kosko
---
diff --git a/packaging/webapi-plugins.spec b/packaging/webapi-plugins.spec
index 51a0351e..7c3f839d 100644
--- a/packaging/webapi-plugins.spec
+++ b/packaging/webapi-plugins.spec
@@ -272,6 +272,7 @@ Source0: %{name}-%{version}.tar.gz
%endif # tizen_profile_tv
+BuildRequires: pkgconfig(security-privilege-manager)
BuildRequires: ninja
BuildRequires: pkgconfig(appcore-common)
BuildRequires: pkgconfig(dlog)
diff --git a/src/alarm/alarm_manager.cc b/src/alarm/alarm_manager.cc
index cd341041..5a66ba6f 100755
--- a/src/alarm/alarm_manager.cc
+++ b/src/alarm/alarm_manager.cc
@@ -37,7 +37,7 @@ namespace alarm {
namespace {
const int kDateSize = 22; //"yyy mm dd hh mm ss dd" e.g 115 11 28 11 25 50 -1
-const std::string kPrivilegeAlarm = "http://tizen.org/privilege/alarm.get";
+const std::string kPrivilegeAlarm = "http://tizen.org/privilege/alarm";
const std::string kAlarmRelative = "AlarmRelative";
const std::string kAlarmAbsolute = "AlarmAbsolute";
diff --git a/src/application/application_instance.cc b/src/application/application_instance.cc
index 3364901d..67ff539d 100755
--- a/src/application/application_instance.cc
+++ b/src/application/application_instance.cc
@@ -28,10 +28,10 @@ namespace application {
namespace {
// The privileges that are required in Application API
-const std::string kPrivilegeAppManagerCertificate = "http://tizen.org/privilege/notexist";
+const std::string kPrivilegeAppManagerCertificate = "http://tizen.org/privilege/appmanager.certificate";
const std::string kPrivilegeAppManagerKill = "http://tizen.org/privilege/appmanager.kill";
-const std::string kPrivilegeApplicationInfo = "http://tizen.org/privilege/packagemanager.info";
-const std::string kPrivilegeApplicationLaunch = "http://tizen.org/privilege/appmanager.launch";
+const std::string kPrivilegeApplicationInfo = "http://tizen.org/privilege/application.info";
+const std::string kPrivilegeApplicationLaunch = "http://tizen.org/privilege/application.launch";
} // namespace
using namespace common;
diff --git a/src/archive/archive_instance.cc b/src/archive/archive_instance.cc
index 8cf1af7f..ce687033 100755
--- a/src/archive/archive_instance.cc
+++ b/src/archive/archive_instance.cc
@@ -38,8 +38,8 @@ using common::tools::ReportSuccess;
using common::tools::ReportError;
namespace {
-const std::string kPrivilegeFilesystemRead = "http://tizen.org/privilege/systemsettings.admin";
-const std::string kPrivilegeFilesystemWrite = "http://tizen.org/privilege/systemsettings.admin";
+const std::string kPrivilegeFilesystemRead = "http://tizen.org/privilege/filesystem.read";
+const std::string kPrivilegeFilesystemWrite = "http://tizen.org/privilege/filesystem.write";
const std::string kArchiveFileEntryOptDest = "destination";
const std::string kArchiveFileEntryOptStrip = "stripSourceDirectory";
diff --git a/src/bookmark/bookmark_instance.cc b/src/bookmark/bookmark_instance.cc
index 14bd0340..7f8e4bd8 100755
--- a/src/bookmark/bookmark_instance.cc
+++ b/src/bookmark/bookmark_instance.cc
@@ -37,8 +37,8 @@ namespace {
const char kParentId[] = "parentId";
const char kUrl[] = "url";
- const std::string kPrivilegeBookmarkRead = "http://tizen.org/privilege/bookmark.admin";
- const std::string kPrivilegeBookmarkWrite = "http://tizen.org/privilege/bookmark.admin";
+ const std::string kPrivilegeBookmarkRead = "http://tizen.org/privilege/bookmark.read";
+ const std::string kPrivilegeBookmarkWrite = "http://tizen.org/privilege/bookmark.write";
} // namespace
BookmarkInstance::BookmarkInstance() {
diff --git a/src/common/common.gyp b/src/common/common.gyp
index f89186c4..a4e9414c 100644
--- a/src/common/common.gyp
+++ b/src/common/common.gyp
@@ -74,6 +74,7 @@
'capi-appfw-app-manager',
'capi-appfw-package-manager',
'storage',
+ 'security-privilege-manager',
]
},
'conditions': [
diff --git a/src/common/tools.cc b/src/common/tools.cc
index 9a8b8e0f..9b468847 100644
--- a/src/common/tools.cc
+++ b/src/common/tools.cc
@@ -16,6 +16,10 @@
#include "common/tools.h"
+#include
+#include
+#include
+
#ifdef PRIVILEGE_USE_DB
#include
#include "common/current_application.h"
@@ -253,20 +257,115 @@ class AccessControl {
} // namespace
+
PlatformResult CheckAccess(const std::string& privilege) {
return CheckAccess(std::vector{privilege});
}
PlatformResult CheckAccess(const std::vector& privileges) {
LoggerD("Enter");
- if (AccessControl::GetInstance().CheckAccess(privileges)) {
- return PlatformResult(ErrorCode::NO_ERROR);
- } else {
- for (const auto& privilege : privileges) {
- LoggerD("Access to privilege: %s has been denied.", privilege.c_str());
+
+ std::string api_version;
+ PlatformResult res = common::tools::GetPkgApiVersion(&api_version);
+ if (res.IsError()) {
+ return res;
+ }
+ LoggerD("Application api version: %s", api_version.c_str());
+
+ for (auto input_priv : privileges) {
+ LoggerD("Input privilege: %s", input_priv.c_str());
+ GList *input_glist = nullptr;
+ GList *mapped_glist = nullptr;
+
+ SCOPE_EXIT {
+ g_list_free(input_glist);
+ g_list_free(mapped_glist);
+ };
+
+ input_glist = g_list_append(input_glist, (void*)input_priv.c_str());
+ int ret = privilege_manager_get_mapped_privilege_list(api_version.c_str(),
+ PRVMGR_PACKAGE_TYPE_WRT,
+ input_glist,
+ &mapped_glist);
+ if (ret != PRVMGR_ERR_NONE) {
+ return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Fail to get mapped privilege list");
+ }
+
+ LoggerD("Mapped privileges:");
+ std::vector mapped_vector;
+ auto push_elem = [](gpointer data, gpointer user_data) -> void {
+ if (data && user_data) {
+ std::vector* mapped_vector =
+ static_cast*>(user_data);
+ char* char_data = static_cast(data);
+ mapped_vector->push_back(char_data);
+ LoggerD("mapped to: %s", char_data);
+ }
+ };
+ g_list_foreach (mapped_glist, push_elem, &mapped_vector);
+
+ if (!AccessControl::GetInstance().CheckAccess(mapped_vector)){
+ for (const auto& mapped_priv : mapped_vector) {
+ LoggerD("Access to privilege: %s has been denied.", mapped_priv.c_str());
+ }
+ return PlatformResult(ErrorCode::SECURITY_ERR, "Permission denied");
+ }
+ }
+ return PlatformResult(ErrorCode::NO_ERROR);
+}
+
+PlatformResult GetPkgApiVersion(std::string* api_version) {
+ LoggerD("Entered");
+
+ char* app_id = nullptr;
+ char* pkgid = nullptr;
+ char* api_ver = nullptr;
+ app_info_h app_handle = nullptr;
+ pkgmgrinfo_pkginfo_h pkginfo_handle = nullptr;
+
+ SCOPE_EXIT {
+ if (app_id) {
+ free(app_id);
}
- return PlatformResult(ErrorCode::SECURITY_ERR, "Permission denied");
+ if (pkgid) {
+ free(pkgid);
+ }
+ if (app_handle) {
+ app_info_destroy(app_handle);
+ }
+ if (pkginfo_handle) {
+ pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo_handle);
+ }
+ };
+
+ pid_t pid = getpid();
+ int ret = app_manager_get_app_id(pid, &app_id);
+ if (ret != APP_MANAGER_ERROR_NONE) {
+ return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Fail to get app id");
}
+
+ ret = app_info_create(app_id, &app_handle);
+ if (ret != APP_MANAGER_ERROR_NONE) {
+ return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Fail to get app info");
+ }
+
+ ret = app_info_get_package(app_handle, &pkgid);
+ if ((ret != APP_MANAGER_ERROR_NONE) || (pkgid == nullptr)) {
+ return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Fail to get pkg id");
+ }
+
+ ret = pkgmgrinfo_pkginfo_get_usr_pkginfo(pkgid, getuid(), &pkginfo_handle);
+ if (ret != PMINFO_R_OK) {
+ return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Fail to get pkginfo_h");
+ }
+
+ ret = pkgmgrinfo_pkginfo_get_api_version(pkginfo_handle, &api_ver);
+ if (ret != PMINFO_R_OK) {
+ return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Fail to get api version");
+ }
+
+ *api_version = api_ver;
+ return PlatformResult(ErrorCode::NO_ERROR);
}
std::string GetErrorString(int error_code) {
diff --git a/src/common/tools.h b/src/common/tools.h
index fcd98689..c3df3a98 100644
--- a/src/common/tools.h
+++ b/src/common/tools.h
@@ -35,6 +35,7 @@ void ReportError(const PlatformResult& error, picojson::object* out);
common::PlatformResult CheckAccess(const std::string& privilege);
common::PlatformResult CheckAccess(const std::vector& privileges);
+common::PlatformResult GetPkgApiVersion(std::string* api_version);
#define CHECK_PRIVILEGE_ACCESS(privilege, out) \
do { \
diff --git a/src/datacontrol/datacontrol_instance.cc b/src/datacontrol/datacontrol_instance.cc
index 7e71cebd..cfb1521b 100755
--- a/src/datacontrol/datacontrol_instance.cc
+++ b/src/datacontrol/datacontrol_instance.cc
@@ -37,7 +37,7 @@ namespace datacontrol {
namespace {
// The privileges that required in Datacontrol API
-const std::string kPrivilegeDatacontrol = "http://tizen.org/privilege/datasharing";
+const std::string kPrivilegeDatacontrol = "http://tizen.org/privilege/datacontrol.consumer";
} // namespace
diff --git a/src/filesystem/filesystem_instance.cc b/src/filesystem/filesystem_instance.cc
index df1d003a..54b0a2e1 100644
--- a/src/filesystem/filesystem_instance.cc
+++ b/src/filesystem/filesystem_instance.cc
@@ -30,8 +30,8 @@ namespace filesystem {
namespace {
// The privileges that required in Filesystem API
-const std::string kPrivilegeFilesystemRead = "http://tizen.org/privilege/systemsettings.admin";
-const std::string kPrivilegeFilesystemWrite = "http://tizen.org/privilege/systemsettings.admin";
+const std::string kPrivilegeFilesystemRead = "http://tizen.org/privilege/filesystem.read";
+const std::string kPrivilegeFilesystemWrite = "http://tizen.org/privilege/filesystem.write";
}
using namespace common;
diff --git a/src/messaging/messaging_instance.cc b/src/messaging/messaging_instance.cc
index 1b7d18c9..cd656a7c 100755
--- a/src/messaging/messaging_instance.cc
+++ b/src/messaging/messaging_instance.cc
@@ -120,8 +120,8 @@ auto getServiceIdFromJSON = [](picojson::object& data) -> int {
}
};
-const std::string kPrivilegeMessagingRead = "http://tizen.org/privilege/message.read";
-const std::string kPrivilegeMessagingWrite = "http://tizen.org/privilege/message.write";
+const std::string kPrivilegeMessagingRead = "http://tizen.org/privilege/messaging.read";
+const std::string kPrivilegeMessagingWrite = "http://tizen.org/privilege/messaging.write";
const long kDumbCallbackId= -1;
}
diff --git a/src/networkbearerselection/networkbearerselection_instance.cc b/src/networkbearerselection/networkbearerselection_instance.cc
index 6e392146..809c8361 100644
--- a/src/networkbearerselection/networkbearerselection_instance.cc
+++ b/src/networkbearerselection/networkbearerselection_instance.cc
@@ -29,7 +29,7 @@ namespace networkbearerselection {
namespace {
// The privileges that required in NetworkBearerSelection API
-const std::string kPrivilegeNetworkBearerSelection = "http://tizen.org/privilege/network.set";
+const std::string kPrivilegeNetworkBearerSelection = "http://tizen.org/privilege/networkbearerselection";
const std::string kPrivilegeInternet = "http://tizen.org/privilege/internet";
const std::vector kNbsPrivileges{kPrivilegeNetworkBearerSelection, kPrivilegeInternet};
diff --git a/src/nfc/nfc_instance.cc b/src/nfc/nfc_instance.cc
index f29a2984..781f90e8 100644
--- a/src/nfc/nfc_instance.cc
+++ b/src/nfc/nfc_instance.cc
@@ -40,9 +40,9 @@ namespace {
const std::string kPrivilegeNfcAdmin = "http://tizen.org/privilege/nfc.admin";
const std::string kPrivilegeNfcCardEmulation = "http://tizen.org/privilege/nfc.cardemulation";
-const std::string kPrivilegeNfcCommon = "http://tizen.org/privilege/nfc";
-const std::string kPrivilegeNfcP2P = "http://tizen.org/privilege/nfc";
-const std::string kPrivilegeNfcTag = "http://tizen.org/privilege/nfc";
+const std::string kPrivilegeNfcCommon = "http://tizen.org/privilege/nfc.common";
+const std::string kPrivilegeNfcP2P = "http://tizen.org/privilege/nfc.p2p";
+const std::string kPrivilegeNfcTag = "http://tizen.org/privilege/nfc.tag";
} // namespace
diff --git a/src/package/package_instance.cc b/src/package/package_instance.cc
index d7b5f53b..81250763 100644
--- a/src/package/package_instance.cc
+++ b/src/package/package_instance.cc
@@ -40,7 +40,7 @@ using common::PlatformResult;
namespace {
// The privileges that required in Package API
-const std::string kPrivilegePackageInstall = "http://tizen.org/privilege/packagemanager.admin";
+const std::string kPrivilegePackageInstall = "http://tizen.org/privilege/packagemanager.install";
const std::string kPrivilegePackageInfo = "http://tizen.org/privilege/packagemanager.info";
} // namespace
diff --git a/src/power/power_instance.cc b/src/power/power_instance.cc
index 6d7d2df7..a4b566de 100755
--- a/src/power/power_instance.cc
+++ b/src/power/power_instance.cc
@@ -34,7 +34,7 @@ namespace power {
namespace {
// The privileges that required in Power API
-const std::string kPrivilegePower = "http://tizen.org/privilege/display";
+const std::string kPrivilegePower = "http://tizen.org/privilege/power";
const std::map kPowerResourceMap = {
{"SCREEN", POWER_RESOURCE_SCREEN},
diff --git a/src/systemsetting/systemsetting_instance.cc b/src/systemsetting/systemsetting_instance.cc
index c95fbcae..55d6891d 100644
--- a/src/systemsetting/systemsetting_instance.cc
+++ b/src/systemsetting/systemsetting_instance.cc
@@ -36,7 +36,7 @@ const std::string SETTING_LOCK_SCREEN = "LOCK_SCREEN";
const std::string SETTING_INCOMING_CALL = "INCOMING_CALL";
const std::string SETTING_NOTIFICATION_EMAIL = "NOTIFICATION_EMAIL";
-const std::string kPrivilegeSetting = "http://tizen.org/privilege/systemsettings.admin";
+const std::string kPrivilegeSetting = "http://tizen.org/privilege/setting";
}
using namespace common;
diff --git a/src/utils/utils_api.js b/src/utils/utils_api.js
index 038ecaef..76206062 100644
--- a/src/utils/utils_api.js
+++ b/src/utils/utils_api.js
@@ -72,18 +72,18 @@ function Utils() {
ACCOUNT_READ: 'http://tizen.org/privilege/account.read',
ACCOUNT_WRITE: 'http://tizen.org/privilege/account.write',
ALARM: 'http://tizen.org/privilege/alarm.get',
- APPLICATION_INFO: 'http://tizen.org/privilege/packagemanager.info',
- APPLICATION_LAUNCH: 'http://tizen.org/privilege/appmanager.launch',
- APPMANAGER_CERTIFICATE: 'http://tizen.org/privilege/notexist',
+ APPLICATION_INFO: 'http://tizen.org/privilege/application.info',
+ APPLICATION_LAUNCH: 'http://tizen.org/privilege/application.launch',
+ APPMANAGER_CERTIFICATE: 'http://tizen.org/privilege/appmanager.certificate',
APPMANAGER_KILL: 'http://tizen.org/privilege/appmanager.kill',
- BLUETOOTH_ADMIN: 'http://tizen.org/privilege/bluetooth',
- BLUETOOTH_GAP: 'http://tizen.org/privilege/bluetooth',
- BLUETOOTH_HEALTH: 'http://tizen.org/privilege/bluetooth',
- BLUETOOTH_SPP: 'http://tizen.org/privilege/bluetooth',
- BLUETOOTHMANAGER: 'http://tizen.org/privilege/bluetooth.admin',
+ BLUETOOTH_ADMIN: 'http://tizen.org/privilege/bluetooth.admin',
+ BLUETOOTH_GAP: 'http://tizen.org/privilege/bluetooth.gap',
+ BLUETOOTH_HEALTH: 'http://tizen.org/privilege/bluetooth.health',
+ BLUETOOTH_SPP: 'http://tizen.org/privilege/bluetooth.spp',
+ BLUETOOTHMANAGER: 'http://tizen.org/privilege/bluetoothmanager',
BLUETOOTH: 'http://tizen.org/privilege/bluetooth',
- BOOKMARK_READ: 'http://tizen.org/privilege/bookmark.admin',
- BOOKMARK_WRITE: 'http://tizen.org/privilege/bookmark.admin',
+ BOOKMARK_READ: 'http://tizen.org/privilege/bookmark.read',
+ BOOKMARK_WRITE: 'http://tizen.org/privilege/bookmark.write',
CALENDAR_READ: 'http://tizen.org/privilege/calendar.read',
CALENDAR_WRITE: 'http://tizen.org/privilege/calendar.write',
CALLHISTORY_READ: 'http://tizen.org/privilege/callhistory.read',
@@ -93,36 +93,38 @@ function Utils() {
CONTENT_READ: 'http://tizen.org/privilege/content.write',
CONTENT_WRITE: 'http://tizen.org/privilege/content.write',
D2D_DATASHARING: 'http://tizen.org/privilege/d2d.datasharing',
- DATACONTROL_CONSUMER: 'http://tizen.org/privilege/datasharing',
- DATASYNC: 'http://tizen.org/privilege/notexist',
+ DATACONTROL_CONSUMER: 'http://tizen.org/privilege/datacontrol.consumer',
+ DATASYNC: 'http://tizen.org/privilege/datasync',
DOWNLOAD: 'http://tizen.org/privilege/download',
- FILESYSTEM_READ: 'http://tizen.org/privilege/systemsettings.admin',
- FILESYSTEM_WRITE: 'http://tizen.org/privilege/systemsettings.admin',
+ FILESYSTEM_READ: 'http://tizen.org/privilege/filesystem.read',
+ FILESYSTEM_WRITE: 'http://tizen.org/privilege/filesystem.write',
HEALTHINFO: 'http://tizen.org/privilege/healthinfo',
INTERNET: 'http://tizen.org/privilege/internet',
LED: 'http://tizen.org/privilege/led',
LOCATION: 'http://tizen.org/privilege/location',
MEDIACONTROLLER_SERVER: 'http://tizen.org/privilege/mediacontroller.server',
MEDIACONTROLLER_CLIENT: 'http://tizen.org/privilege/mediacontroller.client',
- MESSAGING_READ: 'http://tizen.org/privilege/message.read',
- MESSAGING_WRITE: 'http://tizen.org/privilege/message.write',
- NETWORKBEARERSELECTION: 'http://tizen.org/privilege/network.set',
+ MESSAGING_READ: 'http://tizen.org/privilege/messaging.read',
+ MESSAGING_WRITE: 'http://tizen.org/privilege/messaging.write',
+ NETWORKBEARERSELECTION: 'http://tizen.org/privilege/networkbearerselection',
NFC_ADMIN: 'http://tizen.org/privilege/nfc.admin',
NFC_CARDEMULATION: 'http://tizen.org/privilege/nfc.cardemulation',
- NFC_COMMON: 'http://tizen.org/privilege/nfc',
- NFC_P2P: 'http://tizen.org/privilege/nfc',
- NFC_TAG: 'http://tizen.org/privilege/nfc',
+ NFC_COMMON: 'http://tizen.org/privilege/nfc.common',
+ NFC_P2P: 'http://tizen.org/privilege/nfc.p2p',
+ NFC_TAG: 'http://tizen.org/privilege/nfc.tag',
NOTIFICATION: 'http://tizen.org/privilege/notification',
PACKAGE_INFO: 'http://tizen.org/privilege/packagemanager.info',
- PACKAGEMANAGER_INSTALL: 'http://tizen.org/privilege/packagemanager.admin',
- POWER: 'http://tizen.org/privilege/display',
+ PACKAGEMANAGER_INSTALL: 'http://tizen.org/privilege/packagemanager.install',
+ POWER: 'http://tizen.org/privilege/power',
PUSH: 'http://tizen.org/privilege/push',
SECUREELEMENT: 'http://tizen.org/privilege/secureelement',
- SETTING: 'http://tizen.org/privilege/systemsettings.admin',
- SYSTEM: 'http://tizen.org/privilege/telephony',
- SYSTEMMANAGER: 'http://tizen.org/privilege/telephony',
+ SETTING_ADMIN: 'http://tizen.org/privilege/systemsettings.admin',
+ SETTING: 'http://tizen.org/privilege/setting',
+ SYSTEM: 'http://tizen.org/privilege/system',
+ SYSTEMMANAGER: 'http://tizen.org/privilege/systemmanager',
TELEPHONY: 'http://tizen.org/privilege/telephony',
- VOLUME_SET: 'http://tizen.org/privilege/volume.set'
+ VOLUME_SET: 'http://tizen.org/privilege/volume.set',
+ WEBSETTING: 'http://tizen.org/privilege/websetting'
};
Object.freeze(privilege);
diff --git a/src/utils/utils_instance.cc b/src/utils/utils_instance.cc
index 96a7e4ed..be751eeb 100644
--- a/src/utils/utils_instance.cc
+++ b/src/utils/utils_instance.cc
@@ -6,8 +6,6 @@
#include
#include
#include
-#include
-#include
#include "common/logger.h"
#include "common/scope_exit.h"
@@ -44,63 +42,11 @@ UtilsInstance::UtilsInstance() {
void UtilsInstance::GetPkgApiVersion(const picojson::value& args, picojson::object& out) {
LoggerD("Entered");
- char* app_id = nullptr;
- char* pkgid = nullptr;
- app_info_h app_handle = nullptr;
- pkgmgrinfo_pkginfo_h pkginfo_handle = nullptr;
- char *api_version = nullptr;
-
- SCOPE_EXIT {
- if (app_id) {
- free(app_id);
- }
- if (pkgid) {
- free(pkgid);
- }
- if (app_handle) {
- app_info_destroy(app_handle);
- }
- if (pkginfo_handle) {
- pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo_handle);
- }
- };
-
- pid_t pid = getpid();
- int ret = app_manager_get_app_id(pid, &app_id);
- if (ret != APP_MANAGER_ERROR_NONE) {
- LoggerE("Failed to get app id");
- ReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Failed to get app id"), &out);
- return;
- }
-
- ret = app_info_create(app_id, &app_handle);
- if (ret != APP_MANAGER_ERROR_NONE) {
- LoggerE("Fail to get app info");
- ReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Fail to get app info"), &out);
- return;
+ std::string api_version;
+ PlatformResult ret = common::tools::GetPkgApiVersion(&api_version);
+ if (ret.IsError()) {
+ ReportError(ret, &out);
}
-
- ret = app_info_get_package(app_handle, &pkgid);
- if ((ret != APP_MANAGER_ERROR_NONE) || (pkgid == nullptr)) {
- LoggerE("Fail to get pkg id");
- ReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Fail to get pkg id"), &out);
- return;
- }
-
- ret = pkgmgrinfo_pkginfo_get_usr_pkginfo(pkgid, getuid(), &pkginfo_handle);
- if (ret != PMINFO_R_OK) {
- LoggerE("Fail to get pkginfo_h");
- ReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Fail to get pkginfo_h"), &out);
- return;
- }
-
- ret = pkgmgrinfo_pkginfo_get_api_version(pkginfo_handle, &api_version);
- if (ret != PMINFO_R_OK) {
- LoggerE("Fail to get api version");
- ReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Fail to get api version"), &out);
- return;
- }
-
ReportSuccess(picojson::value(api_version), out);
}