1 /*
2 * Copyright (c) 2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "edm_command.h"
17
18 #include <iostream>
19 #include <string_ex.h>
20
21 #include "element_name.h"
22
23 namespace OHOS {
24 namespace EDM {
25 constexpr int32_t ARR_INDEX_ZERO = 0;
26 constexpr int32_t ARR_INDEX_ONE = 1;
27 constexpr int32_t ARR_INDEX_TWO = 2;
28
29 constexpr size_t ARGS_SIZE_TWO = 2;
30 constexpr size_t ARGS_SIZE_THREE = 3;
31
32 constexpr int32_t DEFAULT_USER_ID = 100;
33
EdmCommand(int argc,char * argv[])34 EdmCommand::EdmCommand(int argc, char *argv[])
35 : ShellCommand(argc, argv, TOOL_NAME)
36 {}
37
CreateCommandMap()38 ErrCode EdmCommand::CreateCommandMap()
39 {
40 commandMap_ = {
41 { "help", std::bind(&EdmCommand::RunAsHelpCommand, this) },
42 { "activate-admin", std::bind(&EdmCommand::RunAsActivateAdminCommand, this) },
43 { "activate-super-admin",
44 std::bind(&EdmCommand::RunAsActivateSuperAdminCommand, this) },
45 { "deactivate-admin",
46 std::bind(&EdmCommand::RunDeactivateNormalAdminCommand, this) },
47 { "deactivate-super-admin",
48 std::bind(&EdmCommand::RunDeactivateSuperAdminCommand, this) },
49 };
50
51 return ERR_OK;
52 }
53
CreateMessageMap()54 ErrCode EdmCommand::CreateMessageMap()
55 {
56 messageMap_ = { // error + message
57 {
58 ERR_EDM_ADD_ADMIN_FAILED,
59 "error: add admin internal error.",
60 },
61 {
62 ERR_EDM_PERMISSION_ERROR,
63 "error: permission check failed.",
64 },
65 {
66 ERR_EDM_BMS_ERROR,
67 "error: get bundle manager or query infos failed.",
68 },
69 {
70 ERR_EDM_DENY_PERMISSION,
71 "error: permission requested by app is not allowed.",
72 },
73 {
74 ERR_EDM_DEL_ADMIN_FAILED,
75 "error: deactive admin internal error.",
76 },
77 {
78 ERR_EDM_GET_PLUGIN_MGR_FAILED,
79 "error: get plugin manager internal error.",
80 },
81 {
82 ERR_EDM_PARAM_ERROR,
83 "error: param count or value invalid",
84 }
85 };
86
87 return ERR_OK;
88 }
89
init()90 ErrCode EdmCommand::init()
91 {
92 ErrCode result = ERR_OK;
93
94 if (!enterpriseDeviceMgrProxy_) {
95 enterpriseDeviceMgrProxy_ = EnterpriseDeviceMgrProxy::GetInstance();
96 }
97
98 if (!enterpriseDeviceMgrProxy_) {
99 result = OHOS::ERR_INVALID_VALUE;
100 }
101
102 return result;
103 }
104
RunAsHelpCommand()105 ErrCode EdmCommand::RunAsHelpCommand()
106 {
107 resultReceiver_.append(HELP_MSG);
108
109 return ERR_OK;
110 }
111
RunAsActivateAdminCommand()112 ErrCode EdmCommand::RunAsActivateAdminCommand()
113 {
114 return RunAsActivateCommand(AdminType::NORMAL);
115 }
116
RunAsActivateSuperAdminCommand()117 ErrCode EdmCommand::RunAsActivateSuperAdminCommand()
118 {
119 return RunAsActivateCommand(AdminType::ENT);
120 }
121
RunAsActivateCommand(AdminType type)122 ErrCode EdmCommand::RunAsActivateCommand(AdminType type)
123 {
124 std::cout << "argc = " << argc_ << std::endl;
125 if (argc_ != ARGS_SIZE_THREE) {
126 resultReceiver_.append(GetMessageFromCode(ERR_EDM_PARAM_ERROR));
127 return ERR_EDM_PARAM_ERROR;
128 }
129 std::vector<std::string> elementNameStr = split(argv_[ARR_INDEX_TWO], "/");
130 if (elementNameStr.size() != ARGS_SIZE_TWO) {
131 resultReceiver_.append(GetMessageFromCode(ERR_EDM_PARAM_ERROR));
132 return ERR_EDM_PARAM_ERROR;
133 }
134 OHOS::AppExecFwk::ElementName elementName;
135 elementName.SetElementBundleName(&elementName, elementNameStr[ARR_INDEX_ZERO].c_str());
136 elementName.SetElementAbilityName(&elementName, elementNameStr[ARR_INDEX_ONE].c_str());
137 EntInfo info;
138 ErrCode result = enterpriseDeviceMgrProxy_->ActivateAdmin(elementName, info, type, DEFAULT_USER_ID);
139 if (result != ERR_OK) {
140 resultReceiver_.append(GetMessageFromCode(result));
141 }
142 return result;
143 }
144
split(const std::string & str,const std::string & pattern)145 std::vector<std::string> EdmCommand::split(const std::string &str, const std::string &pattern)
146 {
147 std::vector<std::string> res;
148 if (str == "") {
149 return res;
150 }
151 std::string strs = str + pattern;
152 size_t pos = strs.find(pattern);
153
154 while (pos != strs.npos) {
155 std::string temp = strs.substr(0, pos);
156 res.push_back(temp);
157 strs = strs.substr(pos + 1, strs.size());
158 pos = strs.find(pattern);
159 }
160 return res;
161 }
162
RunDeactivateNormalAdminCommand()163 ErrCode EdmCommand::RunDeactivateNormalAdminCommand()
164 {
165 std::cout << "argc = " << argc_ << std::endl;
166 if (argc_ != ARGS_SIZE_THREE) {
167 resultReceiver_.append(GetMessageFromCode(ERR_EDM_PARAM_ERROR));
168 return ERR_EDM_PARAM_ERROR;
169 }
170 for (int i = 0; i < argc_; ++i) {
171 std::cout << "argv[" << i << "] = " << argv_[i] << std::endl;
172 }
173 std::vector<std::string> elementNameStr = split(argv_[ARR_INDEX_TWO], "/");
174 std::cout << "elementNameStr.size() = " << elementNameStr.size() << std::endl;
175 if (elementNameStr.size() != ARGS_SIZE_TWO) {
176 resultReceiver_.append(GetMessageFromCode(ERR_EDM_PARAM_ERROR));
177 return ERR_EDM_PARAM_ERROR;
178 }
179 OHOS::AppExecFwk::ElementName elementName;
180 elementName.SetElementBundleName(&elementName, elementNameStr[ARR_INDEX_ZERO].c_str());
181 elementName.SetElementAbilityName(&elementName, elementNameStr[ARR_INDEX_ONE].c_str());
182 ErrCode result = enterpriseDeviceMgrProxy_->DeactivateAdmin(elementName, DEFAULT_USER_ID);
183 if (result != ERR_OK) {
184 resultReceiver_.append(GetMessageFromCode(result));
185 }
186 return result;
187 }
188
RunDeactivateSuperAdminCommand()189 ErrCode EdmCommand::RunDeactivateSuperAdminCommand()
190 {
191 std::cout << "argc = " << argc_ << std::endl;
192 if (argc_ != ARGS_SIZE_THREE) {
193 resultReceiver_.append(GetMessageFromCode(ERR_EDM_PARAM_ERROR));
194 return ERR_EDM_PARAM_ERROR;
195 }
196 for (int i = 0; i < argc_; ++i) {
197 std::cout << "argv[" << i << "] = " << argv_[i] << std::endl;
198 }
199 std::vector<std::string> elementNameStr = split(argv_[ARR_INDEX_TWO], "/");
200 std::cout << "elementNameStr.size() = " << elementNameStr.size() << std::endl;
201 if (elementNameStr.size() != ARGS_SIZE_TWO) {
202 resultReceiver_.append(GetMessageFromCode(ERR_EDM_PARAM_ERROR));
203 return ERR_EDM_PARAM_ERROR;
204 }
205 ErrCode result = enterpriseDeviceMgrProxy_->DeactivateSuperAdmin(elementNameStr[ARR_INDEX_ZERO]);
206 if (result != ERR_OK) {
207 resultReceiver_.append(GetMessageFromCode(result));
208 }
209 return result;
210 }
211 } // namespace EDM
212 } // namespace OHOS
213