• 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         { "enable-admin", std::bind(&EdmCommand::RunAsEnableAdminCommand, this) },
43         { "enable-super-admin",
44         std::bind(&EdmCommand::RunAsEnableSuperAdminCommand, this) },
45         { "disable-admin",
46         std::bind(&EdmCommand::RunDisableNormalAdminCommand, this) },
47     };
48 
49     return ERR_OK;
50 }
51 
CreateMessageMap()52 ErrCode EdmCommand::CreateMessageMap()
53 {
54     messageMap_ = { //  error + message
55         {
56             ERR_EDM_ADD_ADMIN_FAILED,
57             "error: add admin internal error.",
58         },
59         {
60             ERR_EDM_PERMISSION_ERROR,
61             "error: permission check failed.",
62         },
63         {
64             ERR_EDM_BMS_ERROR,
65             "error: get bundle manager or query infos failed.",
66         },
67         {
68             ERR_EDM_DENY_PERMISSION,
69             "error: permission requested by app is not allowed.",
70         },
71         {
72             ERR_EDM_DEL_ADMIN_FAILED,
73             "error: disable admin internal error.",
74         },
75         {
76             ERR_EDM_GET_PLUGIN_MGR_FAILED,
77             "error: get plugin manager internal error.",
78         },
79         {
80             ERR_EDM_PARAM_ERROR,
81             "error: param count or value invalid",
82         }
83     };
84 
85     return ERR_OK;
86 }
87 
init()88 ErrCode EdmCommand::init()
89 {
90     if (!enterpriseDeviceMgrProxy_) {
91         enterpriseDeviceMgrProxy_ = EnterpriseDeviceMgrProxy::GetInstance();
92     }
93     return ERR_OK;
94 }
95 
RunAsHelpCommand()96 ErrCode EdmCommand::RunAsHelpCommand()
97 {
98     resultReceiver_.append(HELP_MSG);
99 
100     return ERR_OK;
101 }
102 
RunAsEnableAdminCommand()103 ErrCode EdmCommand::RunAsEnableAdminCommand()
104 {
105     return RunAsEnableCommand(AdminType::NORMAL);
106 }
107 
RunAsEnableSuperAdminCommand()108 ErrCode EdmCommand::RunAsEnableSuperAdminCommand()
109 {
110     return RunAsEnableCommand(AdminType::ENT);
111 }
112 
RunAsEnableCommand(AdminType type)113 ErrCode EdmCommand::RunAsEnableCommand(AdminType type)
114 {
115     std::cout << "argc = " << argc_ << std::endl;
116     if (argc_ != ARGS_SIZE_THREE) {
117         resultReceiver_.append(GetMessageFromCode(ERR_EDM_PARAM_ERROR));
118         return ERR_EDM_PARAM_ERROR;
119     }
120     std::vector<std::string> elementNameStr = split(argv_[ARR_INDEX_TWO], "/");
121     if (elementNameStr.size() != ARGS_SIZE_TWO) {
122         resultReceiver_.append(GetMessageFromCode(ERR_EDM_PARAM_ERROR));
123         return ERR_EDM_PARAM_ERROR;
124     }
125     OHOS::AppExecFwk::ElementName elementName;
126     elementName.SetElementBundleName(&elementName, elementNameStr[ARR_INDEX_ZERO].c_str());
127     elementName.SetElementAbilityName(&elementName, elementNameStr[ARR_INDEX_ONE].c_str());
128     EntInfo info;
129     ErrCode result = enterpriseDeviceMgrProxy_->EnableAdmin(elementName, info, type, DEFAULT_USER_ID);
130     if (result != ERR_OK) {
131         resultReceiver_.append(GetMessageFromCode(result));
132     }
133     return result;
134 }
135 
split(const std::string & str,const std::string & pattern)136 std::vector<std::string> EdmCommand::split(const std::string &str, const std::string &pattern)
137 {
138     std::vector<std::string> res;
139     if (str == "") {
140         return res;
141     }
142     std::string strs = str + pattern;
143     size_t pos = strs.find(pattern);
144 
145     while (pos != strs.npos) {
146         std::string temp = strs.substr(0, pos);
147         res.push_back(temp);
148         strs = strs.substr(pos + 1, strs.size());
149         pos = strs.find(pattern);
150     }
151     return res;
152 }
153 
RunDisableNormalAdminCommand()154 ErrCode EdmCommand::RunDisableNormalAdminCommand()
155 {
156     std::cout << "argc = " << argc_ << std::endl;
157     if (argc_ != ARGS_SIZE_THREE) {
158         resultReceiver_.append(GetMessageFromCode(ERR_EDM_PARAM_ERROR));
159         return ERR_EDM_PARAM_ERROR;
160     }
161     for (int i = 0; i < argc_; ++i) {
162         std::cout << "argv[" << i << "] = " << argv_[i] << std::endl;
163     }
164     std::vector<std::string> elementNameStr = split(argv_[ARR_INDEX_TWO], "/");
165     std::cout << "elementNameStr.size() = " << elementNameStr.size() << std::endl;
166     if (elementNameStr.size() != ARGS_SIZE_TWO) {
167         resultReceiver_.append(GetMessageFromCode(ERR_EDM_PARAM_ERROR));
168         return ERR_EDM_PARAM_ERROR;
169     }
170     OHOS::AppExecFwk::ElementName elementName;
171     elementName.SetElementBundleName(&elementName, elementNameStr[ARR_INDEX_ZERO].c_str());
172     elementName.SetElementAbilityName(&elementName, elementNameStr[ARR_INDEX_ONE].c_str());
173     ErrCode result = enterpriseDeviceMgrProxy_->DisableAdmin(elementName, DEFAULT_USER_ID);
174     if (result != ERR_OK) {
175         resultReceiver_.append(GetMessageFromCode(result));
176     }
177     return result;
178 }
179 } // namespace EDM
180 } // namespace OHOS
181