PluginProbe
WebTotem Security / 2.1
WebTotem Security v2.1
3.0.2 3.0.1 3.0.0 trunk 1.0 1.1 1.2 1.3 1.3.1 1.3.2 1.3.3 2.0 2.1 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.1 2.2.2 2.2.3 All 110 releases
← All changes | services.php +97 -183 2.2.32.1 View file →
@@ -1,137 +1,89 @@
1 1 <?php defined('ABSPATH') or die("Protected By WT!");
2 2
3 -function wtsec_cmd($cmd, $service, $_service, $uid, $status, $domain = '')
4 -{
5 - global $wp_filesystem;
3 +function wtsec_cmd($wp_filesystem,$cmd, $service, $_service, $uid, $status,$domain = ''){
6 4
7 - //bug fix with wp file system, which return null
8 - if (empty($wp_filesystem)) {
9 - require_once(ABSPATH . '/wp-admin/includes/file.php');
10 - WP_Filesystem();
11 - }
12 -
13 - //retry checking
14 - if (empty($wp_filesystem)) {
15 - WTSEC_LIBRARY_Session::setNotification("error", "WP FileSystem path error");
16 - return false;
17 - }
18 -
19 5 switch ($cmd) {
20 6 case $_service . "_install":
21 7 try {
22 8 $file = wtsec_generateFile($uid, $service);
23 - if (is_null($file['name'])) {
24 - WTSEC_LIBRARY_Session::setNotification("error", wtsec_locale("failed_to_download_agent"));
25 - return false;
9 + if($service === "WAF"){
10 + $plugin_path = str_replace(ABSPATH, $wp_filesystem->abspath(), WTSEC_INSTALLATION_DIR);
11 + $path = $plugin_path;
12 + $target_dir = $wp_filesystem->find_folder($path);
13 + if(!$wp_filesystem->is_dir($path)) {
14 + $wp_filesystem->mkdir($target_dir);
26 15 }
27 - if ($service === "WAF") {
28 - $plugin_path = str_replace(ABSPATH, $wp_filesystem->abspath(), WTSEC_INSTALLATION_DIR);
29 - $path = $plugin_path;
30 - $target_dir = $wp_filesystem->find_folder($path);
31 - if (!$wp_filesystem->is_dir($path)) {
32 - $wp_filesystem->mkdir($target_dir);
33 - }
34 - $target_file = trailingslashit($target_dir) . $file['name'];
35 - if (!$wp_filesystem->put_contents($target_file, $file['file'], FS_CHMOD_FILE)) {
36 - WTSEC_LIBRARY_Session::setNotification("warning", WTSEC_LIBRARY_Localization::lmsg('could_not_install_file', ['service' => $service, 'directory' => $target_dir]));
37 - } else {
38 - wtsec_app()->set($_service . '_installed_file', $file['name']);
39 - }
40 - } else {
16 + $target_file = trailingslashit($target_dir).$file['name'];
17 + if (!$wp_filesystem->put_contents($target_file, $file['file'], FS_CHMOD_FILE)){
18 + WTSEC_LIBRARY_Session::setNotification("warning",WTSEC_LIBRARY_Localization::lmsg('could_not_install_file', ['service' => $service,'directory' => $target_dir]));
19 + }else{
20 + wtsec_app()->set($_service . '_installed_file',$file['name']);
21 + }
22 + }else{
41 23 $target_dir = $wp_filesystem->find_folder($wp_filesystem->abspath());
42 - $target_file = trailingslashit($target_dir) . $file['name'];
43 - if (!$wp_filesystem->put_contents($target_file, $file['file'])) {
44 - WTSEC_LIBRARY_Session::setNotification("warning", WTSEC_LIBRARY_Localization::lmsg('could_not_install_file', ['service' => $service, 'directory' => $target_dir]));
45 - } else {
46 - wtsec_app()->set($_service . '_installed_file', $file['name']);
47 - if ($service === "AM") {
48 - wtsec_addCheckFile($file['name']);
49 - }
24 + $target_file = trailingslashit($target_dir).$file['name'];
25 + if(!$wp_filesystem->put_contents($target_file, $file['file'])) {
26 + WTSEC_LIBRARY_Session::setNotification("warning",WTSEC_LIBRARY_Localization::lmsg('could_not_install_file', ['service' => $service,'directory' => $target_dir]));
27 + }else{
28 + wtsec_app()->set($_service . '_installed_file',$file['name']);
50 29 }
51 30 }
52 - if ($service !== "AM") {
53 - //wtsec_serviceConnect($uid, $service, $domain . '/' . $file['name']);
54 - }
31 + wtsec_serviceConnect($uid, $service,$domain.'/'.$file['name']);
55 32 } catch (Exception $e) {
56 - WTSEC_LIBRARY_Session::setNotification("error", $e->getMessage());
57 - return false;
33 + print_r($e->getMessage());
34 + die();
58 35 }
59 36 break;
60 37 case $_service . "_start":
61 - WTSEC_LIBRARY_WT::changeStatus($status['config_id'], $uid);
62 - wtsec_app()->set($_service . '_status', "start");
38 + WTSEC_LIBRARY_WT::changeStatus($status['config_id'],$uid);
39 + wtsec_app()->set($_service.'_status',"start");
63 40 break;
64 41 case $_service . "_stop":
65 42 // WTSEC_LIBRARY_WT::changeStatus($status['config_id'],$uid);
66 - wtsec_app()->set($_service . '_status', "stop");
43 + wtsec_app()->set($_service.'_status',"stop");
67 44 break;
68 45 case $_service . "_connect":
69 46 $file = wtsec_getInstalledFile($_service);
70 47 if ($file) {
71 - //wtsec_serviceConnect($uid, $service, $domain . '/' . $file);
72 - } else {
73 - WTSEC_LIBRARY_Session::setNotification("warning", WTSEC_LIBRARY_Localization::lmsg('file_not_found', ['service' => $service]));
48 + wtsec_serviceConnect($uid, $service, $domain . '/' . $file);
49 + }else{
50 + WTSEC_LIBRARY_Session::setNotification("warning",WTSEC_LIBRARY_Localization::lmsg('file_not_found', ['service' => $service]));
74 51 }
75 52 break;
76 53 case $_service . "_uninstall":
77 54 try {
78 55 $file = wtsec_getInstalledFile($_service);
79 - if ($service === "WAF") {
56 + if($service === "WAF"){
80 57 $plugin_path = str_replace(ABSPATH, $wp_filesystem->abspath(), WTSEC_INSTALLATION_DIR);
81 58 $mainDir = $plugin_path;
82 - } else {
59 + }else{
83 60 $mainDir = $wp_filesystem->abspath();
84 61 }
85 62 $target_dir = $wp_filesystem->find_folder($mainDir);
86 - $target_file = trailingslashit($mainDir) . $file;
63 + $target_file = trailingslashit($mainDir).$file;
87 64 if (!$wp_filesystem->delete($target_file)) {
88 - WTSEC_LIBRARY_Session::setNotification("warning", WTSEC_LIBRARY_Localization::lmsg('could_not_uninstall_file', ['service' => $service, 'directory' => $target_dir]));
65 + WTSEC_LIBRARY_Session::setNotification("warning",WTSEC_LIBRARY_Localization::lmsg('could_not_uninstall_file', ['service' => $service,'directory' => $target_dir]));
89 66 }
90 67 wtsec_app()->set($_service . '_status', "uninstalled");
91 68 WTSEC_LIBRARY_App::deleteOption($_service . '_installed_file');
92 69 } catch (Exception $e) {
93 - WTSEC_LIBRARY_Session::setNotification("error", $e->getMessage());
94 - return false;
70 + print_r($e->getMessage());
71 + die();
95 72 }
96 73 break;
97 74 }
98 - return true;
99 75 }
100 76
101 -// Add check file if plugin is activated
102 -function wtsec_addCheckFile($name){
103 - global $wp_filesystem;
104 -
105 - if (empty($wp_filesystem)) {
106 - require_once(ABSPATH . '/wp-admin/includes/file.php');
107 - WP_Filesystem();
108 - }
109 -
110 - //retry checking
111 - if (empty($wp_filesystem)) {
112 - WTSEC_LIBRARY_Session::setNotification("error", "WP FileSystem path error");
113 - return false;
114 - }
115 -
116 - $target_dir = $wp_filesystem->find_folder(WTSEC_PLUGIN_PATH);
117 - $target_file = trailingslashit($target_dir) . 'generate.php';
118 -
119 - if ($wp_filesystem->put_contents($target_file, '<?php exit(); ?>'.$name, FS_CHMOD_FILE)) {
120 - return true;
121 - }
122 - return false;
123 -}
124 -
125 77 function wtsec_checkStatus($id, $service)
126 78 {
127 79 $service = ucfirst(strtolower($service));
128 80 $is_active = null;
129 81 $config_id = null;
130 - $result = WTSEC_LIBRARY_WT::checkStatus($id, $service);
82 + $result = WTSEC_LIBRARY_WT::checkStatus($id,$service);
131 83 $data = $result['data']['auth']['viewer']['sites']['one']['configs'];
132 - foreach ($data as &$cfg) {
133 - if (!empty($cfg)) {
84 + foreach ($data as &$cfg){
85 + if(!empty($cfg)){
134 86 $is_active = $cfg['isActive'];
135 87 $config_id = $cfg['id'];
136 88 }
137 89 }
@@ -141,61 +93,37 @@
141 93 }
142 94 return ['active' => $is_active, 'config_id' => $config_id];
143 95 }
144 96
97 +
98 +
145 99 function wtsec_generateFile($id, $service)
146 100 {
147 - if ($service === "AM") {
148 - $result = WTSEC_LIBRARY_WT::generateAmFile($id);
149 - if (!isset($result['data']['auth']['am']['install'])) {
150 - $file = ['filename' => null, "body" => null];
151 - } else {
152 - $result = $result['data']['auth']['am']['install'];
153 -
154 - $url = $result['downloadLink'];
155 - $amFilename = $result['amFilename'];
156 - $wafFilename = $result['wafFilename'];
157 -
158 - if($wafFilename){
159 - wtsec_app()->set('waf_installed_file', $wafFilename);
160 - }
161 -
162 - $file = WTSEC_LIBRARY_WT::getFileByUrl($url, $amFilename);
163 - if (empty($file)) {
164 - $file = WTSEC_LIBRARY_WT::getFileByUrl($url, $amFilename);
165 - }
166 - }
167 -
168 - $name = $file["filename"];
169 - $file = $file["body"];
170 - } else {
171 - $result = WTSEC_LIBRARY_WT::generateFile($id, $service);
172 - $name = $result['data']['auth']['agents']['generate']['agentName'];
101 + $result = WTSEC_LIBRARY_WT::generateFile($id,$service);
102 + $name = $result['data']['auth']['agents']['generate']['agentName'];
103 + $file = WTSEC_LIBRARY_WT::requestURL(WTSEC_FILE_URL . '/' . $name);
104 + if(empty($file)){
173 105 $file = WTSEC_LIBRARY_WT::requestURL(WTSEC_FILE_URL . '/' . $name);
174 - if (empty($file)) {
175 - $file = WTSEC_LIBRARY_WT::requestURL(WTSEC_FILE_URL . '/' . $name);
176 - }
177 106 }
178 -
179 107 return ['file' => $file, 'name' => $name];
180 108 }
181 109
182 -function wtsec_serviceConnect($id, $service, $domain = '')
110 +function wtsec_serviceConnect($id, $service,$domain = '')
183 111 {
184 - $result = WTSEC_LIBRARY_WT::serviceConnect($id, $service);
112 + $result = WTSEC_LIBRARY_WT::serviceConnect($id,$service);
185 113 $status = isset($result['errors']) && !isset($result['data']['auth']['agents']['check']) ? false : true;
186 114 if (!$status) {
187 - WTSEC_LIBRARY_Session::setNotification("warning", WTSEC_LIBRARY_Localization::lmsg('unable_to_connect_to_service', ['service' => $service, 'site' => $domain]));
115 + WTSEC_LIBRARY_Session::setNotification("warning",WTSEC_LIBRARY_Localization::lmsg('unable_to_connect_to_service', ['service' => $service,'site' => $domain]));
188 116 }
189 117 return $status;
190 118 }
191 119
192 120
193 -function wtsec_servicePing($service, $domain = '')
121 +function wtsec_servicePing($service,$domain = '')
194 122 {
195 - if ($domain == NULL) return false;
196 - if (stripos($domain, "http") === false) {
197 - $domain = "http://" . $domain;
123 + if($domain == NULL) return false;
124 + if(mb_stripos($domain,"http") === false){
125 + $domain = "http://".$domain;
198 126 }
199 127 $args = [
200 128 'timeout' => '10',
201 129 'sslverify' => false,
@@ -200,86 +128,78 @@
200 128 'timeout' => '10',
201 129 'sslverify' => false,
202 130 'redirection' => 3,
203 131 ];
204 - $response = wp_remote_get($domain, $args);
132 + $response = wp_remote_get($domain,$args);
205 133 $httpcode = wp_remote_retrieve_response_code($response);
206 - if ($httpcode >= 200 && $httpcode < 400) {
134 + if($httpcode>=200 && $httpcode<400){
207 135 return true;
208 136 } else {
209 - WTSEC_LIBRARY_Session::setNotification("warning", WTSEC_LIBRARY_Localization::lmsg('unable_to_connect_to_service', ['service' => $service, 'site' => $domain]));
137 + WTSEC_LIBRARY_Session::setNotification("warning",WTSEC_LIBRARY_Localization::lmsg('unable_to_connect_to_service', ['service' => $service,'site' => $domain]));
210 138 return false;
211 139 }
212 140 }
213 141
214 -
215 -function wtsec_getConfigs($host_id)
216 -{
217 - $config = WTSEC_LIBRARY_WT::getConfigs($host_id);
218 - return wtsec_arrayIndex($config['data']['auth']['viewer']['sites']['one']['configs'], 'service');
142 +function wtsec_button($label = '',$class = ''){
143 + return '<button class="ww-button '.$class.'">'.$label.'</button>';
219 144 }
220 145
221 -function wtsec_arrayIndex($array, $key){
222 - $newArray = [];
223 - foreach ($array as $item){
224 - $newArray[$item[$key]] = $item;
225 - }
226 - return $newArray;
146 +function wtsec_main_button($label = '',$class = ''){
147 + return '<button class="ww-button '.$class.'">'.$label.'</button>';
227 148 }
228 149
229 -function wtsec_button($label = '', $class = '')
150 +function wtsec_generateButtons($uid,$_service, $service, $status,$domain = '')
230 151 {
231 - return '<button class="ww-button ' . $class . '">' . $label . '</button>';
232 -}
233 -
234 -function wtsec_main_button($label = '', $class = '')
235 -{
236 - return '<button class="ww-button ' . $class . '">' . $label . '</button>';
237 -}
238 -
239 -function wtsec_generateButtons($uid, $_service, $service, $status, $domain = '')
240 -{
241 152 $url = esc_url(admin_url('admin-post.php'));
242 153 $buttons = [];
243 154
244 - $form = '<form action="' . $url . '" method="post" style="display:inline-block;">
245 - <input type="hidden" name="service" value="' . $_service . '">
155 + $form = '<form action="'.$url.'" method="post" style="display:inline-block;">
156 + <input type="hidden" name="service" value="'.$_service.'">
246 157 <input type="hidden" name="action" value="ajax_cmd">
247 - <input type="hidden" name="uid" value="' . $uid . '">
158 + <input type="hidden" name="uid" value="'.$uid.'">
248 159 <input type="hidden" name="cmd" value="{{{cmd}}}">{{{button}}}</form>';
249 160 $result = [];
250 161 $installedFile = wtsec_checkInstalledFile($_service);
162 + $runned = $status['active'];
163 +
164 + if($service === "WAF"){
165 + $first_class = "";
166 + }else{
167 + $first_class = "ww-button--block ";
168 + }
251 169 $disable_uninstall = false;
252 - $first_class = "ww-button--block ";
253 -
254 - if ($service === "AM") {
255 - if (!$installedFile['status']) {
256 - $cmd = $_service . '_install';
257 - $buttons[] = ['place' => 'first', 'button' => wtsec_button(WTSEC_LIBRARY_Localization::lmsg('install'), $first_class . "ww-button--success"), 'cmd' => $cmd];
170 + if (!$installedFile['status']) {
171 + $cmd = $_service . '_install';
172 + $buttons[] = ['place' => 'first','button' => wtsec_button(WTSEC_LIBRARY_Localization::lmsg('install'),$first_class."ww-button--success"),'cmd' => $cmd];
173 + } else {
174 + if($service === "WAF"){
175 + $url = $domain.'/?ping='.$installedFile['file'];
176 + }else{
177 + $url = $domain.'/'.$installedFile['file'];
178 + }
179 + $connected = wtsec_servicePing($service,$url);
180 + if (!$connected) {
181 + $disable_uninstall = false;
182 + $cmd = $_service . '_connect';
183 + $buttons[] = ['place' => 'first','button' => wtsec_button(WTSEC_LIBRARY_Localization::lmsg('connect'),$first_class."ww-button--success"),'cmd' => $cmd];
258 184 } else {
259 -// $url = $domain.'/'.$installedFile['file'];
260 -// $connected = wtsec_servicePing($service,$url);
261 - if (!$disable_uninstall) {
262 - $cmd = $_service . '_uninstall';
263 - $buttons[] = ['place' => 'first', 'button' => wtsec_button(WTSEC_LIBRARY_Localization::lmsg('uninstall'), $first_class . "ww-button--attention"), 'cmd' => $cmd];
185 + if ($runned) {
186 + $cmd = $_service . '_stop';
187 +// $buttons[] = ['place' => 'second','button' => wtsec_button(WTSEC_LIBRARY_Localization::lmsg('stop'),"ww-button--primary"),'cmd' => $cmd];
188 + } else {
189 + $cmd = $_service . '_start';
190 +// $buttons[] = ['place' => 'second','button' => wtsec_button(WTSEC_LIBRARY_Localization::lmsg('run'),"ww-button--primary"),'cmd' => $cmd];
264 191 }
265 192 }
266 - } else {
267 - if ($service === "WAF") {
268 - $first_class = "";
193 + if(!$disable_uninstall){
194 + $cmd = $_service . '_uninstall';
195 + $buttons[] = ['place' => 'first','button' => wtsec_button(WTSEC_LIBRARY_Localization::lmsg('uninstall'),$first_class."ww-button--attention"),'cmd' => $cmd];
269 196 }
270 -
271 - if ($status === "not_installed") {
272 - $cmd = $_service . '_install';
273 - $buttons[] = ['place' => 'first', 'button' => wtsec_button(WTSEC_LIBRARY_Localization::lmsg('install'), $first_class . "ww-button--success"), 'cmd' => $cmd];
274 - }
275 197 }
276 -
277 -
278 - foreach ($buttons as $btn) {
198 + foreach ($buttons as $btn){
279 199 $newform = $form;
280 - $newform = str_replace("{{{cmd}}}", $btn['cmd'], $newform);
281 - $newform = str_replace("{{{button}}}", $btn['button'], $newform);
200 + $newform = str_replace("{{{cmd}}}",$btn['cmd'],$newform);
201 + $newform = str_replace("{{{button}}}",$btn['button'],$newform);
282 202 $result[$btn['place']] = $newform;
283 203 }
284 204 return $result;
285 205 }
@@ -286,16 +206,10 @@
286 206
287 207 function wtsec_checkInstalledFile($service)
288 208 {
289 209 $file = wtsec_getInstalledFile($service);
290 - if ($service == "waf") {
291 - $root = WTSEC_INSTALLATION_DIR;
292 - } else {
293 - $root = ABSPATH;
294 - }
295 - return ['status' => ((bool)$file) && is_file($root . $file), 'file' => $file];
210 + return ['status' => (bool) $file,'file' => $file];
296 211 }
297 212
298 -function wtsec_getInstalledFile($service)
299 -{
300 - return wtsec_app()->get($service . "_installed_file");
213 +function wtsec_getInstalledFile($service){
214 + return wtsec_app()->get($service."_installed_file");
301 215 }