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 -168 2.2.22.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,71 +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 -function wtsec_button($label = '', $class = '')
215 -{
216 - return '<button class="ww-button ' . $class . '">' . $label . '</button>';
142 +function wtsec_button($label = '',$class = ''){
143 + return '<button class="ww-button '.$class.'">'.$label.'</button>';
217 144 }
218 145
219 -function wtsec_main_button($label = '', $class = '')
220 -{
221 - return '<button class="ww-button ' . $class . '">' . $label . '</button>';
146 +function wtsec_main_button($label = '',$class = ''){
147 + return '<button class="ww-button '.$class.'">'.$label.'</button>';
222 148 }
223 149
224 -function wtsec_generateButtons($uid, $_service, $service, $status, $domain = '')
150 +function wtsec_generateButtons($uid,$_service, $service, $status,$domain = '')
225 151 {
226 152 $url = esc_url(admin_url('admin-post.php'));
227 153 $buttons = [];
228 154
229 - $form = '<form action="' . $url . '" method="post" style="display:inline-block;">
230 - <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.'">
231 157 <input type="hidden" name="action" value="ajax_cmd">
232 - <input type="hidden" name="uid" value="' . $uid . '">
158 + <input type="hidden" name="uid" value="'.$uid.'">
233 159 <input type="hidden" name="cmd" value="{{{cmd}}}">{{{button}}}</form>';
234 160 $result = [];
235 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 + }
236 169 $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];
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];
243 184 } 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];
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];
249 191 }
250 192 }
251 - } else {
252 - if ($service === "WAF") {
253 - $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];
254 196 }
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 197 }
261 -
262 -
263 - foreach ($buttons as $btn) {
198 + foreach ($buttons as $btn){
264 199 $newform = $form;
265 - $newform = str_replace("{{{cmd}}}", $btn['cmd'], $newform);
266 - $newform = str_replace("{{{button}}}", $btn['button'], $newform);
200 + $newform = str_replace("{{{cmd}}}",$btn['cmd'],$newform);
201 + $newform = str_replace("{{{button}}}",$btn['button'],$newform);
267 202 $result[$btn['place']] = $newform;
268 203 }
269 204 return $result;
270 205 }
@@ -271,16 +206,10 @@
271 206
272 207 function wtsec_checkInstalledFile($service)
273 208 {
274 209 $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];
210 + return ['status' => (bool) $file,'file' => $file];
281 211 }
282 212
283 -function wtsec_getInstalledFile($service)
284 -{
285 - return wtsec_app()->get($service . "_installed_file");
213 +function wtsec_getInstalledFile($service){
214 + return wtsec_app()->get($service."_installed_file");
286 215 }