PluginProbe
WebTotem Security / 1.0
WebTotem Security v1.0
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 +104 -197 2.2.31.0 View file →
@@ -1,201 +1,122 @@
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 -// WTSEC_LIBRARY_WT::changeStatus($status['config_id'],$uid);
66 - wtsec_app()->set($_service . '_status', "stop");
42 + WTSEC_LIBRARY_WT::changeStatus($status['config_id'],$uid);
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();
77 +function wtsec_checkStatus($id, $service)
78 +{
79 + $result = WTSEC_LIBRARY_WT::checkStatus($id,$service);
80 + $data = $result['data'][strtolower($service) . 'ServiceChecks'][0];
81 + $is_active = (boolean)$data['config']['isActive'];
82 + $config_id = $data['config']['id'];
83 + $status = $data['status'];
84 + if ($status == -300 && $is_active) {
85 + wtsec_app()->set($service . '_connected_' . $id, false);
108 86 }
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;
87 + return ['active' => $is_active, 'status' => $status, 'config_id' => $config_id];
123 88 }
124 89
125 -function wtsec_checkStatus($id, $service)
126 -{
127 - $service = ucfirst(strtolower($service));
128 - $is_active = null;
129 - $config_id = null;
130 - $result = WTSEC_LIBRARY_WT::checkStatus($id, $service);
131 - $data = $result['data']['auth']['viewer']['sites']['one']['configs'];
132 - foreach ($data as &$cfg) {
133 - if (!empty($cfg)) {
134 - $is_active = $cfg['isActive'];
135 - $config_id = $cfg['id'];
136 - }
137 - }
138 90
139 - if ($is_active === false) {
140 - wtsec_app()->set($service . '_connected_' . $id, true);
141 - }
142 - return ['active' => $is_active, 'config_id' => $config_id];
143 -}
144 91
145 92 function wtsec_generateFile($id, $service)
146 93 {
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'];
94 + $result = WTSEC_LIBRARY_WT::generateFile($id,$service);
95 + $name = $result['data']['generateAgent']['agentName'] . '.' . strtolower($service) . '.php';
96 + $file = WTSEC_LIBRARY_WT::requestURL(WTSEC_FILE_URL . '/' . $name);
97 + if(empty($file)){
173 98 $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 99 }
178 -
179 100 return ['file' => $file, 'name' => $name];
180 101 }
181 102
182 -function wtsec_serviceConnect($id, $service, $domain = '')
103 +function wtsec_serviceConnect($id, $service,$domain = '')
183 104 {
184 - $result = WTSEC_LIBRARY_WT::serviceConnect($id, $service);
185 - $status = isset($result['errors']) && !isset($result['data']['auth']['agents']['check']) ? false : true;
105 + $result = WTSEC_LIBRARY_WT::serviceConnect($id,$service);
106 + $status = (isset($result['errors']) || isset($result['data']['checkAgent']['lockFor']) || (isset($result['data']['checkAgent']['installed']) && $result['data']['checkAgent']['installed'] === false)) ? false : true;
186 107 if (!$status) {
187 - WTSEC_LIBRARY_Session::setNotification("warning", WTSEC_LIBRARY_Localization::lmsg('unable_to_connect_to_service', ['service' => $service, 'site' => $domain]));
108 + WTSEC_LIBRARY_Session::setNotification("warning",WTSEC_LIBRARY_Localization::lmsg('unable_to_connect_to_service', ['service' => $service,'site' => $domain]));
188 109 }
189 110 return $status;
190 111 }
191 112
192 113
193 -function wtsec_servicePing($service, $domain = '')
114 +function wtsec_servicePing($service,$domain = '')
194 115 {
195 - if ($domain == NULL) return false;
196 - if (stripos($domain, "http") === false) {
197 - $domain = "http://" . $domain;
116 + if($domain == NULL) return false;
117 + if(mb_stripos($domain,"http") === false){
118 + $domain = "http://".$domain;
198 119 }
199 120 $args = [
200 121 'timeout' => '10',
201 122 'sslverify' => false,
@@ -200,86 +121,78 @@
200 121 'timeout' => '10',
201 122 'sslverify' => false,
202 123 'redirection' => 3,
203 124 ];
204 - $response = wp_remote_get($domain, $args);
125 + $response = wp_remote_get($domain,$args);
205 126 $httpcode = wp_remote_retrieve_response_code($response);
206 - if ($httpcode >= 200 && $httpcode < 400) {
127 + if($httpcode>=200 && $httpcode<400){
207 128 return true;
208 129 } else {
209 - WTSEC_LIBRARY_Session::setNotification("warning", WTSEC_LIBRARY_Localization::lmsg('unable_to_connect_to_service', ['service' => $service, 'site' => $domain]));
130 + WTSEC_LIBRARY_Session::setNotification("warning",WTSEC_LIBRARY_Localization::lmsg('unable_to_connect_to_service', ['service' => $service,'site' => $domain]));
210 131 return false;
211 132 }
212 133 }
213 134
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');
135 +function wtsec_button($label = '',$class = ''){
136 + return '<button class="ww-button '.$class.'">'.$label.'</button>';
219 137 }
220 138
221 -function wtsec_arrayIndex($array, $key){
222 - $newArray = [];
223 - foreach ($array as $item){
224 - $newArray[$item[$key]] = $item;
225 - }
226 - return $newArray;
139 +function wtsec_main_button($label = '',$class = ''){
140 + return '<button class="ww-button '.$class.'">'.$label.'</button>';
227 141 }
228 142
229 -function wtsec_button($label = '', $class = '')
143 +function wtsec_generateButtons($uid,$_service, $service, $status,$domain = '')
230 144 {
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 145 $url = esc_url(admin_url('admin-post.php'));
242 146 $buttons = [];
243 147
244 - $form = '<form action="' . $url . '" method="post" style="display:inline-block;">
245 - <input type="hidden" name="service" value="' . $_service . '">
148 + $form = '<form action="'.$url.'" method="post" style="display:inline-block;">
149 + <input type="hidden" name="service" value="'.$_service.'">
246 150 <input type="hidden" name="action" value="ajax_cmd">
247 - <input type="hidden" name="uid" value="' . $uid . '">
151 + <input type="hidden" name="uid" value="'.$uid.'">
248 152 <input type="hidden" name="cmd" value="{{{cmd}}}">{{{button}}}</form>';
249 153 $result = [];
250 154 $installedFile = wtsec_checkInstalledFile($_service);
155 + $runned = $status['active'];
156 +
157 + if($service === "WAF"){
158 + $first_class = "";
159 + }else{
160 + $first_class = "ww-button--block ";
161 + }
251 162 $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];
163 + if (!$installedFile['status']) {
164 + $cmd = $_service . '_install';
165 + $buttons[] = ['place' => 'first','button' => wtsec_button(WTSEC_LIBRARY_Localization::lmsg('install'),$first_class."ww-button--success"),'cmd' => $cmd];
166 + } else {
167 + if($service === "WAF"){
168 + $url = $domain.'/?ping='.$installedFile['file'];
169 + }else{
170 + $url = $domain.'/'.$installedFile['file'];
171 + }
172 + $connected = wtsec_servicePing($service,$url);
173 + if (!$connected) {
174 + $disable_uninstall = true;
175 + $cmd = $_service . '_connect';
176 + $buttons[] = ['place' => 'first','button' => wtsec_button(WTSEC_LIBRARY_Localization::lmsg('connect'),$first_class."ww-button--success"),'cmd' => $cmd];
258 177 } 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];
178 + if ($runned) {
179 + $cmd = $_service . '_stop';
180 + $buttons[] = ['place' => 'second','button' => wtsec_button(WTSEC_LIBRARY_Localization::lmsg('stop'),"ww-button--primary"),'cmd' => $cmd];
181 + } else {
182 + $cmd = $_service . '_start';
183 + $buttons[] = ['place' => 'second','button' => wtsec_button(WTSEC_LIBRARY_Localization::lmsg('run'),"ww-button--primary"),'cmd' => $cmd];
264 184 }
265 185 }
266 - } else {
267 - if ($service === "WAF") {
268 - $first_class = "";
186 + if(!$disable_uninstall && !$runned){
187 + $cmd = $_service . '_uninstall';
188 + $buttons[] = ['place' => 'first','button' => wtsec_button(WTSEC_LIBRARY_Localization::lmsg('uninstall'),$first_class."ww-button--attention"),'cmd' => $cmd];
269 189 }
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 190 }
276 -
277 -
278 - foreach ($buttons as $btn) {
191 + foreach ($buttons as $btn){
279 192 $newform = $form;
280 - $newform = str_replace("{{{cmd}}}", $btn['cmd'], $newform);
281 - $newform = str_replace("{{{button}}}", $btn['button'], $newform);
193 + $newform = str_replace("{{{cmd}}}",$btn['cmd'],$newform);
194 + $newform = str_replace("{{{button}}}",$btn['button'],$newform);
282 195 $result[$btn['place']] = $newform;
283 196 }
284 197 return $result;
285 198 }
@@ -286,16 +199,10 @@
286 199
287 200 function wtsec_checkInstalledFile($service)
288 201 {
289 202 $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];
203 + return ['status' => (bool) $file,'file' => $file];
296 204 }
297 205
298 -function wtsec_getInstalledFile($service)
299 -{
300 - return wtsec_app()->get($service . "_installed_file");
206 +function wtsec_getInstalledFile($service){
207 + return wtsec_app()->get($service."_installed_file");
301 208 }