Add Check logic
[platform/core/security/privacy-manager.git] / client / src / PrivacyManagerClient.cpp
1 /*\r
2  * Copyright (c) 2012 Samsung Electronics Co., Ltd All Rights Reserved\r
3  *\r
4  *    Licensed under the Apache License, Version 2.0 (the "License");\r
5  *    you may not use this file except in compliance with the License.\r
6  *    You may obtain a copy of the License at\r
7  *\r
8  *        http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  *    Unless required by applicable law or agreed to in writing, software\r
11  *    distributed under the License is distributed on an "AS IS" BASIS,\r
12  *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  *    See the License for the specific language governing permissions and\r
14  *    limitations under the License.\r
15  */\r
16 \r
17 #include <PrivacyManagerClient.h>\r
18 #include <SocketClient.h>\r
19 #include <PrivacyIdInfo.h>\r
20 #include <algorithm> \r
21 #include <memory>\r
22 #include <Utils.h>\r
23 \r
24 std::mutex PrivacyManagerClient::m_singletonMutex;\r
25 PrivacyManagerClient* PrivacyManagerClient::m_pInstance = NULL;\r
26 const std::string PrivacyManagerClient::INTERFACE_NAME("PrivacyInfoService");\r
27 \r
28 PrivacyManagerClient::PrivacyManagerClient(void)\r
29 {\r
30         std::unique_ptr<SocketClient> pSocketClient(new SocketClient(INTERFACE_NAME));\r
31         m_pSocketClient = std::move(pSocketClient);\r
32 }\r
33 \r
34 PrivacyManagerClient*\r
35 PrivacyManagerClient::getInstance(void)\r
36 {\r
37         std::lock_guard<std::mutex> guard(m_singletonMutex);\r
38         if (m_pInstance == NULL)\r
39                 m_pInstance = new PrivacyManagerClient();\r
40         return m_pInstance;\r
41 }\r
42 \r
43 int\r
44 PrivacyManagerClient::addAppPackagePrivacyInfo(const std::string pkgId, const std::list < std::string >& pList)\r
45 {\r
46 \r
47         std::list < std::string > privacyList;\r
48 \r
49         int res = PrivacyIdInfo::getPrivacyIdListFromPrivilegeList(pList, privacyList);\r
50         if (res != PRIV_MGR_ERROR_SUCCESS )\r
51                 return res;\r
52 \r
53         if (privacyList.size() == 0)\r
54                 return PRIV_MGR_ERROR_SUCCESS;\r
55 \r
56 #ifdef __READ_DB_IPC__\r
57         m_pSocketClient->connect();\r
58         m_pSocketClient->call("addPrivacyInfo", pkgId, privacyList, &result);\r
59         m_pSocketClient->disconnect();\r
60 \r
61         return result;\r
62 #else\r
63         LOGI("enter");\r
64 \r
65         static const std::string pkgInfoQuery("INSERT INTO PackageInfo(PKG_ID, IS_SET) VALUES(?, ?)");\r
66         static const std::string privacyQuery("INSERT INTO PrivacyInfo(PKG_ID, PRIVACY_ID, IS_ENABLED) VALUES(?, ?, ?)");\r
67         \r
68         openDb(PRIVACY_DB_PATH.c_str(), pDbHandler, SQLITE_OPEN_READWRITE);\r
69         prepareDb(pDbHandler, pkgInfoQuery.c_str(), pPkgInfoStmt);\r
70 \r
71         res = sqlite3_bind_text(pPkgInfoStmt.get(), 1, pkgId.c_str(), -1, SQLITE_TRANSIENT);\r
72         TryReturn( res == SQLITE_OK, PRIV_MGR_ERROR_DB_ERROR, , "sqlite3_bind_text : %d", res);\r
73         \r
74         res = sqlite3_bind_int(pPkgInfoStmt.get(), 2, 0);\r
75         TryReturn( res == SQLITE_OK, PRIV_MGR_ERROR_DB_ERROR, , "sqlite3_bind_int : %d", res);\r
76 \r
77         res = sqlite3_step(pPkgInfoStmt.get());\r
78         TryReturn( res == SQLITE_DONE || res == SQLITE_CONSTRAINT, PRIV_MGR_ERROR_DB_ERROR, , "sqlite3_step : %d", res);\r
79         \r
80         prepareDb(pDbHandler, privacyQuery.c_str(), pPrivacyStmt);\r
81         for ( std::list <std::string>::const_iterator iter = privacyList.begin(); iter != privacyList.end(); ++iter)\r
82         {\r
83                 LOGD(" install privacy: %s", iter->c_str());\r
84                 \r
85                 res = sqlite3_bind_text(pPrivacyStmt.get(), 1, pkgId.c_str(), -1, SQLITE_TRANSIENT);\r
86                 TryReturn( res == SQLITE_OK, PRIV_MGR_ERROR_DB_ERROR, , "sqlite3_bind_int : %d", res);\r
87 \r
88                 res = sqlite3_bind_text(pPrivacyStmt.get(), 2, iter->c_str(), -1, SQLITE_TRANSIENT);\r
89                 TryReturn( res == SQLITE_OK, PRIV_MGR_ERROR_DB_ERROR, , "sqlite3_bind_text : %d", res);\r
90                 \r
91                 // Before setting app and popup is ready, default value is true\r
92                 res = sqlite3_bind_int(pPrivacyStmt.get(), 3, 1);\r
93                 TryReturn( res == SQLITE_OK, PRIV_MGR_ERROR_DB_ERROR, , "sqlite3_bind_int : %d", res);\r
94 \r
95                 res = sqlite3_step(pPrivacyStmt.get());\r
96                 TryReturn( res == SQLITE_DONE || res == SQLITE_CONSTRAINT, PRIV_MGR_ERROR_DB_ERROR, , "sqlite3_step : %d", res);\r
97 \r
98                 sqlite3_reset(pPrivacyStmt.get());\r
99         }\r
100 \r
101         return 0;\r
102 #endif\r
103 }\r
104 \r
105 int\r
106 PrivacyManagerClient::removeAppPackagePrivacyInfo(const std::string pkgId)\r
107 {\r
108         int result;\r
109         m_pSocketClient->connect();\r
110         m_pSocketClient->call("removePrivacyInfo", pkgId, &result);\r
111         m_pSocketClient->disconnect();\r
112 \r
113         return result;\r
114 }\r
115 \r
116 int\r
117 PrivacyManagerClient::setPrivacySetting(const std::string pkgId, const std::string privacyId, bool isEnabled)\r
118 {\r
119         int result;\r
120         m_pSocketClient->connect();\r
121         m_pSocketClient->call("setPrivacySetting", pkgId, privacyId, isEnabled, &result);\r
122         m_pSocketClient->disconnect();\r
123 \r
124         return result;\r
125 }\r
126         \r
127 int\r
128 PrivacyManagerClient::getPrivacyAppPackages(std::list < std::string >& pList)\r
129 {\r
130         int result, size;\r
131         std::string temp1;\r
132         SocketClient* p = new SocketClient(INTERFACE_NAME);\r
133         p->connect();\r
134         p->call("getPrivacyAppPackages", &result, &size, &pList);\r
135         p->disconnect();\r
136 \r
137         return result;\r
138 }\r
139 \r
140 int\r
141 PrivacyManagerClient::getAppPackagePrivacyInfo(const std::string pkgId, std::list < std::pair <std::string, bool > > & list)\r
142 {\r
143 \r
144         std::unique_ptr <SocketClient> pSocketClient (new SocketClient(INTERFACE_NAME));\r
145 \r
146         int result;\r
147         pSocketClient->connect();\r
148         pSocketClient->call("getAppPackagePrivacyInfo", pkgId, &result, &list);\r
149 \r
150         pSocketClient->disconnect();\r
151 \r
152         for (std::list < std::pair <std::string, bool > >::const_iterator iter = list.begin(); iter != list.end(); ++iter){\r
153                 LOGD(" %s : %d", iter->first.c_str(), iter->second);\r
154         }\r
155 \r
156         return result;\r
157 }\r
158 \r
159 int\r
160 PrivacyManagerClient::isUserPrompted(const std::string pkgId, bool& isPrompted)\r
161 {\r
162         LOGI("enter");\r
163 \r
164         std::unique_ptr <SocketClient> pSocketClient (new SocketClient(INTERFACE_NAME));\r
165 \r
166         int result;\r
167         pSocketClient->connect();\r
168         pSocketClient->call("isUserPrompted", pkgId, &result, &isPrompted);\r
169         pSocketClient->disconnect();\r
170 \r
171         LOGI("leave");\r
172 \r
173         return result;\r
174 }\r
175 \r
176 int\r
177 PrivacyManagerClient::setUserPrompted(const std::string pkgId, bool prompted)\r
178 {\r
179         LOGI("enter");\r
180 \r
181         std::unique_ptr <SocketClient> pSocketClient (new SocketClient(INTERFACE_NAME));\r
182 \r
183         int result;\r
184         pSocketClient->connect();\r
185         pSocketClient->call("setUserPrompted", pkgId, prompted, &result);\r
186         pSocketClient->disconnect();\r
187         LOGI("leave");\r
188 \r
189         return result;\r
190 }