• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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