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 -182 2.2.21.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,71 +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 -function wtsec_button($label = '', $class = '')
215 -{
216 - return '<button class="ww-button ' . $class . '">' . $label . '</button>';
135 +function wtsec_button($label = '',$class = ''){
136 + return '<button class="ww-button '.$class.'">'.$label.'</button>';
217 137 }
218 138
219 -function wtsec_main_button($label = '', $class = '')
220 -{
221 - return '<button class="ww-button ' . $class . '">' . $label . '</button>';
139 +function wtsec_main_button($label = '',$class = ''){
140 + return '<button class="ww-button '.$class.'">'.$label.'</button>';
222 141 }
223 142
224 -function wtsec_generateButtons($uid, $_service, $service, $status, $domain = '')
143 +function wtsec_generateButtons($uid,$_service, $service, $status,$domain = '')
225 144 {
226 145 $url = esc_url(admin_url('admin-post.php'));
227 146 $buttons = [];
228 147
229 - $form = '<form action="' . $url . '" method="post" style="display:inline-block;">
230 - <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.'">
231 150 <input type="hidden" name="action" value="ajax_cmd">
232 - <input type="hidden" name="uid" value="' . $uid . '">
151 + <input type="hidden" name="uid" value="'.$uid.'">
233 152 <input type="hidden" name="cmd" value="{{{cmd}}}">{{{button}}}</form>';
234 153 $result = [];
235 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 + }
236 162 $disable_uninstall = false;
237 - $first_class = "ww-button--block ";
238 -
239 - if ($service === "AM") {
240 - if (!$installedFile['status']) {
241 - $cmd = $_service . '_install';
242 - $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];
243 177 } else {
244 -// $url = $domain.'/'.$installedFile['file'];
245 -// $connected = wtsec_servicePing($service,$url);
246 - if (!$disable_uninstall) {
247 - $cmd = $_service . '_uninstall';
248 - $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];
249 184 }
250 185 }
251 - } else {
252 - if ($service === "WAF") {
253 - $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];
254 189 }
255 -
256 - if ($status === "not_installed") {
257 - $cmd = $_service . '_install';
258 - $buttons[] = ['place' => 'first', 'button' => wtsec_button(WTSEC_LIBRARY_Localization::lmsg('install'), $first_class . "ww-button--success"), 'cmd' => $cmd];
259 - }
260 190 }
261 -
262 -
263 - foreach ($buttons as $btn) {
191 + foreach ($buttons as $btn){
264 192 $newform = $form;
265 - $newform = str_replace("{{{cmd}}}", $btn['cmd'], $newform);
266 - $newform = str_replace("{{{button}}}", $btn['button'], $newform);
193 + $newform = str_replace("{{{cmd}}}",$btn['cmd'],$newform);
194 + $newform = str_replace("{{{button}}}",$btn['button'],$newform);
267 195 $result[$btn['place']] = $newform;
268 196 }
269 197 return $result;
270 198 }
@@ -271,16 +199,10 @@
271 199
272 200 function wtsec_checkInstalledFile($service)
273 201 {
274 202 $file = wtsec_getInstalledFile($service);
275 - if ($service == "waf") {
276 - $root = WTSEC_INSTALLATION_DIR;
277 - } else {
278 - $root = ABSPATH;
279 - }
280 - return ['status' => ((bool)$file) && is_file($root . $file), 'file' => $file];
203 + return ['status' => (bool) $file,'file' => $file];
281 204 }
282 205
283 -function wtsec_getInstalledFile($service)
284 -{
285 - return wtsec_app()->get($service . "_installed_file");
206 +function wtsec_getInstalledFile($service){
207 + return wtsec_app()->get($service."_installed_file");
286 208 }