a7e349dd by Jeff Balicki

pen test

Signed-off-by: Jeff <jeff@gotenzing.com>
1 parent e4e4091c
Showing 19 changed files with 2881 additions and 0 deletions
1 <?php
2
3 //GPL license
4
5 include sanitize_file_name('gplLicense.php');
6
7 /*Updating database after verifying signature failed*/
8 function Beagle_WP_auto_Verify(){
9
10 global $wpdb;
11
12 $Beagle_WP_scan_table = $wpdb->prefix."beagleScanData";
13
14 $getTokenFromTbl = $wpdb->get_results( $wpdb->prepare ("SELECT * FROM $Beagle_WP_scan_table"));
15
16 $Beagle_WP_application_token = $getTokenFromTbl[0]->application_token;
17
18 $updateData = $wpdb->query( $wpdb->prepare("UPDATE $Beagle_WP_scan_table SET autoVerify = %d WHERE application_token = %s",1, $Beagle_WP_application_token));
19 try{
20 if($updateData) {
21 echo json_encode("succeess");
22 exit;
23 } else {
24 echo json_encode("failed");
25 exit;
26 }
27 } catch (Exception $e) {
28 console.log('Message: ' .$e->getMessage());
29 }
30 }
...\ No newline at end of file ...\ No newline at end of file
1 <?php
2
3 //GPL license
4
5 include sanitize_file_name('gplLicense.php');
6
7 /*delete the application only after the verification*/
8 function Beagle_WP_delete_Test() {
9
10 global $wpdb;
11 global $deleteID;
12 $Beagle_WP_scan_table = $wpdb->prefix."beagleScanData";
13 $result =$wpdb->get_results($wpdb->prepare("SELECT * FROM $Beagle_WP_scan_table "));
14 foreach ( $result as $print ){
15 $deleteID = $print->id;
16 }
17 try {
18 $updateData = $wpdb->query($wpdb->prepare("DELETE FROM $Beagle_WP_scan_table WHERE id=%d", $deleteID));
19 echo json_encode($updateData);
20 exit;
21 }
22 catch(Exception $e) {
23 }
24 }
1 <?php
2
3 //GPL license
4
5 include sanitize_file_name('gplLicense.php');
6
7 /*to get status of currently running test*/
8 function Beagle_WP_getResultOf_CurrentTestData() {
9
10 global $wpdb;
11
12 global $apiServerBaseUrl;
13
14 $Beagle_WP_scan_table = $wpdb->prefix."beagleScanData";
15
16 $getTableData = $wpdb->get_results($wpdb->prepare("SELECT * FROM $Beagle_WP_scan_table"));
17
18 foreach ( $getTableData as $entryOne ){
19 $Beagle_WP_access_token = $entryOne->access_token;
20 $Beagle_WP_application_token = $entryOne->application_token;
21 $BWP_result_token = $entryOne->result_token;
22 }
23
24 try {
25
26 if($Beagle_WP_access_token != null || $Beagle_WP_application_token != null) {
27
28 $beaglrURL = $apiServerBaseUrl.'test/result';
29
30 $getStatusDataTest = array("access_token" => $Beagle_WP_access_token, "application_token" => $Beagle_WP_application_token, "result_token" => $BWP_result_token);
31
32 $request = wp_remote_post($beaglrURL, array(
33 'headers' => array('Content-Type' => 'application/json; charset=utf-8'),
34 'body' => json_encode($getStatusDataTest),
35 'method' => 'POST',
36 'data_format' => 'body',
37 ));
38 $statusResponse = json_decode(wp_remote_retrieve_body( $request ));
39 try {
40 if($statusResponse){
41 $updateData = $wpdb->query( $wpdb->prepare("UPDATE $Beagle_WP_scan_table SET runningStatus = %s WHERE application_token = %s","notRunning", $Beagle_WP_application_token));
42 }
43 }
44 catch(Exception $e) {
45 }
46 echo json_encode($statusResponse);
47 exit;
48 }
49 }
50 catch(Exception $e) {
51 }
52 }
...\ No newline at end of file ...\ No newline at end of file
1 <?php
2
3 //GPL license
4 include sanitize_file_name('gplLicense.php');
5
6 /*to get status of an ongoing test*/
7 function Beagle_WP_getStatusOf_CurrentTestData()
8 {
9
10 global $wpdb;
11
12 global $apiServerBaseUrl;
13
14 $Beagle_WP_scan_table = $wpdb->prefix . "beagleScanData";
15
16 $getTableData = $wpdb->get_results($wpdb->prepare("SELECT * FROM $Beagle_WP_scan_table"));
17
18 foreach ($getTableData as $entryOne) {
19 $Beagle_WP_access_token = $entryOne->access_token;
20 $Beagle_WP_application_token = $entryOne->application_token;
21 $BWP_result_token = $entryOne->result_token;
22 }
23 try {
24
25 if ($Beagle_WP_access_token != null && $Beagle_WP_application_token != null && $BWP_result_token != null) {
26
27 $beaglrURL = $apiServerBaseUrl . 'test/status';
28
29 $getStatusDataTest = array("access_token" => $Beagle_WP_access_token, "application_token" => $Beagle_WP_application_token, "result_token" => $BWP_result_token);
30
31 $request = wp_remote_post($beaglrURL, array(
32 'headers' => array('Content-Type' => 'application/json; charset=utf-8'),
33 'body' => json_encode($getStatusDataTest),
34 'method' => 'POST',
35 'data_format' => 'body',
36 ));
37
38 $statusResponse = json_decode(wp_remote_retrieve_body($request));
39
40 try {
41 if ($statusResponse) {
42
43 $updateData = $wpdb->query($wpdb->prepare("UPDATE $Beagle_WP_scan_table SET status = %s WHERE application_token = %s", $statusResponse->status, $Beagle_WP_application_token));
44 }
45
46 echo json_encode($statusResponse);
47 exit;
48 } catch (Exception $e) {
49 }
50 }
51 } catch (Exception $e) {
52 }
53 }
1 <?php
2
3 /*
4 Beagle Security - WP Security, Advanced Penetration Testing, 2021 Beagle Security
5 This plugin is distributed under the terms of the GNU GPL
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; If not, see {License URI}.
19 */
20 ?>
...\ No newline at end of file ...\ No newline at end of file
1 <?php
2
3 //GPL license
4
5 include sanitize_file_name('gplLicense.php');
6
7 /*To post the signature in the wordpress root directory*/
8 function Beagle_WP_addDataTo_DB()
9 {
10 global $wpdb;
11
12 global $apiServerBaseUrl;
13
14 $Beagle_WP_scan_table = $wpdb->prefix . "beagleScanData";
15
16 $Beagle_WP_access_token = sanitize_text_field($_POST['access_token']);
17
18 $Beagle_WP_application_token = sanitize_text_field($_POST['application_token']);
19
20 try {
21 if (isset($_POST['startVerify'])) {
22 $Beagle_WP_dataInDB = $wpdb->get_results("SELECT * FROM $Beagle_WP_scan_table WHERE `application_token`='$Beagle_WP_application_token'");
23 try {
24 if (!$Beagle_WP_dataInDB) {
25
26 $beaglrURL = $apiServerBaseUrl . 'test/signature';
27 $getverifiedToken = array("access_token" => $Beagle_WP_access_token, "application_token" => $Beagle_WP_application_token);
28 $request = wp_remote_post($beaglrURL, array(
29 'headers' => array('Content-Type' => 'application/json; charset=utf-8'),
30 'body' => json_encode($getverifiedToken),
31 'method' => 'POST',
32 'data_format' => 'body',
33 ));
34 $statusResponse = json_decode(wp_remote_retrieve_body($request));
35 try {
36 $dateLog = date("Y-m-d");
37 if ($statusResponse->status == "Failed") {
38 try {
39 $Beagle_WP_log_save_path = plugin_dir_path(__FILE__) . '../log.txt';
40 if (is_writable($Beagle_WP_log_save_path)) {
41 $Beagle_WP_log_open = fopen($Beagle_WP_log_save_path, "a");
42 $Beagle_WP_log_write = fputs($Beagle_WP_log_open, "\n" .$dateLog. " -> " .$statusResponse->message. + "\n");
43 fclose($Beagle_WP_log_open);
44 }
45 } catch (Exception $e) {
46 }
47 ?>
48 <script>
49 function appExist() {
50 var errorMsg = setTimeout("document.getElementById('errMsg').style.display='none';", 4000);
51 }
52 appExist()
53 </script>
54 <div class="errormsg">
55 <p id="errMsg">Invalid credentials. Please try again!</p>
56 </div>
57 <?php
58 } else if($statusResponse == null) {
59 try {
60 $Beagle_WP_log_save_path = plugin_dir_path(__FILE__) . '../log.txt';
61 if (is_writable($Beagle_WP_log_save_path)) {
62 $Beagle_WP_log_open = fopen($Beagle_WP_log_save_path, "a");
63 $Beagle_WP_log_write = fputs($Beagle_WP_log_open, "\n" .$dateLog. "-> User not authorized. \n");
64 fclose($Beagle_WP_log_open);
65 }
66 } catch (Exception $e) {
67 }
68 ?>
69 <script>
70 function appExist() {
71 var errorMsg = setTimeout("document.getElementById('errMsg').style.display='none';", 4000);
72 }
73 appExist()
74 </script>
75 <div class="errormsg">
76 <p id="errMsg">User not authorized!</p>
77 </div>
78 <?php
79 }
80 else if ($statusResponse->status == "NotVerified") {
81 $verifyText = $statusResponse->signature;
82 try {
83 $Beagle_WP_file_save_path = plugin_dir_path(__FILE__) . '../' . $verifyText . '.txt';
84 $Beagle_WP_file_save_path_test = plugin_dir_path(__FILE__) . '../fileWrightTest.txt';
85 if (is_writable($Beagle_WP_file_save_path_test)) {
86 $Beagle_WP_file_open = fopen($Beagle_WP_file_save_path, "a");
87 $Beagle_WP_file_write = fputs($Beagle_WP_file_open, $verifyText);
88 fclose($Beagle_WP_file_open);
89 if ($Beagle_WP_file_write) {
90 $wpdb->insert($Beagle_WP_scan_table, array("access_token" => $Beagle_WP_access_token, "application_token" => $Beagle_WP_application_token, "verified" => 0, "title" => $statusResponse->title, "url" => $statusResponse->url, "runningStatus" => "notRunning", "autoVerify" => "0"), array("%s", "%s", "%d", "%s", "%s", "%s", "%d"));
91 } else {
92 ?>
93 <script>
94 function appExist() {
95 var errorMsg = setTimeout("document.getElementById('errMsg').style.display='none';", 4000);
96 }
97 appExist()
98 </script>
99 <div class="errormsg">
100 <p id="errMsg">An unexpected error occurred. Please try again!</p>
101 </div>
102 <?php
103 }
104 }else {
105 $wpdb->insert($Beagle_WP_scan_table, array("access_token" => $Beagle_WP_access_token, "application_token" => $Beagle_WP_application_token, "verified" => 0, "title" => $statusResponse->title, "url" => $statusResponse->url, "runningStatus" => "notRunning", "autoVerify" => "1"), array("%s", "%s", "%d", "%s", "%s", "%s", "%d"));
106 }
107 } catch (Exception $e) {
108 }
109 } else {
110 $wpdb->insert($Beagle_WP_scan_table, array("access_token" => $Beagle_WP_access_token, "application_token" => $Beagle_WP_application_token, "verified" => 1, "title" => $statusResponse->title, "url" => $statusResponse->url, "runningStatus" => "notRunning", "autoVerify" => "0"), array("%s", "%s", "%d", "%s", "%s", "%s", "%d"));
111 }
112 } catch (Exception $e) {
113 }
114 }
115 } catch (Exception $e) {
116 }
117 }
118 } catch (Exception $e) {
119 }
120 }
1 <?php
2 function Beagle_WP_Page_Content()
3 {
4 // define('__ROOT__', dirname(dirname(__FILE__)));
5 require_once(sanitize_file_name('style.php'));
6 require_once(sanitize_file_name('progressRound.php'));
7 require_once(sanitize_file_name('script.php'));
8 require_once(sanitize_file_name('gplLicense.php'));
9 $beagleUrl = "https://beaglesecurity.com/";
10 $beagleHelp = "https://help.beaglesecurity.com/article/30/where-to-find-access-token-and-application-token";
11 $beagleDetReport = "https://beaglesecurity.com/dashboard/home";
12 $beagleHeaderImage = "data:image/png;base64,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";
13
14 ?>
15
16 <div class="header">
17 <a href=<?php echo esc_url($beagleUrl); ?> target="_blank">
18 <img src="<?php echo $beagleHeaderImage; ?>" alt="Beagle Security">
19 </a>
20 </div>
21 <?php
22 global $wpdb;
23 $Beagle_WP_scan_table = $wpdb->prefix . "beagleScanData";
24 $getDataFromDb = $wpdb->get_results("SELECT * FROM $Beagle_WP_scan_table");
25 if (!$getDataFromDb) { ?>
26 <form method="POST" class="input-form font-monte">
27 <div class="form-group access">
28 <label class="label mb-0">Access token</label>
29 <input class="form-control" type="text" minlength="32" name="access_token" id="access_token" placeholder="Enter Access Token" required>
30 </div>
31 <div class="form-group appdiv">
32 <label class="label my-0">Application token</label>
33 <input class="form-control" type="text" minlength="32" name="application_token" placeholder="Enter Application Token" id="application_token" required>
34 </div>
35 <div class="form-group m-auto">
36 <button class="startBtn" type="submit" name="startVerify" onclick="BeagleWP_Token_Input()">
37 <span id="continueSave">CONTINUE</span>
38 <span id="spinnerSave" style="display: none;" class="loaderFirst"></span>
39 </button>
40 </div>
41 <div class="form-group help">
42 <a href="<?php echo esc_url($beagleHelp); ?>" target="_blank">Need help on tokens?</a>
43 </div>
44 </form>
45 <?php
46 }
47 if ($getDataFromDb) { ?>
48 <div class="row w-100 justify-content-center font-monte">
49 <div class="container mx-auto">
50 <div class="col-sm-12 d-flex mb-2 w-100 mx-auto head-main">
51 <div class="col-sm p-0 app-image my-auto">
52 <div class="application-image">
53 </div>
54 </div>
55 <div class="col-sm-10 px-4 my-auto">
56 <div class="row w-100">
57 <span class="col-sm-5 d-block">
58 <div class="row titledomain">
59 <?php echo $getDataFromDb[0]->title; ?>
60 </div>
61 <div class="row urldomain">
62 <div class="form-group px-0">
63 <label class="form-check-label"><?php echo $getDataFromDb[0]->url; ?></label>
64 <?php
65 if ($getDataFromDb[0]->verified == 1) {
66 echo '<span class="dashicons dashicons-yes verify-icon ml-2" title="Domain verification completed successfully."></span>';
67 }?>
68 </div>
69 </div>
70 </span>
71 <span class="col-sm-7 d-flex my-auto">
72 <?php
73 if ($getDataFromDb[0]->verified == 0) {
74 echo '<span class="dashicons dashicons-no-alt close-icon " title="Domain verification not completed." id="notverifyiedicon"></span>';
75 if ($getDataFromDb[0]->autoVerify == 0) {
76 echo '<button class="btn verify-domain my-auto" id="verifyDomain" onclick="BeagleWP_verifyDomain_ByUser()">
77 VERIFY DOMAIN</button>
78 <button class="btn verify-domain my-auto startVerify" id="verifyDomainHide" disabled>
79 <span class="spinner-border spinner-border-sm my-auto" role="status" aria-hidden="true"></span>
80 <span class="my-auto">Verifying...</span>
81 </button>
82 ';
83 } else {
84 echo '<span class="my-auto">
85 <span class="errorMsg my-auto">Domain verification failed!</span>
86 <span onclick="BeagleWP_show_Msg()" class="dashicons dashicons-info-outline infoicon my-auto"></span>
87 </span>';
88 }
89 }
90 ?>
91 <span id="verifyError" class="my-auto" style="display: none;">
92 <span class="errorMsg my-auto" id="verificationFailMsg">Domain verification failed!</span>
93 <span onclick="BeagleWP_show_Msg()" class="dashicons dashicons-info-outline infoicon my-auto"></span>
94 </span>
95 </span>
96 </div>
97 </div>
98 <div class="col-sm p-0 my-auto d-flex justify-content-end">
99 <?php
100 if ($getDataFromDb[0]->runningStatus == "notRunning") {
101 echo '<span class="dashicons dashicons-trash delete-icon" title="remove test" onclick="BeagleWP_delete_Confirm()"></span>';
102 } else {
103 echo '<span class="dashicons dashicons-trash delete-icon-hide" title="Test in running status"></span>';
104 }
105 ?>
106 </div>
107 </div>
108 <form method="POST" class="col-sm-12 d-flex justify-content-center test-box">
109 <?php
110 if ($getDataFromDb[0]->verified == "0") {
111 echo '<button class="btn hidden-test" disabled>START TEST</button>';
112 } else {
113 if ($getDataFromDb[0]->runningStatus == "Running") {
114 echo '<button type="submit" name="stopBeagleTest" class="btn stop-test">STOP TEST</button>';
115 } else {
116 if ($getDataFromDb[0]->status == "completed") {
117 echo '<button type="submit" name="restartBeagleTest" class="btn start-test">RESTART TEST</button>';
118 } else {
119 echo '<button type="submit" name="startBeagleTest" class="btn start-test">START TEST</button>';
120 }
121 }
122 }
123 ?>
124 </form>
125 <?php
126 if ($getDataFromDb[0]->verified == "1" && $getDataFromDb[0]->runningStatus == "Running") { ?>
127 <div class="col-sm-12 d-block justify-content-center status-box" id="statusbar">
128 <div class="row">
129 <div class="col-sm-6">
130 <span class="ststustest" id="status"></span>
131 <span class="test-msg" id="message"></span>
132 </div>
133 <div class="col-sm-6 d-flex justify-content-end">
134 </div>
135 </div>
136 <div class="row">
137 <div class="col-md-11 progressdiv my-auto">
138 <div class="progress">
139 <div id="progress" class="progress-bar" role="progressbar"></div>
140 </div>
141 </div>
142 <div class="col-md-1 reloadicon my-auto float-left">
143 <span name="statusGet" id="statusGet" onclick="BeagleWP_getStatus_Data()" class="dashicons dashicons-image-rotate rotate-icon reload-icon"></span>
144 <span class="loadingRe" style="display: none;" id="spinner">
145 <div class="loader"></div>
146 </span>
147 </div>
148 </div>
149 </div>
150 <?php
151 } ?>
152 <div class="row px-3 resultblock" id="resultData">
153 <div class="col-sm-12 score progressround d-flex justify-content-center">
154 Your score is
155 </div>
156 <div class="col-sm-12 pt-2 progressround d-flex justify-content-center">
157 <div class="c100 small" id="progressClass">
158 <span id="progressCount"></span>
159 <div class="slice">
160 <div class="bar"></div>
161 <div class="fill" id="fill"></div>
162 </div>
163 </div>
164 </div>
165 <div class="row p-0 m-0 w-100">
166 <div class="col px-0 py-2 gentxt" id="resulttext">
167 Last test result
168 </div>
169 <div class="col px-0 py-2 d-flex justify-content-end gendate align-items-baseline">
170 Generated date: <span id="genDate"></span>
171 </div>
172 </div>
173 <div class="col-sm-2 m-auto critical">
174 <div class="row m-auto justify-content-center countnumber" id="criticalBug">
175
176 </div>
177 <div class="row m-auto justify-content-center counttext">
178 Critical
179 </div>
180 </div>
181 <div class="col-sm-2 m-auto high">
182 <div class="row m-auto justify-content-center countnumber" id="highBug">
183
184 </div>
185 <div class="row m-auto justify-content-center counttext">
186 High
187 </div>
188 </div>
189 <div class="col-sm-2 m-auto medium">
190 <div class="row m-auto justify-content-center countnumber" id="mediumBug">
191
192 </div>
193 <div class="row m-auto justify-content-center counttext">
194 Medium
195 </div>
196 </div>
197 <div class="col-sm-2 m-auto low">
198 <div class="row m-auto justify-content-center countnumber" id="lowBug">
199
200 </div>
201 <div class="row m-auto justify-content-center counttext">
202 Low
203 </div>
204 </div>
205 <div class="col-sm-2 m-auto verylow">
206 <div class="row m-auto justify-content-center countnumber" id="verylowBug">
207
208 </div>
209 <div class="row m-auto justify-content-center counttext">
210 Very Low
211 </div>
212 </div>
213 <div class="col-sm-2 m-auto total">
214 <div class="row m-auto justify-content-center countnumber" id="totalBug">
215
216 </div>
217 <div class="row m-auto justify-content-center counttext">
218 Total
219 </div>
220 </div>
221 <div class="col-sm-12 pt-2 progressround d-flex justify-content-end">
222 <div class="goto">For a detailed test report, go to <a href="<?php echo esc_url($beagleDetReport); ?>" target="_blank">Beagle Security</a></div>
223 </div>
224 </div>
225 </div>
226 </div>
227 <?php
228 if ($getDataFromDb[0]->verified == "1" && $getDataFromDb[0]->status != "completed") { ?>
229 <script>
230 function BeagleWP_getStatus_Data() {
231 document.getElementById("statusGet").style.display = "none";
232 document.getElementById("spinner").style.display = "block";
233 BeagleWP_get_Data();
234 }
235 BeagleWP_get_Data();
236 var timerVar = setInterval(BeagleWP_get_Data, 10000);
237 <?php
238 if($getDataFromDb[0]->status == "completed"){?>
239 clearInterval(timerVar);
240 <?php } ?>
241 </script>
242 <?php } else if ($getDataFromDb[0]->verified == "1" && $getDataFromDb[0]->status == "completed") { ?>
243 <script>
244 BeagleWP_get_Result();
245 </script>
246 <?php }
247 }
248 }
1 <style>
2 .rect-auto,
3 .c100.p51 .slice,
4 .c100.p52 .slice,
5 .c100.p53 .slice,
6 .c100.p54 .slice,
7 .c100.p55 .slice,
8 .c100.p56 .slice,
9 .c100.p57 .slice,
10 .c100.p58 .slice,
11 .c100.p59 .slice,
12 .c100.p60 .slice,
13 .c100.p61 .slice,
14 .c100.p62 .slice,
15 .c100.p63 .slice,
16 .c100.p64 .slice,
17 .c100.p65 .slice,
18 .c100.p66 .slice,
19 .c100.p67 .slice,
20 .c100.p68 .slice,
21 .c100.p69 .slice,
22 .c100.p70 .slice,
23 .c100.p71 .slice,
24 .c100.p72 .slice,
25 .c100.p73 .slice,
26 .c100.p74 .slice,
27 .c100.p75 .slice,
28 .c100.p76 .slice,
29 .c100.p77 .slice,
30 .c100.p78 .slice,
31 .c100.p79 .slice,
32 .c100.p80 .slice,
33 .c100.p81 .slice,
34 .c100.p82 .slice,
35 .c100.p83 .slice,
36 .c100.p84 .slice,
37 .c100.p85 .slice,
38 .c100.p86 .slice,
39 .c100.p87 .slice,
40 .c100.p88 .slice,
41 .c100.p89 .slice,
42 .c100.p90 .slice,
43 .c100.p91 .slice,
44 .c100.p92 .slice,
45 .c100.p93 .slice,
46 .c100.p94 .slice,
47 .c100.p95 .slice,
48 .c100.p96 .slice,
49 .c100.p97 .slice,
50 .c100.p98 .slice,
51 .c100.p99 .slice,
52 .c100.p100 .slice {
53 clip: rect(auto, auto, auto, auto);
54 }
55 .pie,
56 .c100 .bar,
57 .c100.p51 .fill,
58 .c100.p52 .fill,
59 .c100.p53 .fill,
60 .c100.p54 .fill,
61 .c100.p55 .fill,
62 .c100.p56 .fill,
63 .c100.p57 .fill,
64 .c100.p58 .fill,
65 .c100.p59 .fill,
66 .c100.p60 .fill,
67 .c100.p61 .fill,
68 .c100.p62 .fill,
69 .c100.p63 .fill,
70 .c100.p64 .fill,
71 .c100.p65 .fill,
72 .c100.p66 .fill,
73 .c100.p67 .fill,
74 .c100.p68 .fill,
75 .c100.p69 .fill,
76 .c100.p70 .fill,
77 .c100.p71 .fill,
78 .c100.p72 .fill,
79 .c100.p73 .fill,
80 .c100.p74 .fill,
81 .c100.p75 .fill,
82 .c100.p76 .fill,
83 .c100.p77 .fill,
84 .c100.p78 .fill,
85 .c100.p79 .fill,
86 .c100.p80 .fill,
87 .c100.p81 .fill,
88 .c100.p82 .fill,
89 .c100.p83 .fill,
90 .c100.p84 .fill,
91 .c100.p85 .fill,
92 .c100.p86 .fill,
93 .c100.p87 .fill,
94 .c100.p88 .fill,
95 .c100.p89 .fill,
96 .c100.p90 .fill,
97 .c100.p91 .fill,
98 .c100.p92 .fill,
99 .c100.p93 .fill,
100 .c100.p94 .fill,
101 .c100.p95 .fill,
102 .c100.p96 .fill,
103 .c100.p97 .fill,
104 .c100.p98 .fill,
105 .c100.p99 .fill,
106 .c100.p100 .fill {
107 position: absolute;
108 border: 0.08em solid #307bbb;
109 width: 0.84em;
110 height: 0.84em;
111 clip: rect(0em, 0.5em, 1em, 0em);
112 border-radius: 50%;
113 -webkit-transform: rotate(0deg);
114 -moz-transform: rotate(0deg);
115 -ms-transform: rotate(0deg);
116 -o-transform: rotate(0deg);
117 transform: rotate(0deg);
118 }
119 .pie-fill,
120 .c100.p51 .bar:after,
121 .c100.p51 .fill,
122 .c100.p52 .bar:after,
123 .c100.p52 .fill,
124 .c100.p53 .bar:after,
125 .c100.p53 .fill,
126 .c100.p54 .bar:after,
127 .c100.p54 .fill,
128 .c100.p55 .bar:after,
129 .c100.p55 .fill,
130 .c100.p56 .bar:after,
131 .c100.p56 .fill,
132 .c100.p57 .bar:after,
133 .c100.p57 .fill,
134 .c100.p58 .bar:after,
135 .c100.p58 .fill,
136 .c100.p59 .bar:after,
137 .c100.p59 .fill,
138 .c100.p60 .bar:after,
139 .c100.p60 .fill,
140 .c100.p61 .bar:after,
141 .c100.p61 .fill,
142 .c100.p62 .bar:after,
143 .c100.p62 .fill,
144 .c100.p63 .bar:after,
145 .c100.p63 .fill,
146 .c100.p64 .bar:after,
147 .c100.p64 .fill,
148 .c100.p65 .bar:after,
149 .c100.p65 .fill,
150 .c100.p66 .bar:after,
151 .c100.p66 .fill,
152 .c100.p67 .bar:after,
153 .c100.p67 .fill,
154 .c100.p68 .bar:after,
155 .c100.p68 .fill,
156 .c100.p69 .bar:after,
157 .c100.p69 .fill,
158 .c100.p70 .bar:after,
159 .c100.p70 .fill,
160 .c100.p71 .bar:after,
161 .c100.p71 .fill,
162 .c100.p72 .bar:after,
163 .c100.p72 .fill,
164 .c100.p73 .bar:after,
165 .c100.p73 .fill,
166 .c100.p74 .bar:after,
167 .c100.p74 .fill,
168 .c100.p75 .bar:after,
169 .c100.p75 .fill,
170 .c100.p76 .bar:after,
171 .c100.p76 .fill,
172 .c100.p77 .bar:after,
173 .c100.p77 .fill,
174 .c100.p78 .bar:after,
175 .c100.p78 .fill,
176 .c100.p79 .bar:after,
177 .c100.p79 .fill,
178 .c100.p80 .bar:after,
179 .c100.p80 .fill,
180 .c100.p81 .bar:after,
181 .c100.p81 .fill,
182 .c100.p82 .bar:after,
183 .c100.p82 .fill,
184 .c100.p83 .bar:after,
185 .c100.p83 .fill,
186 .c100.p84 .bar:after,
187 .c100.p84 .fill,
188 .c100.p85 .bar:after,
189 .c100.p85 .fill,
190 .c100.p86 .bar:after,
191 .c100.p86 .fill,
192 .c100.p87 .bar:after,
193 .c100.p87 .fill,
194 .c100.p88 .bar:after,
195 .c100.p88 .fill,
196 .c100.p89 .bar:after,
197 .c100.p89 .fill,
198 .c100.p90 .bar:after,
199 .c100.p90 .fill,
200 .c100.p91 .bar:after,
201 .c100.p91 .fill,
202 .c100.p92 .bar:after,
203 .c100.p92 .fill,
204 .c100.p93 .bar:after,
205 .c100.p93 .fill,
206 .c100.p94 .bar:after,
207 .c100.p94 .fill,
208 .c100.p95 .bar:after,
209 .c100.p95 .fill,
210 .c100.p96 .bar:after,
211 .c100.p96 .fill,
212 .c100.p97 .bar:after,
213 .c100.p97 .fill,
214 .c100.p98 .bar:after,
215 .c100.p98 .fill,
216 .c100.p99 .bar:after,
217 .c100.p99 .fill,
218 .c100.p100 .bar:after,
219 .c100.p100 .fill {
220 -webkit-transform: rotate(180deg);
221 -moz-transform: rotate(180deg);
222 -ms-transform: rotate(180deg);
223 -o-transform: rotate(180deg);
224 transform: rotate(180deg);
225 }
226 .c100 {
227 position: relative;
228 font-size: 120px;
229 width: 1em;
230 height: 1em;
231 border-radius: 50%;
232 float: left;
233 margin: 0 0.1em 0.1em 0;
234 background-color: #cccccc;
235 }
236 .c100 *,
237 .c100 *:before,
238 .c100 *:after {
239 -webkit-box-sizing: content-box;
240 -moz-box-sizing: content-box;
241 box-sizing: content-box;
242 }
243 .c100.center {
244 float: none;
245 margin: 0 auto;
246 }
247 .c100.big {
248 font-size: 240px;
249 }
250 .c100.small {
251 font-size: 80px;
252 }
253 .c100 > span {
254 position: absolute;
255 width: 100%;
256 z-index: 1;
257 left: 0;
258 top: 0;
259 width: 5em;
260 line-height: 5em;
261 font-size: 0.2em;
262 color: #000;
263 display: block;
264 text-align: center;
265 white-space: nowrap;
266 -webkit-transition-property: all;
267 -moz-transition-property: all;
268 -o-transition-property: all;
269 transition-property: all;
270 -webkit-transition-duration: 0.2s;
271 -moz-transition-duration: 0.2s;
272 -o-transition-duration: 0.2s;
273 transition-duration: 0.2s;
274 -webkit-transition-timing-function: ease-out;
275 -moz-transition-timing-function: ease-out;
276 -o-transition-timing-function: ease-out;
277 transition-timing-function: ease-out;
278 }
279 .c100:after {
280 position: absolute;
281 top: 0.08em;
282 left: 0.08em;
283 display: block;
284 content: " ";
285 border-radius: 50%;
286 background-color: #f5f5f5;
287 width: 0.84em;
288 height: 0.84em;
289 -webkit-transition-property: all;
290 -moz-transition-property: all;
291 -o-transition-property: all;
292 transition-property: all;
293 -webkit-transition-duration: 0.2s;
294 -moz-transition-duration: 0.2s;
295 -o-transition-duration: 0.2s;
296 transition-duration: 0.2s;
297 -webkit-transition-timing-function: ease-in;
298 -moz-transition-timing-function: ease-in;
299 -o-transition-timing-function: ease-in;
300 transition-timing-function: ease-in;
301 }
302 .c100 .slice {
303 position: absolute;
304 width: 1em;
305 height: 1em;
306 clip: rect(0em, 1em, 1em, 0.5em);
307 }
308 .c100.p1 .bar {
309 -webkit-transform: rotate(3.6deg);
310 -moz-transform: rotate(3.6deg);
311 -ms-transform: rotate(3.6deg);
312 -o-transform: rotate(3.6deg);
313 transform: rotate(3.6deg);
314 }
315 .c100.p2 .bar {
316 -webkit-transform: rotate(7.2deg);
317 -moz-transform: rotate(7.2deg);
318 -ms-transform: rotate(7.2deg);
319 -o-transform: rotate(7.2deg);
320 transform: rotate(7.2deg);
321 }
322 .c100.p3 .bar {
323 -webkit-transform: rotate(10.8deg);
324 -moz-transform: rotate(10.8deg);
325 -ms-transform: rotate(10.8deg);
326 -o-transform: rotate(10.8deg);
327 transform: rotate(10.8deg);
328 }
329 .c100.p4 .bar {
330 -webkit-transform: rotate(14.4deg);
331 -moz-transform: rotate(14.4deg);
332 -ms-transform: rotate(14.4deg);
333 -o-transform: rotate(14.4deg);
334 transform: rotate(14.4deg);
335 }
336 .c100.p5 .bar {
337 -webkit-transform: rotate(18deg);
338 -moz-transform: rotate(18deg);
339 -ms-transform: rotate(18deg);
340 -o-transform: rotate(18deg);
341 transform: rotate(18deg);
342 }
343 .c100.p6 .bar {
344 -webkit-transform: rotate(21.6deg);
345 -moz-transform: rotate(21.6deg);
346 -ms-transform: rotate(21.6deg);
347 -o-transform: rotate(21.6deg);
348 transform: rotate(21.6deg);
349 }
350 .c100.p7 .bar {
351 -webkit-transform: rotate(25.2deg);
352 -moz-transform: rotate(25.2deg);
353 -ms-transform: rotate(25.2deg);
354 -o-transform: rotate(25.2deg);
355 transform: rotate(25.2deg);
356 }
357 .c100.p8 .bar {
358 -webkit-transform: rotate(28.8deg);
359 -moz-transform: rotate(28.8deg);
360 -ms-transform: rotate(28.8deg);
361 -o-transform: rotate(28.8deg);
362 transform: rotate(28.8deg);
363 }
364 .c100.p9 .bar {
365 -webkit-transform: rotate(32.4deg);
366 -moz-transform: rotate(32.4deg);
367 -ms-transform: rotate(32.4deg);
368 -o-transform: rotate(32.4deg);
369 transform: rotate(32.4deg);
370 }
371 .c100.p10 .bar {
372 -webkit-transform: rotate(36deg);
373 -moz-transform: rotate(36deg);
374 -ms-transform: rotate(36deg);
375 -o-transform: rotate(36deg);
376 transform: rotate(36deg);
377 }
378 .c100.p11 .bar {
379 -webkit-transform: rotate(39.6deg);
380 -moz-transform: rotate(39.6deg);
381 -ms-transform: rotate(39.6deg);
382 -o-transform: rotate(39.6deg);
383 transform: rotate(39.6deg);
384 }
385 .c100.p12 .bar {
386 -webkit-transform: rotate(43.2deg);
387 -moz-transform: rotate(43.2deg);
388 -ms-transform: rotate(43.2deg);
389 -o-transform: rotate(43.2deg);
390 transform: rotate(43.2deg);
391 }
392 .c100.p13 .bar {
393 -webkit-transform: rotate(46.800000000000004deg);
394 -moz-transform: rotate(46.800000000000004deg);
395 -ms-transform: rotate(46.800000000000004deg);
396 -o-transform: rotate(46.800000000000004deg);
397 transform: rotate(46.800000000000004deg);
398 }
399 .c100.p14 .bar {
400 -webkit-transform: rotate(50.4deg);
401 -moz-transform: rotate(50.4deg);
402 -ms-transform: rotate(50.4deg);
403 -o-transform: rotate(50.4deg);
404 transform: rotate(50.4deg);
405 }
406 .c100.p15 .bar {
407 -webkit-transform: rotate(54deg);
408 -moz-transform: rotate(54deg);
409 -ms-transform: rotate(54deg);
410 -o-transform: rotate(54deg);
411 transform: rotate(54deg);
412 }
413 .c100.p16 .bar {
414 -webkit-transform: rotate(57.6deg);
415 -moz-transform: rotate(57.6deg);
416 -ms-transform: rotate(57.6deg);
417 -o-transform: rotate(57.6deg);
418 transform: rotate(57.6deg);
419 }
420 .c100.p17 .bar {
421 -webkit-transform: rotate(61.2deg);
422 -moz-transform: rotate(61.2deg);
423 -ms-transform: rotate(61.2deg);
424 -o-transform: rotate(61.2deg);
425 transform: rotate(61.2deg);
426 }
427 .c100.p18 .bar {
428 -webkit-transform: rotate(64.8deg);
429 -moz-transform: rotate(64.8deg);
430 -ms-transform: rotate(64.8deg);
431 -o-transform: rotate(64.8deg);
432 transform: rotate(64.8deg);
433 }
434 .c100.p19 .bar {
435 -webkit-transform: rotate(68.4deg);
436 -moz-transform: rotate(68.4deg);
437 -ms-transform: rotate(68.4deg);
438 -o-transform: rotate(68.4deg);
439 transform: rotate(68.4deg);
440 }
441 .c100.p20 .bar {
442 -webkit-transform: rotate(72deg);
443 -moz-transform: rotate(72deg);
444 -ms-transform: rotate(72deg);
445 -o-transform: rotate(72deg);
446 transform: rotate(72deg);
447 }
448 .c100.p21 .bar {
449 -webkit-transform: rotate(75.60000000000001deg);
450 -moz-transform: rotate(75.60000000000001deg);
451 -ms-transform: rotate(75.60000000000001deg);
452 -o-transform: rotate(75.60000000000001deg);
453 transform: rotate(75.60000000000001deg);
454 }
455 .c100.p22 .bar {
456 -webkit-transform: rotate(79.2deg);
457 -moz-transform: rotate(79.2deg);
458 -ms-transform: rotate(79.2deg);
459 -o-transform: rotate(79.2deg);
460 transform: rotate(79.2deg);
461 }
462 .c100.p23 .bar {
463 -webkit-transform: rotate(82.8deg);
464 -moz-transform: rotate(82.8deg);
465 -ms-transform: rotate(82.8deg);
466 -o-transform: rotate(82.8deg);
467 transform: rotate(82.8deg);
468 }
469 .c100.p24 .bar {
470 -webkit-transform: rotate(86.4deg);
471 -moz-transform: rotate(86.4deg);
472 -ms-transform: rotate(86.4deg);
473 -o-transform: rotate(86.4deg);
474 transform: rotate(86.4deg);
475 }
476 .c100.p25 .bar {
477 -webkit-transform: rotate(90deg);
478 -moz-transform: rotate(90deg);
479 -ms-transform: rotate(90deg);
480 -o-transform: rotate(90deg);
481 transform: rotate(90deg);
482 }
483 .c100.p26 .bar {
484 -webkit-transform: rotate(93.60000000000001deg);
485 -moz-transform: rotate(93.60000000000001deg);
486 -ms-transform: rotate(93.60000000000001deg);
487 -o-transform: rotate(93.60000000000001deg);
488 transform: rotate(93.60000000000001deg);
489 }
490 .c100.p27 .bar {
491 -webkit-transform: rotate(97.2deg);
492 -moz-transform: rotate(97.2deg);
493 -ms-transform: rotate(97.2deg);
494 -o-transform: rotate(97.2deg);
495 transform: rotate(97.2deg);
496 }
497 .c100.p28 .bar {
498 -webkit-transform: rotate(100.8deg);
499 -moz-transform: rotate(100.8deg);
500 -ms-transform: rotate(100.8deg);
501 -o-transform: rotate(100.8deg);
502 transform: rotate(100.8deg);
503 }
504 .c100.p29 .bar {
505 -webkit-transform: rotate(104.4deg);
506 -moz-transform: rotate(104.4deg);
507 -ms-transform: rotate(104.4deg);
508 -o-transform: rotate(104.4deg);
509 transform: rotate(104.4deg);
510 }
511 .c100.p30 .bar {
512 -webkit-transform: rotate(108deg);
513 -moz-transform: rotate(108deg);
514 -ms-transform: rotate(108deg);
515 -o-transform: rotate(108deg);
516 transform: rotate(108deg);
517 }
518 .c100.p31 .bar {
519 -webkit-transform: rotate(111.60000000000001deg);
520 -moz-transform: rotate(111.60000000000001deg);
521 -ms-transform: rotate(111.60000000000001deg);
522 -o-transform: rotate(111.60000000000001deg);
523 transform: rotate(111.60000000000001deg);
524 }
525 .c100.p32 .bar {
526 -webkit-transform: rotate(115.2deg);
527 -moz-transform: rotate(115.2deg);
528 -ms-transform: rotate(115.2deg);
529 -o-transform: rotate(115.2deg);
530 transform: rotate(115.2deg);
531 }
532 .c100.p33 .bar {
533 -webkit-transform: rotate(118.8deg);
534 -moz-transform: rotate(118.8deg);
535 -ms-transform: rotate(118.8deg);
536 -o-transform: rotate(118.8deg);
537 transform: rotate(118.8deg);
538 }
539 .c100.p34 .bar {
540 -webkit-transform: rotate(122.4deg);
541 -moz-transform: rotate(122.4deg);
542 -ms-transform: rotate(122.4deg);
543 -o-transform: rotate(122.4deg);
544 transform: rotate(122.4deg);
545 }
546 .c100.p35 .bar {
547 -webkit-transform: rotate(126deg);
548 -moz-transform: rotate(126deg);
549 -ms-transform: rotate(126deg);
550 -o-transform: rotate(126deg);
551 transform: rotate(126deg);
552 }
553 .c100.p36 .bar {
554 -webkit-transform: rotate(129.6deg);
555 -moz-transform: rotate(129.6deg);
556 -ms-transform: rotate(129.6deg);
557 -o-transform: rotate(129.6deg);
558 transform: rotate(129.6deg);
559 }
560 .c100.p37 .bar {
561 -webkit-transform: rotate(133.20000000000002deg);
562 -moz-transform: rotate(133.20000000000002deg);
563 -ms-transform: rotate(133.20000000000002deg);
564 -o-transform: rotate(133.20000000000002deg);
565 transform: rotate(133.20000000000002deg);
566 }
567 .c100.p38 .bar {
568 -webkit-transform: rotate(136.8deg);
569 -moz-transform: rotate(136.8deg);
570 -ms-transform: rotate(136.8deg);
571 -o-transform: rotate(136.8deg);
572 transform: rotate(136.8deg);
573 }
574 .c100.p39 .bar {
575 -webkit-transform: rotate(140.4deg);
576 -moz-transform: rotate(140.4deg);
577 -ms-transform: rotate(140.4deg);
578 -o-transform: rotate(140.4deg);
579 transform: rotate(140.4deg);
580 }
581 .c100.p40 .bar {
582 -webkit-transform: rotate(144deg);
583 -moz-transform: rotate(144deg);
584 -ms-transform: rotate(144deg);
585 -o-transform: rotate(144deg);
586 transform: rotate(144deg);
587 }
588 .c100.p41 .bar {
589 -webkit-transform: rotate(147.6deg);
590 -moz-transform: rotate(147.6deg);
591 -ms-transform: rotate(147.6deg);
592 -o-transform: rotate(147.6deg);
593 transform: rotate(147.6deg);
594 }
595 .c100.p42 .bar {
596 -webkit-transform: rotate(151.20000000000002deg);
597 -moz-transform: rotate(151.20000000000002deg);
598 -ms-transform: rotate(151.20000000000002deg);
599 -o-transform: rotate(151.20000000000002deg);
600 transform: rotate(151.20000000000002deg);
601 }
602 .c100.p43 .bar {
603 -webkit-transform: rotate(154.8deg);
604 -moz-transform: rotate(154.8deg);
605 -ms-transform: rotate(154.8deg);
606 -o-transform: rotate(154.8deg);
607 transform: rotate(154.8deg);
608 }
609 .c100.p44 .bar {
610 -webkit-transform: rotate(158.4deg);
611 -moz-transform: rotate(158.4deg);
612 -ms-transform: rotate(158.4deg);
613 -o-transform: rotate(158.4deg);
614 transform: rotate(158.4deg);
615 }
616 .c100.p45 .bar {
617 -webkit-transform: rotate(162deg);
618 -moz-transform: rotate(162deg);
619 -ms-transform: rotate(162deg);
620 -o-transform: rotate(162deg);
621 transform: rotate(162deg);
622 }
623 .c100.p46 .bar {
624 -webkit-transform: rotate(165.6deg);
625 -moz-transform: rotate(165.6deg);
626 -ms-transform: rotate(165.6deg);
627 -o-transform: rotate(165.6deg);
628 transform: rotate(165.6deg);
629 }
630 .c100.p47 .bar {
631 -webkit-transform: rotate(169.20000000000002deg);
632 -moz-transform: rotate(169.20000000000002deg);
633 -ms-transform: rotate(169.20000000000002deg);
634 -o-transform: rotate(169.20000000000002deg);
635 transform: rotate(169.20000000000002deg);
636 }
637 .c100.p48 .bar {
638 -webkit-transform: rotate(172.8deg);
639 -moz-transform: rotate(172.8deg);
640 -ms-transform: rotate(172.8deg);
641 -o-transform: rotate(172.8deg);
642 transform: rotate(172.8deg);
643 }
644 .c100.p49 .bar {
645 -webkit-transform: rotate(176.4deg);
646 -moz-transform: rotate(176.4deg);
647 -ms-transform: rotate(176.4deg);
648 -o-transform: rotate(176.4deg);
649 transform: rotate(176.4deg);
650 }
651 .c100.p50 .bar {
652 -webkit-transform: rotate(180deg);
653 -moz-transform: rotate(180deg);
654 -ms-transform: rotate(180deg);
655 -o-transform: rotate(180deg);
656 transform: rotate(180deg);
657 }
658 .c100.p51 .bar {
659 -webkit-transform: rotate(183.6deg);
660 -moz-transform: rotate(183.6deg);
661 -ms-transform: rotate(183.6deg);
662 -o-transform: rotate(183.6deg);
663 transform: rotate(183.6deg);
664 }
665 .c100.p52 .bar {
666 -webkit-transform: rotate(187.20000000000002deg);
667 -moz-transform: rotate(187.20000000000002deg);
668 -ms-transform: rotate(187.20000000000002deg);
669 -o-transform: rotate(187.20000000000002deg);
670 transform: rotate(187.20000000000002deg);
671 }
672 .c100.p53 .bar {
673 -webkit-transform: rotate(190.8deg);
674 -moz-transform: rotate(190.8deg);
675 -ms-transform: rotate(190.8deg);
676 -o-transform: rotate(190.8deg);
677 transform: rotate(190.8deg);
678 }
679 .c100.p54 .bar {
680 -webkit-transform: rotate(194.4deg);
681 -moz-transform: rotate(194.4deg);
682 -ms-transform: rotate(194.4deg);
683 -o-transform: rotate(194.4deg);
684 transform: rotate(194.4deg);
685 }
686 .c100.p55 .bar {
687 -webkit-transform: rotate(198deg);
688 -moz-transform: rotate(198deg);
689 -ms-transform: rotate(198deg);
690 -o-transform: rotate(198deg);
691 transform: rotate(198deg);
692 }
693 .c100.p56 .bar {
694 -webkit-transform: rotate(201.6deg);
695 -moz-transform: rotate(201.6deg);
696 -ms-transform: rotate(201.6deg);
697 -o-transform: rotate(201.6deg);
698 transform: rotate(201.6deg);
699 }
700 .c100.p57 .bar {
701 -webkit-transform: rotate(205.20000000000002deg);
702 -moz-transform: rotate(205.20000000000002deg);
703 -ms-transform: rotate(205.20000000000002deg);
704 -o-transform: rotate(205.20000000000002deg);
705 transform: rotate(205.20000000000002deg);
706 }
707 .c100.p58 .bar {
708 -webkit-transform: rotate(208.8deg);
709 -moz-transform: rotate(208.8deg);
710 -ms-transform: rotate(208.8deg);
711 -o-transform: rotate(208.8deg);
712 transform: rotate(208.8deg);
713 }
714 .c100.p59 .bar {
715 -webkit-transform: rotate(212.4deg);
716 -moz-transform: rotate(212.4deg);
717 -ms-transform: rotate(212.4deg);
718 -o-transform: rotate(212.4deg);
719 transform: rotate(212.4deg);
720 }
721 .c100.p60 .bar {
722 -webkit-transform: rotate(216deg);
723 -moz-transform: rotate(216deg);
724 -ms-transform: rotate(216deg);
725 -o-transform: rotate(216deg);
726 transform: rotate(216deg);
727 }
728 .c100.p61 .bar {
729 -webkit-transform: rotate(219.6deg);
730 -moz-transform: rotate(219.6deg);
731 -ms-transform: rotate(219.6deg);
732 -o-transform: rotate(219.6deg);
733 transform: rotate(219.6deg);
734 }
735 .c100.p62 .bar {
736 -webkit-transform: rotate(223.20000000000002deg);
737 -moz-transform: rotate(223.20000000000002deg);
738 -ms-transform: rotate(223.20000000000002deg);
739 -o-transform: rotate(223.20000000000002deg);
740 transform: rotate(223.20000000000002deg);
741 }
742 .c100.p63 .bar {
743 -webkit-transform: rotate(226.8deg);
744 -moz-transform: rotate(226.8deg);
745 -ms-transform: rotate(226.8deg);
746 -o-transform: rotate(226.8deg);
747 transform: rotate(226.8deg);
748 }
749 .c100.p64 .bar {
750 -webkit-transform: rotate(230.4deg);
751 -moz-transform: rotate(230.4deg);
752 -ms-transform: rotate(230.4deg);
753 -o-transform: rotate(230.4deg);
754 transform: rotate(230.4deg);
755 }
756 .c100.p65 .bar {
757 -webkit-transform: rotate(234deg);
758 -moz-transform: rotate(234deg);
759 -ms-transform: rotate(234deg);
760 -o-transform: rotate(234deg);
761 transform: rotate(234deg);
762 }
763 .c100.p66 .bar {
764 -webkit-transform: rotate(237.6deg);
765 -moz-transform: rotate(237.6deg);
766 -ms-transform: rotate(237.6deg);
767 -o-transform: rotate(237.6deg);
768 transform: rotate(237.6deg);
769 }
770 .c100.p67 .bar {
771 -webkit-transform: rotate(241.20000000000002deg);
772 -moz-transform: rotate(241.20000000000002deg);
773 -ms-transform: rotate(241.20000000000002deg);
774 -o-transform: rotate(241.20000000000002deg);
775 transform: rotate(241.20000000000002deg);
776 }
777 .c100.p68 .bar {
778 -webkit-transform: rotate(244.8deg);
779 -moz-transform: rotate(244.8deg);
780 -ms-transform: rotate(244.8deg);
781 -o-transform: rotate(244.8deg);
782 transform: rotate(244.8deg);
783 }
784 .c100.p69 .bar {
785 -webkit-transform: rotate(248.4deg);
786 -moz-transform: rotate(248.4deg);
787 -ms-transform: rotate(248.4deg);
788 -o-transform: rotate(248.4deg);
789 transform: rotate(248.4deg);
790 }
791 .c100.p70 .bar {
792 -webkit-transform: rotate(252deg);
793 -moz-transform: rotate(252deg);
794 -ms-transform: rotate(252deg);
795 -o-transform: rotate(252deg);
796 transform: rotate(252deg);
797 }
798 .c100.p71 .bar {
799 -webkit-transform: rotate(255.6deg);
800 -moz-transform: rotate(255.6deg);
801 -ms-transform: rotate(255.6deg);
802 -o-transform: rotate(255.6deg);
803 transform: rotate(255.6deg);
804 }
805 .c100.p72 .bar {
806 -webkit-transform: rotate(259.2deg);
807 -moz-transform: rotate(259.2deg);
808 -ms-transform: rotate(259.2deg);
809 -o-transform: rotate(259.2deg);
810 transform: rotate(259.2deg);
811 }
812 .c100.p73 .bar {
813 -webkit-transform: rotate(262.8deg);
814 -moz-transform: rotate(262.8deg);
815 -ms-transform: rotate(262.8deg);
816 -o-transform: rotate(262.8deg);
817 transform: rotate(262.8deg);
818 }
819 .c100.p74 .bar {
820 -webkit-transform: rotate(266.40000000000003deg);
821 -moz-transform: rotate(266.40000000000003deg);
822 -ms-transform: rotate(266.40000000000003deg);
823 -o-transform: rotate(266.40000000000003deg);
824 transform: rotate(266.40000000000003deg);
825 }
826 .c100.p75 .bar {
827 -webkit-transform: rotate(270deg);
828 -moz-transform: rotate(270deg);
829 -ms-transform: rotate(270deg);
830 -o-transform: rotate(270deg);
831 transform: rotate(270deg);
832 }
833 .c100.p76 .bar {
834 -webkit-transform: rotate(273.6deg);
835 -moz-transform: rotate(273.6deg);
836 -ms-transform: rotate(273.6deg);
837 -o-transform: rotate(273.6deg);
838 transform: rotate(273.6deg);
839 }
840 .c100.p77 .bar {
841 -webkit-transform: rotate(277.2deg);
842 -moz-transform: rotate(277.2deg);
843 -ms-transform: rotate(277.2deg);
844 -o-transform: rotate(277.2deg);
845 transform: rotate(277.2deg);
846 }
847 .c100.p78 .bar {
848 -webkit-transform: rotate(280.8deg);
849 -moz-transform: rotate(280.8deg);
850 -ms-transform: rotate(280.8deg);
851 -o-transform: rotate(280.8deg);
852 transform: rotate(280.8deg);
853 }
854 .c100.p79 .bar {
855 -webkit-transform: rotate(284.40000000000003deg);
856 -moz-transform: rotate(284.40000000000003deg);
857 -ms-transform: rotate(284.40000000000003deg);
858 -o-transform: rotate(284.40000000000003deg);
859 transform: rotate(284.40000000000003deg);
860 }
861 .c100.p80 .bar {
862 -webkit-transform: rotate(288deg);
863 -moz-transform: rotate(288deg);
864 -ms-transform: rotate(288deg);
865 -o-transform: rotate(288deg);
866 transform: rotate(288deg);
867 }
868 .c100.p81 .bar {
869 -webkit-transform: rotate(291.6deg);
870 -moz-transform: rotate(291.6deg);
871 -ms-transform: rotate(291.6deg);
872 -o-transform: rotate(291.6deg);
873 transform: rotate(291.6deg);
874 }
875 .c100.p82 .bar {
876 -webkit-transform: rotate(295.2deg);
877 -moz-transform: rotate(295.2deg);
878 -ms-transform: rotate(295.2deg);
879 -o-transform: rotate(295.2deg);
880 transform: rotate(295.2deg);
881 }
882 .c100.p83 .bar {
883 -webkit-transform: rotate(298.8deg);
884 -moz-transform: rotate(298.8deg);
885 -ms-transform: rotate(298.8deg);
886 -o-transform: rotate(298.8deg);
887 transform: rotate(298.8deg);
888 }
889 .c100.p84 .bar {
890 -webkit-transform: rotate(302.40000000000003deg);
891 -moz-transform: rotate(302.40000000000003deg);
892 -ms-transform: rotate(302.40000000000003deg);
893 -o-transform: rotate(302.40000000000003deg);
894 transform: rotate(302.40000000000003deg);
895 }
896 .c100.p85 .bar {
897 -webkit-transform: rotate(306deg);
898 -moz-transform: rotate(306deg);
899 -ms-transform: rotate(306deg);
900 -o-transform: rotate(306deg);
901 transform: rotate(306deg);
902 }
903 .c100.p86 .bar {
904 -webkit-transform: rotate(309.6deg);
905 -moz-transform: rotate(309.6deg);
906 -ms-transform: rotate(309.6deg);
907 -o-transform: rotate(309.6deg);
908 transform: rotate(309.6deg);
909 }
910 .c100.p87 .bar {
911 -webkit-transform: rotate(313.2deg);
912 -moz-transform: rotate(313.2deg);
913 -ms-transform: rotate(313.2deg);
914 -o-transform: rotate(313.2deg);
915 transform: rotate(313.2deg);
916 }
917 .c100.p88 .bar {
918 -webkit-transform: rotate(316.8deg);
919 -moz-transform: rotate(316.8deg);
920 -ms-transform: rotate(316.8deg);
921 -o-transform: rotate(316.8deg);
922 transform: rotate(316.8deg);
923 }
924 .c100.p89 .bar {
925 -webkit-transform: rotate(320.40000000000003deg);
926 -moz-transform: rotate(320.40000000000003deg);
927 -ms-transform: rotate(320.40000000000003deg);
928 -o-transform: rotate(320.40000000000003deg);
929 transform: rotate(320.40000000000003deg);
930 }
931 .c100.p90 .bar {
932 -webkit-transform: rotate(324deg);
933 -moz-transform: rotate(324deg);
934 -ms-transform: rotate(324deg);
935 -o-transform: rotate(324deg);
936 transform: rotate(324deg);
937 }
938 .c100.p91 .bar {
939 -webkit-transform: rotate(327.6deg);
940 -moz-transform: rotate(327.6deg);
941 -ms-transform: rotate(327.6deg);
942 -o-transform: rotate(327.6deg);
943 transform: rotate(327.6deg);
944 }
945 .c100.p92 .bar {
946 -webkit-transform: rotate(331.2deg);
947 -moz-transform: rotate(331.2deg);
948 -ms-transform: rotate(331.2deg);
949 -o-transform: rotate(331.2deg);
950 transform: rotate(331.2deg);
951 }
952 .c100.p93 .bar {
953 -webkit-transform: rotate(334.8deg);
954 -moz-transform: rotate(334.8deg);
955 -ms-transform: rotate(334.8deg);
956 -o-transform: rotate(334.8deg);
957 transform: rotate(334.8deg);
958 }
959 .c100.p94 .bar {
960 -webkit-transform: rotate(338.40000000000003deg);
961 -moz-transform: rotate(338.40000000000003deg);
962 -ms-transform: rotate(338.40000000000003deg);
963 -o-transform: rotate(338.40000000000003deg);
964 transform: rotate(338.40000000000003deg);
965 }
966 .c100.p95 .bar {
967 -webkit-transform: rotate(342deg);
968 -moz-transform: rotate(342deg);
969 -ms-transform: rotate(342deg);
970 -o-transform: rotate(342deg);
971 transform: rotate(342deg);
972 }
973 .c100.p96 .bar {
974 -webkit-transform: rotate(345.6deg);
975 -moz-transform: rotate(345.6deg);
976 -ms-transform: rotate(345.6deg);
977 -o-transform: rotate(345.6deg);
978 transform: rotate(345.6deg);
979 }
980 .c100.p97 .bar {
981 -webkit-transform: rotate(349.2deg);
982 -moz-transform: rotate(349.2deg);
983 -ms-transform: rotate(349.2deg);
984 -o-transform: rotate(349.2deg);
985 transform: rotate(349.2deg);
986 }
987 .c100.p98 .bar {
988 -webkit-transform: rotate(352.8deg);
989 -moz-transform: rotate(352.8deg);
990 -ms-transform: rotate(352.8deg);
991 -o-transform: rotate(352.8deg);
992 transform: rotate(352.8deg);
993 }
994 .c100.p99 .bar {
995 -webkit-transform: rotate(356.40000000000003deg);
996 -moz-transform: rotate(356.40000000000003deg);
997 -ms-transform: rotate(356.40000000000003deg);
998 -o-transform: rotate(356.40000000000003deg);
999 transform: rotate(356.40000000000003deg);
1000 }
1001 .c100.p100 .bar {
1002 -webkit-transform: rotate(360deg);
1003 -moz-transform: rotate(360deg);
1004 -ms-transform: rotate(360deg);
1005 -o-transform: rotate(360deg);
1006 transform: rotate(360deg);
1007 }
1008
1009 .c100.criticalBug .bar,
1010 .c100.criticalBug .fill {
1011 border-color: #F24747 !important;
1012 }
1013
1014 .c100.highBug .bar,
1015 .c100.highBug .fill {
1016 border-color: #EE9336 !important;
1017 }
1018
1019 .c100.mediumBug .bar,
1020 .c100.mediumBug .fill {
1021 border-color: #FDC431 !important;
1022 }
1023
1024 .c100.lowBug .bar,
1025 .c100.lowBug .fill {
1026 border-color: #4CAE4C !important;
1027 }
1028
1029 .c100.verylowBug .bar,
1030 .c100.verylowBug .fill {
1031 border-color: #357ABD !important;
1032 }
1033 </style>
...\ No newline at end of file ...\ No newline at end of file
1 <script>
2 // for first loader button
3 function BeagleWP_Token_Input() {
4 var access_token = document.getElementById("access_token").value;
5 var application_token = document.getElementById("application_token").value;
6 if (access_token.length == 32 && application_token.length == 32) {
7 document.getElementById("continueSave").style.display = "none";
8 document.getElementById("spinnerSave").style.display = "block";
9 }
10 }
11 // for delete application
12 function BeagleWP_delete_Confirm() {
13 Swal.fire({
14 text: 'Are you sure you want to delete this application?',
15 icon: 'warning',
16 icon: 'warning',
17 showCancelButton: true,
18 confirmButtonColor: '#d33',
19 confirmButtonText: 'Delete'
20 }).then((result) => {
21 if (result.isConfirmed) {
22 // ajax call
23 var data = {
24 'action': 't4a_ajax_call_delete'
25 };
26 jQuery.post(ajaxurl, data, function(response) {
27 // analyse response
28 try {
29 var deleteDataResponse = JSON.parse(response);
30 if (deleteDataResponse == true || deleteDataResponse == 1 || deleteDataResponse != null) {
31 Swal.fire(
32 'Application deleted!',
33 '',
34 'success'
35 );
36 location.reload();
37 } else {
38 Swal.fire({
39 icon: 'error',
40 title: 'Delete failed!',
41 text: 'Something went wrong!',
42 });
43 }
44 } catch (err) {
45 console.log(err);
46 }
47 })
48 }
49 });
50 }
51
52 // for verify domain
53 function BeagleWP_verifyDomain_ByUser() {
54
55 document.getElementById("verifyDomain").style.display = "none";
56 document.getElementById("verifyDomainHide").style.display = "block";
57 var data = {
58 'action': 't4a_ajax_call_verify'
59 };
60 jQuery.post(ajaxurl, data, function(response) {
61 try {
62 var verifyResponse = JSON.parse(response);
63 if (verifyResponse.status != "Failed") {
64 var data = {
65 'action': 't4a_ajax_call_verify_update'
66 };
67 jQuery.post(ajaxurl, data, function(response) {
68 location.reload();
69 });
70 } else {
71 var data = {
72 'action': 't4a_ajax_call_verify_update_failed'
73 };
74 jQuery.post(ajaxurl, data, function(response) {});
75 document.getElementById("verifyDomainHide").style.display = "none";
76 document.getElementById("verifyError").style.display = "block";
77 }
78 } catch (err) {
79 }
80 });
81 }
82
83 // for automatic domain verify fail info
84 function BeagleWP_show_Msg() {
85 Swal.fire({
86 title: '',
87 text: "Domain verification failed. Try the other verification methods available by logging in to your Beagle Security account.",
88 icon: 'info',
89 showCancelButton: true,
90 confirmButtonColor: '#3085d6',
91 confirmButtonText: 'LOG IN'
92 }).then((result) => {
93 if (result.isConfirmed) {
94 window.open("https://beaglesecurity.com/login", '_blank');
95 }
96 })
97 }
98
99 // for status
100 function BeagleWP_get_Data() {
101 try {
102 document.getElementById("statusGet").style.display = "none";
103 document.getElementById("spinner").style.display = "block";
104 // ajax call
105 var data = {
106 'action': 't4a_ajax_call'
107 };
108 jQuery.post(ajaxurl, data, function(response) {
109 // analyse response
110 try {
111 var dataresponse = JSON.parse(response);
112 if (dataresponse.status != null || dataresponse.status != 'undefined') {
113 var width = dataresponse.progress;
114 var status = dataresponse.status;
115 document.getElementById("progress").style.width = width + "%";
116 document.getElementById("progress").innerText = width + "%";
117 document.getElementById("status").innerText = dataresponse.status + " : ";
118 document.getElementById("message").innerText = dataresponse.message;
119 document.getElementById("statusGet").style.display = "block";
120 document.getElementById("spinner").style.display = "none";
121 if (status == 'completed') {
122 document.getElementById("statusbar").style.display = "none";
123 location.reload();
124 BeagleWP_get_Result();
125 } else {
126 document.getElementById("resultData").style.display = "none";
127 }
128 } else {
129 console.log("Error occures!.");
130 }
131 } catch (err) {
132 }
133 });
134 } catch (err) {
135 }
136 }
137
138 // for get result
139 function BeagleWP_get_Result() {
140 try {
141 document.getElementById("statusbar").style.display = "none";
142 } catch (err) {
143 }
144 document.getElementById("resultData").style.display = "flex";
145 var data = {
146 'action': 't4a_ajax_call_result'
147 };
148 jQuery.post(ajaxurl, data, function(response) {
149 try {
150 var data = {
151 'action': 't4a_ajax_call_result'
152 };
153 jQuery.post(ajaxurl, data, function(response) {
154 var dataresponse = JSON.parse(response);
155 var dataResult = JSON.parse(dataresponse.result);
156 if(dataResult!=null) {
157 var totalBug = dataResult.vulnerability_summary.critical + dataResult.vulnerability_summary.high + dataResult.vulnerability_summary.medium + dataResult.vulnerability_summary.low + dataResult.vulnerability_summary.very_low;
158 var score = dataResult.score;
159 if(score <= 2){
160 document.getElementById("progressClass").classList.add('p' + dataResult.score + '0');
161 document.getElementById("progressClass").classList.add('criticalBug');
162 } else if(score <= 4){
163 document.getElementById("progressClass").classList.add('p' + dataResult.score + '0');
164 document.getElementById("progressClass").classList.add('highBug');
165 } else if(score <= 6){
166 document.getElementById("progressClass").classList.add('p' + dataResult.score + '0');
167 document.getElementById("progressClass").classList.add('mediumBug');
168 } else if(score <= 8){
169 document.getElementById("progressClass").classList.add('p' + dataResult.score + '0');
170 document.getElementById("progressClass").classList.add('lowBug');
171 } else if(score <= 10){
172 document.getElementById("progressClass").classList.add('p' + dataResult.score + '0');
173 document.getElementById("progressClass").classList.add('verylowBug');
174 }
175 document.getElementById("progressCount").innerText = dataResult.score;
176 document.getElementById("criticalBug").innerText = dataResult.vulnerability_summary.critical;
177 document.getElementById("highBug").innerText = dataResult.vulnerability_summary.high;
178 document.getElementById("mediumBug").innerText = dataResult.vulnerability_summary.medium;
179 document.getElementById("lowBug").innerText = dataResult.vulnerability_summary.low;
180 document.getElementById("verylowBug").innerText = dataResult.vulnerability_summary.very_low;
181 document.getElementById("totalBug").innerText = totalBug;
182 document.getElementById("genDate").innerText = " " + dataResult.generated_date;
183 }
184 });
185 } catch (err) {
186 }
187 });
188 }
189 </script>
...\ No newline at end of file ...\ No newline at end of file
1 <?php
2
3 //GPL license
4 include sanitize_file_name('gplLicense.php');
5
6 /*To start the test after verifying the application*/
7 function Beagle_WP_start_Test() {
8
9 global $wpdb;
10
11 global $apiServerBaseUrl;
12
13 $Beagle_WP_scan_table = $wpdb->prefix."beagleScanData";
14
15 $getTokenFromTbl = $wpdb->get_results($wpdb->prepare("SELECT * FROM $Beagle_WP_scan_table"));
16
17 foreach ( $getTokenFromTbl as $print ){
18 $Beagle_WP_access_token = $print->access_token;
19 $Beagle_WP_application_token = $print->application_token;
20 }
21
22 $beaglrURL = $apiServerBaseUrl.'test/start';
23
24 $scanStartData = array("access_token" => $Beagle_WP_access_token, "application_token" => $Beagle_WP_application_token);
25
26 $startRequest = wp_remote_post($beaglrURL, array(
27 'headers' => array('Content-Type' => 'application/json; charset=utf-8'),
28 'body' => json_encode($scanStartData),
29 'method' => 'POST',
30 'data_format' => 'body',
31 ));
32
33 $startMsgResponse = json_decode(wp_remote_retrieve_body( $startRequest ));
34 try {
35 if( $startMsgResponse ) {
36
37 try {
38 if ($startMsgResponse->status == 'Failed') {
39
40 $updateData = $wpdb->query($wpdb->prepare("UPDATE $Beagle_WP_scan_table SET status = %s WHERE application_token = %s",$startMsgResponse->status, $Beagle_WP_application_token));
41
42 ?>
43 <script>
44 function app_Exist(){
45 var errorMsg=setTimeout("document.getElementById('errMsg').style.display='none';",4000);
46 }
47 app_Exist()
48 </script>
49 <div class="errormsg">
50 <p id="errMsg"><?php echo $startMsgResponse->message;?></p>
51 </div>
52 <?php
53 }else {
54
55 $resultToken = $startMsgResponse->result_token;
56
57 $updateData = $wpdb->query( $wpdb->prepare("UPDATE $Beagle_WP_scan_table SET status = %s , result_token = %s, runningStatus = %s WHERE application_token = %s",$startMsgResponse->status, $startMsgResponse->result_token, "Running", $Beagle_WP_application_token));
58 ?>
59 <script>
60 function app_Exist(){
61 var errorMsg=setTimeout("document.getElementById('errMsg').style.display='none';",4000);
62 }
63 app_Exist()
64 </script>
65 <div class="message">
66 <p id="errMsg">Test started successfully.</p>
67 </div>
68 <?php
69
70 }
71 }
72 catch(Exception $e) {
73 }
74 }
75 else {
76
77 ?>
78 <script>
79 function app_Exist(){
80 var errorMsg=setTimeout("document.getElementById('errMsg').style.display='none';",4000);
81 }
82 app_Exist()
83 </script>
84 <div class="errormsg">
85 <p id="errMsg">Test start failed!</p>
86 </div>
87 <?php
88 }
89 }catch(Exception $e) {
90 }
91 }
...\ No newline at end of file ...\ No newline at end of file
1 <?php
2
3 //GPL license
4 include sanitize_file_name('gplLicense.php');
5
6 /*to stop the ongoing test*/
7 function Beagle_WP_stop_Test() {
8
9 global $wpdb;
10
11 global $apiServerBaseUrl;
12
13 $Beagle_WP_scan_table = $wpdb->prefix."beagleScanData";
14
15 $getTokenFromTbl = $wpdb->get_results($wpdb->prepare("SELECT * FROM $Beagle_WP_scan_table"));
16
17 foreach ( $getTokenFromTbl as $print ){
18 $Beagle_WP_access_token = $print->access_token;
19 $Beagle_WP_application_token = $print->application_token;
20 }
21 try {
22
23 if($Beagle_WP_access_token != null || $Beagle_WP_application_token != null) {
24
25 try {
26
27 if(isset($_POST['stopBeagleTest']) || isset($_POST['restartBeagleTest'])){
28 $_POST = array();
29 $beaglrURL = $apiServerBaseUrl.'test/stop';
30
31 $scanStopData = array("access_token" => $Beagle_WP_access_token, "application_token" => $Beagle_WP_application_token);
32 $request = wp_remote_post($beaglrURL, array(
33 'headers' => array('Content-Type' => 'application/json; charset=utf-8'),
34 'body' => json_encode($scanStopData),
35 'method' => 'POST',
36 'data_format' => 'body',
37 ));
38
39 $stopResponse = json_decode(wp_remote_retrieve_body( $request ));
40
41 try {
42
43 if( $stopResponse->status == "Failed" ) {
44
45 $updateData = $wpdb->query($wpdb->prepare("UPDATE $Beagle_WP_scan_table SET status = %s WHERE application_token = %s",$stopResponse->status, $Beagle_WP_application_token));
46
47 ?>
48 <script>
49 function app_Exist(){
50 var errorMsg=setTimeout("document.getElementById('errMsg').style.display='none';",4000);
51 }
52 app_Exist()
53 </script>
54 <div class="errormsg">
55 <p id="errMsg">Test stop failed!</p>
56 </div>
57 <?php
58 } else {
59 $updateData = $wpdb->query( $wpdb->prepare("UPDATE $Beagle_WP_scan_table SET status = %s, runningStatus = %s WHERE application_token = %s",$stopResponse->status, "notRunning" , $Beagle_WP_application_token));
60 ?>
61 <script>
62 function app_Exist(){
63 var errorMsg=setTimeout("document.getElementById('errMsg').style.display='none';",4000);
64 }
65 app_Exist()
66 </script>
67 <div class="message">
68 <p id="errMsg">Test stopped successfully</p>
69 </div>
70 <?php
71 }
72 }catch (Exception $e) {
73 }
74 }
75 }catch (Exception $e) {
76 }
77
78 }else {
79 ?>
80 <script>
81 function app_Exist(){
82 var errorMsg=setTimeout("document.getElementById('errMsg').style.display='none';",4000);
83 }
84 app_Exist()
85 </script>
86 <div class="errormsg">
87 <p id="errMsg">Error!</p>
88 </div>
89 <?php
90 }
91
92 }
93 catch (Exception $e) {
94 }
95 }
...\ No newline at end of file ...\ No newline at end of file
1 <?php
2 include sanitize_file_name('bootstrap.php');
3 ?>
4
5
6 <style>
7
8 .font-monte {
9 font-family: 'Montserrat', sans-serif;
10 }
11
12 .header {
13 width: 100%;
14 margin: 4rem auto 1rem auto;
15 justify-content: center !important;
16 display: flex;
17 overflow-x: hidden;
18 overflow-y: auto;
19 }
20
21 .header a {
22 text-decoration: none;
23 }
24
25 .header a img {
26 outline: none;
27 }
28
29 .header img {
30 width: 200px;
31 height: auto;
32 }
33
34 .errormsg p {
35 padding: 1rem;
36 color: #fff;
37 position: fixed;
38 background-color: red;
39 top: 3rem;
40 right: 0px;
41 font-size: 14px;
42 font-family: "Georgia";
43 font-weight: 500;
44 width: 300px;
45 z-index: 999;
46 }
47
48 .message p {
49 padding: 1rem;
50 color: #fff;
51 background-color: green;
52 position: fixed;
53 top: 3rem;
54 right: 0px;
55 font-size: 14px;
56 font-family: "Georgia";
57 font-weight: 500;
58 width: 300px;
59 z-index: 999;
60 }
61
62 .input-form {
63 width: 25rem;
64 margin: 2rem auto;
65 justify-content: center !important;
66 display: block;
67 padding: 1rem;
68 }
69
70 .help {
71 padding-top: 1rem;
72 font-size: 12px;
73 color: #006eeb;
74 text-decoration: none;
75 }
76
77 .help a {
78 text-decoration: none;
79 outline: none !important;
80 }
81
82 .help a:focus {
83 text-decoration: none;
84 outline: none !important;
85 }
86
87 .label {
88 font-size: 14px;
89 color: #676767;
90 margin: 24px 0 10px 0px;
91 font-weight: 400;
92 }
93
94 .form-control {
95 display: flex;
96 width: 100%;
97 border-radius: 4px;
98 padding: 0.5rem 1rem !important;
99 margin-top: 10px;
100 font-size: 14px;
101 height: 50px;
102 background-color: #f5f5f5;
103 border: 1px solid #cfd8dc;
104 }
105
106 .access {
107 margin-bottom: 24px !important;
108 }
109
110 .form-group {
111 display: block;
112 width: 100%;
113 margin: auto;
114 }
115
116 .appdiv {
117 margin-bottom: 46px;
118 }
119
120 .startBtn {
121 background-color: #14bc53;
122 border: 1px solid #1fca5f;
123 border-radius: 4px;
124 padding: 12px 16px;
125 color: #fff;
126 font-size: 16px;
127 font-weight: 600;
128 width: 100%;
129 position: relative;
130 display: flex;
131 justify-content: center;
132 align-items: center;
133 transition: all .2s ease-in-out;
134 cursor: pointer;
135 }
136
137 .startBtn:focus {
138 outline: transparent;
139 }
140
141 .container {
142 padding: 7px;
143 overflow-x: hidden;
144 margin-top: 52px;
145 width: 50rem;
146 background-color: #f2f4f8;
147 border-radius: 12px;
148 box-shadow: 0px 1px 4px 0px #d2d2d2;
149 padding-bottom: 2rem;
150 }
151
152 .head-main {
153 height: 135px;
154 background-color: #ffffff;
155 border-radius: 8px;
156 box-shadow: 0px 2px 3px 0px #d0d0d0;
157 padding: 2rem;
158 }
159
160 .head-block {
161 padding: auto 24px !important;
162 }
163
164 .titledomain {
165 font-size: 18px;
166 color: #3d3d3d;
167 line-height: 25px;
168 white-space: nowrap;
169 overflow: hidden;
170 text-overflow: ellipsi
171 }
172
173 .urldomain {
174 font-size: 14px;
175 color: #006eeb;
176 white-space: nowrap;
177 overflow: hidden;
178 text-overflow: ellipsi
179 }
180
181 .app-image {
182 max-width: 50px;
183 }
184
185 .delete-icon {
186 height: 36px;
187 width: 36px;
188 background-color: #e9e9e9;
189 border-radius: 50%;
190 padding: 8px 4px;
191 color: #eb0000;
192 cursor: pointer;
193 }
194
195 .delete-icon:hover {
196 box-shadow: 0px 1px 6px 0px;
197 }
198
199 .delete-icon-hide {
200 height: 36px;
201 width: 36px;
202 background-color: #e9e9e9;
203 border-radius: 50%;
204 padding: 8px 4px;
205 color: #a0a0a0;
206 cursor: pointer;
207 }
208
209 .verify-icon {
210 height: 16px;
211 width: 16px;
212 border: 1px solid #1cd160;
213 border-radius: 50%;
214 border-radius: 50%;
215 color: #1cd160;
216 font-size: 12px;
217 margin-left: 10px !important;
218 margin-top: 3px !important;
219 padding: 1px !important;
220 }
221
222 .close-icon {
223 height: 36px;
224 width: 36px;
225 border-radius: 50%;
226 padding: 6px 4px;
227 color: #eb0000;
228 border: 2px solid #eb0000;
229 }
230
231 .errorMsg {
232 font-family: 'Montserrat';
233 font-size: 12px;
234 color: #eb0000;
235 margin-left: 20px;
236 }
237
238 .infoicon {
239 color: #3fa9f5;
240 cursor: pointer;
241 margin-left: 8px;
242 }
243
244 .btn {
245 height: 52px;
246 width: 168px;
247 border-radius: 8px;
248 color: #fff;
249 }
250
251 .start-test {
252 background-color: #006eeb;
253 }
254
255 .hidden-test {
256 background-color: #006eeb;
257 opacity: 0.5;
258 }
259
260 .stop-test {
261 background-color: #eb0000;
262 }
263
264 .btn:hover {
265 color: #fff;
266 font-weight: 500;
267 }
268
269 .verify-domain {
270 height: 32px;
271 background-color: #e6f4ff;
272 border: 1px solid #d7edff;
273 border-radius: 4px;
274 color: #1f1f1f !important;
275 margin-left: 20px;
276 font-size: 12px;
277 width: 135px;
278 }
279
280 .verify-domain:hover {
281 box-shadow: 0px 1px 6px 0px #006eeb;
282 }
283
284 .verify-domain:focus {
285 outline: transparent;
286 }
287
288 .test-box {
289 padding: 1.5rem;
290 }
291
292 .status-box {
293 padding-left: 14px;
294 }
295
296 .ststustest {
297 text-transform: uppercase;
298 font-family: 'Montserrat';
299 font-size: 14px;
300 color: #676767;
301 }
302
303 .test-msg {
304 font-family: 'Montserrat';
305 font-size: 14px;
306 color: #1f1f1f;
307 }
308
309 .reload-icon {
310 cursor: pointer;
311 height: 30px;
312 width: 30px;
313 background-color: #ffffff;
314 font-size: 20px;
315 color: #006eeb;
316 border-radius: 50%;
317 padding: 5px;
318 }
319
320 .score {
321 font-size: 14px;
322 }
323
324 .progressdiv {
325 width: 90%;
326 }
327
328 .progress {
329 background-color: #dfe4ef;
330 }
331
332 .progress-bar {
333 background-color: #006eeb;
334 }
335
336 .progress,
337 .progress-bar {
338 font-size: 10px;
339 border-radius: 10px;
340 }
341
342 .reloadicon {
343 width: 10%;
344 }
345
346 .critical {
347 background-color: #F24747;
348 border: 1px solid #F24747;
349 border-radius: 8px 0px 0px 8px;
350 padding-top: 14px;
351 padding-bottom: 12px;
352 }
353
354 .high {
355 background-color: #EE9336;
356 border: 1px solid #EE9336;
357 padding-top: 14px;
358 padding-bottom: 12px;
359 }
360
361 .medium {
362 background-color: #FDC431;
363 border: 1px solid #FDC431;
364 padding-top: 14px;
365 padding-bottom: 12px;
366 }
367
368 .low {
369 background-color: #4CAE4C;
370 border: 1px solid #4CAE4C;
371 padding-top: 14px;
372 padding-bottom: 12px;
373 }
374
375 .verylow {
376 background-color: #357ABD;
377 border: 1px solid #357ABD;
378 padding-top: 14px;
379 padding-bottom: 12px;
380 }
381
382 .total {
383 background-color: #ffffff;
384 border: 1px solid #DFE4EF;
385 border-radius: 0px 8px 8px 0px;
386 padding-top: 14px;
387 padding-bottom: 12px;
388 }
389
390 .total .countnumber {
391 color: #000;
392 font-weight: 500;
393 font-size: 24px;
394 line-height: 0.95;
395 }
396
397 .countnumber {
398 color: #fff;
399 font-weight: 500;
400 font-size: 24px;
401 line-height: 0.95;
402 }
403
404 .total .counttext {
405 font-size: 12px;
406 padding-top: 8px;
407 color: #006eeb;
408 }
409
410 .counttext {
411 font-size: 12px;
412 padding-top: 5px;
413 color: #fff;
414 }
415
416 .startVerify {
417 display: none;
418 }
419
420 .spinner-border {
421 width: 20px;
422 height: 20px;
423 margin: auto;
424 }
425
426 .resultblock {
427 display: none;
428 }
429
430 .loadingRe {
431 display: flex;
432 cursor: pointer;
433 height: 30px;
434 width: 30px;
435 background-color: #ffffff;
436 font-size: 20px;
437 color: #006eeb;
438 border-radius: 50%;
439 padding: 5px;
440 }
441
442 .gendate {
443 font-size: 12px;
444 color: #1f1f1f;
445 }
446
447 .gentxt {
448 font-size: 14px;
449 color: #1f1f1f;
450 }
451
452 .gentxt span {
453 font-size: 12px;
454 color: #676767;
455 }
456
457 .goto {
458 font-size: 12px;
459 }
460
461 .goto a {
462 text-decoration: none;
463 }
464
465 .loader {
466 border: 5px solid transparent;
467 background-color: transparent;
468 border-radius: 50%;
469 border-top: 3px solid #006eeb;
470 width: 20px;
471 height: 20px;
472 -webkit-animation: spin 2s linear infinite;
473 /* Safari */
474 animation: spin 2s linear infinite;
475 }
476
477 .loaderFirst {
478 border: 5px solid transparent;
479 background-color: transparent;
480 border-radius: 50%;
481 border-top: 5px solid #fff;
482 width: 20px;
483 height: 20px;
484 -webkit-animation: spin 2s linear infinite;
485 /* Safari */
486 animation: spin 2s linear infinite;
487 }
488
489 /* Safari */
490 @-webkit-keyframes spin {
491 0% {
492 -webkit-transform: rotate(0deg);
493 }
494
495 100% {
496 -webkit-transform: rotate(360deg);
497 }
498 }
499
500 @keyframes spin {
501 0% {
502 transform: rotate(0deg);
503 }
504
505 100% {
506 transform: rotate(360deg);
507 }
508 }
509
510 /* cyrillic-ext */
511 @font-face {
512 font-family: 'Montserrat';
513 font-style: normal;
514 font-weight: 400;
515 src: url(https://fonts.gstatic.com/s/montserrat/v15/JTUSjIg1_i6t8kCHKm459WRhyzbi.woff2) format('woff2');
516 unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
517 }
518
519 /* cyrillic */
520 @font-face {
521 font-family: 'Montserrat';
522 font-style: normal;
523 font-weight: 400;
524 src: url(https://fonts.gstatic.com/s/montserrat/v15/JTUSjIg1_i6t8kCHKm459W1hyzbi.woff2) format('woff2');
525 unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
526 }
527
528 /* vietnamese */
529 @font-face {
530 font-family: 'Montserrat';
531 font-style: normal;
532 font-weight: 400;
533 src: url(https://fonts.gstatic.com/s/montserrat/v15/JTUSjIg1_i6t8kCHKm459WZhyzbi.woff2) format('woff2');
534 unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
535 }
536
537 /* latin-ext */
538 @font-face {
539 font-family: 'Montserrat';
540 font-style: normal;
541 font-weight: 400;
542 src: url(https://fonts.gstatic.com/s/montserrat/v15/JTUSjIg1_i6t8kCHKm459Wdhyzbi.woff2) format('woff2');
543 unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
544 }
545
546 /* latin */
547 @font-face {
548 font-family: 'Montserrat';
549 font-style: normal;
550 font-weight: 400;
551 src: url(https://fonts.gstatic.com/s/montserrat/v15/JTUSjIg1_i6t8kCHKm459Wlhyw.woff2) format('woff2');
552 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
553 }
554
555
556 .application-image {
557 margin: auto;
558 width: 50px;
559 height: 50px;
560 background-size: 50px 50px;
561 background-repeat: no-repeat;
562 background-image: url('data:image/png;base64,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');
563 }
564 </style>
...\ No newline at end of file ...\ No newline at end of file
1 <?php
2
3 //GPL license
4 include sanitize_file_name('gplLicense.php');
5
6 /*Updating database after verifying signature*/
7 function Beagle_WP_verify_Token_Update(){
8
9 global $wpdb;
10
11 $Beagle_WP_scan_table = $wpdb->prefix."beagleScanData";
12
13 $getTokenFromTbl = $wpdb->get_results($wpdb->prepare("SELECT * FROM $Beagle_WP_scan_table"));
14
15 $Beagle_WP_application_token = $getTokenFromTbl[0]->application_token;
16
17 $updateData = $wpdb->query( $wpdb->prepare("UPDATE $Beagle_WP_scan_table SET verified = %d WHERE application_token = %s",1, $Beagle_WP_application_token));
18 try{
19 if($updateData) {
20 echo json_encode("succeess");
21 exit;
22 } else {
23 echo json_encode("failed");
24 exit;
25 }
26 } catch (Exception $e) {
27 }
28 }
...\ No newline at end of file ...\ No newline at end of file
1 <?php
2
3 //GPL license
4
5 include sanitize_file_name('gplLicense.php');
6
7 /*to verify the signature token*/
8 function Beagle_WP_verify_Token()
9 {
10
11 global $wpdb;
12
13 global $apiServerBaseUrl;
14
15 $Beagle_WP_scan_table = $wpdb->prefix . "beagleScanData";
16
17 $getTokenFromTbl = $wpdb->get_results($wpdb->prepare("SELECT * FROM $Beagle_WP_scan_table"));
18
19 foreach ($getTokenFromTbl as $print) {
20 $Beagle_WP_access_token = $print->access_token;
21 $Beagle_WP_application_token = $print->application_token;
22 }
23
24 $beagleVerifyURL = $apiServerBaseUrl . 'test/signature/verify';
25
26 $verifySignature = array("access_token" => $Beagle_WP_access_token, "application_token" => $Beagle_WP_application_token, "type" => "WORDPRESS");
27
28 $verifyResponse = wp_remote_post($beagleVerifyURL, array(
29 'headers' => array('Content-Type' => 'application/json; charset=utf-8'),
30 'body' => json_encode($verifySignature),
31 'method' => 'POST',
32 'data_format' => 'body',
33 ));
34
35 $statusResponse = json_decode(wp_remote_retrieve_body($verifyResponse));
36 try {
37 echo json_encode($statusResponse);
38 exit;
39 } catch (Exception $e) {
40 }
41 }
1 This is a status check file.
2
3 ██████ ███████ █████ ██████ ██ ███████ ██ ██ ████████
4 ██ ██ ██ ██ ██ ██ ██ ██ █ ██ ██ ██ ██
5 ██████ █████ ███████ ██ ███ ██ █████ ██ ██ ██ ████████
6 ██ ██ ██ ██ ██ ██ ██ ██ ██ █ ██ █ █ ██ ██
7 ██████ ███████ ██ ██ ██████ ███████ ███████ ███ ███ ██
...\ No newline at end of file ...\ No newline at end of file
1 This is a log file.
2 =========================================================================
3
4 ██████ ███████ █████ ██████ ██ ███████ ██ ██ ████████
5 ██ ██ ██ ██ ██ ██ ██ ██ █ ██ ██ ██ ██
6 ██████ █████ ███████ ██ ███ ██ █████ ██ ██ ██ ████████
7 ██ ██ ██ ██ ██ ██ ██ ██ ██ █ ██ █ █ ██ ██
8 ██████ ███████ ██ ██ ██████ ███████ ███████ ███ ███ ██
9
10 =========================================================================
1 === Beagle Security - WP Security, Advanced Penetration Testing ===
2 Contributors: Jishu Vijayan C K, Dileep Achuthan, Nayana EN
3 Tags: security, security plugin, website security, wordpress security, security testing
4 Donate link: https://beaglesecurity.com/
5 Requires at least: 5.2
6 Tested up to: 6.0
7 Requires PHP: 7.2
8 Stable tag: 1.0.7
9 License: GPLv2
10 License URI: https://www.gnu.org/licenses/gpl-2.0.html
11
12
13
14 == Description ==
15
16 ##### SECURE YOUR WEBSITE FROM THE LATEST VULNERABILITIES WITH THE EASY TO USE WEBSITE PENETRATION TESTING TOOL
17
18 **[Beagle Security](https://beaglesecurity.com/ "Beagle Security")** is a web application penetration testing tool that helps you to identify vulnerabilities on your WordPress website before hackers exploit them.
19
20 35% of the web is built on WordPress and it's a favorite target for hackers. Vulnerabilities in the WordPress core, plugins, and themes can all leave your website prone to a cyber attack leading to loss of critical data and financial losses.
21
22 That is why you need to proactively tackle WordPress website security and make sure you’re secure from common WordPress security vulnerabilities like cross-site scripting (XSS), SQL injection, file inclusion exploits, directory traversal, and many more.
23
24 With Beagle Security, you can find complex attack vectors WordPress vulnerability scanners fail to detect. Vulnerability scanners give you quick scan results, but they are not designed to identify modern security threats.
25
26 By leveraging an AI-powered core, Beagle Security does in-depth penetration tests on your website and discovers all the loopholes in it. With evidence-based vulnerability reporting, you get insights into the occurrence of each vulnerability on your website and actionable recommendations on how to fix the discovered security issues and secure your website.
27
28 ### Beagle Security’s free plugin helps you to:
29
30 * Connect securely to your Beagle Security account
31 * Complete domain verification with just a button’s click
32 * Start/stop tests from your WP admin console
33 * See the progress of running tests
34 * View test results with total vulnerabilities in your website
35 * Understand the classification of vulnerabilities according to the severity
36 * Know the security score of your website
37
38 ### WHY CHOOSE BEAGLE SECURITY
39
40 * Compliant with global security standards like OWASP and SANS
41 * Set up in less than 5 minutes- no coding required
42 * Constantly updated vulnerability database with latest threats and zero-day vulnerabilities
43 * AI-powered core for human-like decision making
44 * Lowest false positives
45 * Authenticated testing for complex websites with login module
46 * Ensure security compliance with continuous vulnerability assessments
47
48 ### GETTING STARTED
49
50 You’ll need to have an account on Beagle Security to use this plugin. You can sign up [here](https://beaglesecurity.com/signup "Beagle Security Signup"). Installing the plugin is easy and all you need is to add the access token and application token from your Beagle Security account to finish the setup.
51
52 == Installation ==
53 * Step 1: Search Beagle Security - WP Security, Advanced Penetration Testing in the plugin search bar.
54 * Step 2: Click **Install** to add the plugin to your WordPress website.
55 * Step 3: Go to the Plugins page and activate Beagle Security - WP Security, Advanced Penetration Testing plugin.
56 * Step 4: Provide access token and application token to start the security test.
57
58 == Frequently Asked Questions ==
59 For support related articles, kindly visit the **[Help Center](https://help.beaglesecurity.com/category/1/general "Beagle Security Help Center")**.
60
61 == Screenshots ==
62 1. Connect easily by setting up an access token and application token
63 2. One-click domain verification
64 3. Start tests from your WP admin console
65 4. See the progress of running tests
66 5. Know the security score of your website, view test results and classification of vulnerabilities according to the severity
67
68 == Changelog ==
69 Version 1.0.3
70 *API update.
71 Version 1.0.4
72 *Bug Fixes
73 Version 1.0.5
74 *Bug Fixes
75 Version 1.0.6
76 *Bug Fixes
77
78 == Upgrade Notice ==
79 Version 1.0.7
80
1 <?php
2
3 /**
4 * @link https://beaglesecurity.com/
5 * @since 1.0.7
6 * @package Beagle Security
7 *
8 * @wordpress-plugin
9 * Plugin Name: Beagle Security - WP Security, Advanced Penetration Testing
10 * Plugin URI: https://beaglesecurity.com/wordpress-security-testing
11 * Description: Secure your WordPress website from the latest vulnerabilities with automated in-depth penetration testing.
12 * Version: 1.0.7
13 * Requires at least: 5.2
14 * Requires PHP: 7.2
15 * Author: Beagle Security
16 * Author URI: https://beaglesecurity.com/
17 * License: GPL v2
18 * License URI: https://www.gnu.org/licenses/gpl-2.0.html
19 * Text Domain: Beagle wordpress scan
20 * Domain Path: /languages
21 */
22
23 /*
24 Beagle Security - WP Security, Advanced Penetration Testing, 2021 Beagle Security
25 This plugin is distributed under the terms of the GNU GPL
26
27 This program is free software; you can redistribute it and/or modify
28 it under the terms of the GNU General Public License as published by
29 the Free Software Foundation; either version 2 of the License, or
30 (at your option) any later version.
31
32 This program is distributed in the hope that it will be useful,
33 but WITHOUT ANY WARRANTY; without even the implied warranty of
34 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
35 GNU General Public License for more details.
36
37 You should have received a copy of the GNU General Public License
38 along with this program; If not, see {License URI}.
39 */
40
41 /* Basic Securtiy*/
42 defined('ABSPATH') or die("No Access");
43
44
45 if (!defined('ABSPATH')) {
46 define('ABSPATH', dirname(__FILE__), '/');
47 }
48
49 class Beagle_WordPress_Scan
50 {
51
52 function __construct()
53 {
54 add_action('init', array($this, 'Beagle_WP_table_create'));
55 }
56
57 // for plugin activate
58 function activate_Beagle_plugin()
59 {
60 flush_rewrite_rules();
61 }
62
63 // for plugin deactivate
64 function deactivate_Beagle_plugin()
65 {
66 global $wpdb;
67
68 $Beagle_WP_scan_table = $wpdb->prefix . 'beagleScanData';
69
70 $sql = "DROP TABLE IF EXISTS $Beagle_WP_scan_table";
71 $wpdb->query($sql);
72
73 delete_option("my_plugin_db_version");
74
75 flush_rewrite_rules();
76 }
77
78 function Beagle_WP_table_create()
79 {
80 flush_rewrite_rules();
81 global $wpdb;
82
83 $Beagle_WP_scan_table = $wpdb->prefix . "beagleScanData";
84
85 $charset_collate = $wpdb->get_charset_collate();
86
87 $sql = "CREATE TABLE IF NOT EXISTS $Beagle_WP_scan_table( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, access_token VARCHAR(50) NOT NULL, application_token VARCHAR(50) NOT NULL, status VARCHAR(50) NOT NULL, result_token VARCHAR(50), verified BOOLEAN NOT NULL,title VARCHAR(20),url VARCHAR(50),runningStatus VARCHAR(10), autoVerify BOOLEAN)DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;";
88 require_once(ABSPATH . "wp-admin/includes/upgrade.php");
89 dbDelta($sql);
90 }
91
92 }
93
94 if (class_exists('Beagle_WordPress_Scan')) {
95
96 $beagleWPscanStart = new Beagle_WordPress_Scan();
97
98 // activation hook
99 register_deactivation_hook(__FILE__, array($beagleWPscanStart, 'activate_Beagle_plugin'));
100
101 // deactivation hook
102 register_deactivation_hook(__FILE__, array($beagleWPscanStart, 'deactivate_Beagle_plugin'));
103 }
104
105 add_action('admin_menu', 'Beagle_Menu_Page');
106
107 /*Adding submenu page of plugin to the main menu*/
108 function Beagle_Menu_Page()
109 {
110 add_menu_page('Beagle Plugin', 'Beagle Security', 'manage_options', 'Beagle_Plugin', 'Beagle_WP_Page_Content', 'data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE4IiB2aWV3Qm94PSIwIDAgMTYgMTgiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE2IDE4IiB4bWw6c3BhY2U9InByZXNlcnZlIj4gIDxpbWFnZSBpZD0iaW1hZ2UwIiB3aWR0aD0iMTYiIGhlaWdodD0iMTgiIHg9IjAiIHk9IjAiIHhsaW5rOmhyZWY9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBU0NBUUFBQUQ0TXBiaEFBQUFCR2RCVFVFQUFMR1BDL3hoQlFBQUFDQmpTRkpOIEFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFBbUpMUjBRQS80ZVB6TDhBQUFBSmNFaFogY3dBQUxFb0FBQ3hLQVhkNmRFMEFBQUFIZEVsTlJRZmxBZ1lMTGhvdnhqT2FBQUFCWlVsRVFWUW96MlhRTVV2VkFSaEc4ZC8vZWlXaiBEREZNc1lLa1JOU2kybHFpV1FLaENPb2pKRG0xRkxRVlJOUVUxQllFUWREUUlFUXVJVVFOaWxRUWtxRmxpU0Jva2c2Smx4THYwMkoyIG83T2U4L0xDVXdSbzB1T1lSdXZLWnJ3elp3TUtSYmJwZEZpelJSL00rcWxGdDA2RkdST1dDa1VHclpqdzJacS9GTnIxNnZhaW1DeXIgOXhoMWVqUnQ2bFZmelpzMzc2akpzaldVRExxaWNUTlk5TWdUMHlwUUJxZGMwN0wxSUpyMStXNkRLS2xxYzZORy8zSlhwNm96dW15aiB5SUQ5cmlwcTdqOXBOK0syYmwwaXR6S1YvNm5rYktRakl5Vzc3VlRMRHd0b2NFNmRXY01scmI3OEU2d2J0b3J0NHBCcVNhOHBIMnVDIFpoMUdWVHkxVjUvbkplLzFHL05hZFNzNVljNjRIYTRiTjExeVI4VUZTNGEyeHE0MzVySmxiN3hGaXB6UHR5U3Y4akFMU1pKbjJaWGUgWE1xZW9BaUYwMjQ2WXRwTHJaYmQxMmFmSVl2Rm4yVWlCM012SzFuSXlSelBRUHJTRUZFelhxUSsvUm5OZzF6TWdWcjVHMzRucUZHTyBSOWpIQUFBQUpYUkZXSFJrWVhSbE9tTnlaV0YwWlFBeU1ESXhMVEF5TFRBMlZERXhPalEyT2pJMkt6QXlPakF3U2pPczNRQUFBQ1YwIFJWaDBaR0YwWlRwdGIyUnBabmtBTWpBeU1TMHdNaTB3TmxReE1UbzBOam95Tmlzd01qb3dNRHR1RkdFQUFBQUFTVVZPUks1Q1lJST0iLz4KPC9zdmc+');
111 }
112
113
114 /*to declare the apis globally*/
115 global $apiServerBaseUrl;
116 $apiServerBaseUrl = "https://api.beaglesecurity.com/v1/";
117
118
119 /*calling the option menu to enter access token and application token and to submit it*/
120 require plugin_dir_path(__FILE__) . 'Admin/optionPageContent.php';
121
122 /*hooks the post method to start the test when the user clicks 'start test' button*/
123 if (isset($_POST['startBeagleTest'])) {
124 $_POST = array();
125 add_action('admin_init', 'Beagle_WP_start_Test');
126 }
127
128 /*hooks the post method to stop the test when the user clicks 'stop test' button*/
129 if (isset($_POST['stopBeagleTest'])) {
130 add_action('admin_init', 'Beagle_WP_stop_Test');
131 }
132
133 /*hooks the post method to restart the test when the user clicks 'start test' button after pressing stop button*/
134 if (isset($_POST['restartBeagleTest'])) {
135 add_action('admin_init', 'Beagle_WP_stop_Test');
136 }
137
138 /*erases the data in database when the user wants to delete the test details*/
139
140 if (isset($_POST['delete'])) {
141 add_action('admin_init', 'Beagle_WP_delete_Test');
142 }
143
144 /*hooks the post method to verify the domain*/
145 if (isset($_POST['startVerify'])) {
146 add_action('admin_init', 'Beagle_WP_addDataTo_DB');
147 }
148
149 if (isset($_POST['verify'])) {
150 add_action('admin_init', 'Beagle_WP_verify_Token');
151 }
152
153 /*calling startTest.php file to begin test*/
154 require plugin_dir_path(__FILE__) . 'Admin/startTest.php';
155
156 /*calling stopTest.php file to stop test*/
157 require plugin_dir_path(__FILE__) . 'Admin/stopTest.php';
158
159 /*calling deleteTest.php file to delete the data of test*/
160 require plugin_dir_path(__FILE__) . 'Admin/deleteTest.php';
161
162 /*calling insertInToTable.php file to add data to db*/
163 require plugin_dir_path(__FILE__) . 'Admin/insertInToTable.php';
164
165 /*calling getStatus.php file to get status of test*/
166 require plugin_dir_path(__FILE__) . 'Admin/getStatus.php';
167
168 /*calling getResultData.php file to get result of test*/
169 require plugin_dir_path(__FILE__) . 'Admin/getResultData.php';
170
171 /*calling verify.php */
172 require plugin_dir_path(__FILE__) . 'Admin/verifyToken.php';
173
174 /*calling updateVerify.php */
175 require plugin_dir_path(__FILE__) . 'Admin/updateVerify.php';
176
177 /*calling updateVerifyFailed.php */
178 require plugin_dir_path(__FILE__) . 'Admin/autoVerifyFailed.php';
179
180 // for status data
181 add_action('wp_ajax_t4a_ajax_call', 'Beagle_WP_getStatusOf_CurrentTestData');
182
183 // for result data
184 add_action('wp_ajax_t4a_ajax_call_result', 'Beagle_WP_getResultOf_CurrentTestData');
185
186 // for delete application
187 add_action('wp_ajax_t4a_ajax_call_delete', 'Beagle_WP_delete_Test');
188
189 // for verify application
190 add_action('wp_ajax_t4a_ajax_call_verify', 'Beagle_WP_verify_Token');
191
192 // for update verify application
193 add_action('wp_ajax_t4a_ajax_call_verify_update', 'Beagle_WP_verify_Token_Update');
194
195 // for update verify failed condition
196 add_action('wp_ajax_t4a_ajax_call_verify_update_failed', 'Beagle_WP_auto_Verify');