Version Description
Download this release
Release Info
Developer | paultgoodchild |
Plugin | Shield Security for WordPress |
Version | 11.4.3 |
Comparing to | |
See all releases |
Code changes from version 11.4.2 to 11.4.3
- cl.json +12 -0
- icwp-wpsf.php +1 -1
- plugin-spec.php +2 -2
- readme.txt +1 -1
- resources/css/plugin.css +4 -3
- resources/js/plugin.js +0 -24
- resources/js/shield/navigation.js +18 -1
- src/lib/src/Crons/PluginCronsConsumer.php +6 -2
- src/lib/src/Modules/HackGuard/Lib/Snapshots/CrowdSourced/SubmitHashes.php +3 -2
- src/lib/src/Modules/HackGuard/UI.php +7 -7
- src/lib/src/Modules/IPs/Lib/BlacklistHandler.php +1 -1
- src/lib/src/Modules/IPs/Lib/Bots/NotBot/InsertNotBotJs.php +3 -1
- src/lib/src/Modules/IPs/Lib/Bots/NotBot/TestNotBotLoading.php +15 -3
- src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php +0 -3
- src/lib/src/Modules/Plugin/Components/PluginBadge.php +2 -4
- src/lib/src/Modules/Plugin/Processor.php +2 -1
- src/lib/src/ShieldNetApi/ShieldNetApiController.php +7 -1
- src/lib/src/ShieldNetApi/Tools/DetectNotBot.php +19 -0
- src/lib/vendor/composer/autoload_classmap.php +2 -0
- src/lib/vendor/composer/autoload_static.php +2 -0
- src/lib/vendor/fernleafsystems/wordpress-services/src/Utilities/Constants/Regex.php +11 -0
- src/lib/vendor/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/CrowdSourcedHashes/Base.php +1 -0
- templates/twig/wpadmin_pages/components/page/nav_sidebar.twig +1 -1
cl.json
CHANGED
@@ -47,6 +47,12 @@
|
|
47 |
"title": "Capturing and managing user 2-Factor Authentication is improved.",
|
48 |
"description": []
|
49 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
{
|
51 |
"type": "improved",
|
52 |
"title": "Tweaks and adjustments to crowd-sourced hashing.",
|
@@ -64,6 +70,12 @@
|
|
64 |
"title": "HTML formatting issue with the 2FA Login Page.",
|
65 |
"description": [],
|
66 |
"patch": "11.4.2"
|
|
|
|
|
|
|
|
|
|
|
|
|
67 |
}
|
68 |
]
|
69 |
},
|
47 |
"title": "Capturing and managing user 2-Factor Authentication is improved.",
|
48 |
"description": []
|
49 |
},
|
50 |
+
{
|
51 |
+
"type": "improved",
|
52 |
+
"pro_only": false,
|
53 |
+
"title": "Added enhancement for when local tests for NotBot JS loading fails, use ShieldNET to test.",
|
54 |
+
"description": []
|
55 |
+
},
|
56 |
{
|
57 |
"type": "improved",
|
58 |
"title": "Tweaks and adjustments to crowd-sourced hashing.",
|
70 |
"title": "HTML formatting issue with the 2FA Login Page.",
|
71 |
"description": [],
|
72 |
"patch": "11.4.2"
|
73 |
+
},
|
74 |
+
{
|
75 |
+
"type": "improved",
|
76 |
+
"title": "Refinements to the ShieldNET cron processing.",
|
77 |
+
"description": [],
|
78 |
+
"patch": "11.4.3"
|
79 |
}
|
80 |
]
|
81 |
},
|
icwp-wpsf.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: Shield Security
|
4 |
* Plugin URI: https://shsec.io/2f
|
5 |
* Description: Powerful, Easy-To-Use #1 Rated WordPress Security System
|
6 |
-
* Version: 11.4.
|
7 |
* Text Domain: wp-simple-firewall
|
8 |
* Domain Path: /languages
|
9 |
* Author: Shield Security
|
3 |
* Plugin Name: Shield Security
|
4 |
* Plugin URI: https://shsec.io/2f
|
5 |
* Description: Powerful, Easy-To-Use #1 Rated WordPress Security System
|
6 |
+
* Version: 11.4.3
|
7 |
* Text Domain: wp-simple-firewall
|
8 |
* Domain Path: /languages
|
9 |
* Author: Shield Security
|
plugin-spec.php
CHANGED
@@ -1,8 +1,8 @@
|
|
1 |
{
|
2 |
"properties": {
|
3 |
-
"version": "11.4.
|
4 |
"release_timestamp": 1625589161,
|
5 |
-
"build": "202107.
|
6 |
"slug_parent": "icwp",
|
7 |
"slug_plugin": "wpsf",
|
8 |
"human_name": "Shield Security",
|
1 |
{
|
2 |
"properties": {
|
3 |
+
"version": "11.4.3",
|
4 |
"release_timestamp": 1625589161,
|
5 |
+
"build": "202107.0801",
|
6 |
"slug_parent": "icwp",
|
7 |
"slug_plugin": "wpsf",
|
8 |
"human_name": "Shield Security",
|
readme.txt
CHANGED
@@ -8,7 +8,7 @@ Requires at least: 3.7
|
|
8 |
Requires PHP: 7.0
|
9 |
Recommended PHP: 7.4
|
10 |
Tested up to: 5.8
|
11 |
-
Stable tag: 11.4.
|
12 |
|
13 |
No-Nonsense Security Hardening that protects WordPress against hackers, malicious bots, and spammers (no captchas!). Now with exclusive ShieldNET Technology.
|
14 |
|
8 |
Requires PHP: 7.0
|
9 |
Recommended PHP: 7.4
|
10 |
Tested up to: 5.8
|
11 |
+
Stable tag: 11.4.3
|
12 |
|
13 |
No-Nonsense Security Hardening that protects WordPress against hackers, malicious bots, and spammers (no captchas!). Now with exclusive ShieldNET Technology.
|
14 |
|
resources/css/plugin.css
CHANGED
@@ -1617,14 +1617,15 @@ body.folded #FooterBannerGoPro {
|
|
1617 |
width: 100%;
|
1618 |
z-index: 1000;
|
1619 |
height: auto;
|
1620 |
-
transition: visibility 0s;
|
1621 |
box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.4);
|
1622 |
-
margin-top: -
|
|
|
|
|
1623 |
}
|
1624 |
.with-submenu.activesub .subnav-menu {
|
1625 |
visibility: visible;
|
1626 |
opacity: 1;
|
1627 |
-
transition: visibility 0s;
|
1628 |
z-index: 1001;
|
1629 |
}
|
1630 |
.primary_side_sub_menu {
|
1617 |
width: 100%;
|
1618 |
z-index: 1000;
|
1619 |
height: auto;
|
|
|
1620 |
box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.4);
|
1621 |
+
margin-top: -60px;
|
1622 |
+
opacity: 0;
|
1623 |
+
transition: visibility 0.15s 0s, opacity 0.15s ease-in;
|
1624 |
}
|
1625 |
.with-submenu.activesub .subnav-menu {
|
1626 |
visibility: visible;
|
1627 |
opacity: 1;
|
1628 |
+
transition: visibility 0s, opacity 0.15s ease-in;
|
1629 |
z-index: 1001;
|
1630 |
}
|
1631 |
.primary_side_sub_menu {
|
resources/js/plugin.js
CHANGED
@@ -99,30 +99,6 @@ var iCWP_WPSF_Toaster = new function () {
|
|
99 |
}();
|
100 |
iCWP_WPSF_Toaster.initialise();
|
101 |
|
102 |
-
var iCWP_WPSF_SubMenu = new function () {
|
103 |
-
this.initialise = function () {
|
104 |
-
jQuery( document ).ready( function () {
|
105 |
-
let navBar = jQuery( '#NavSideBar' );
|
106 |
-
navBar.on( 'click', 'li.nav-item.with-submenu', function ( evt ) {
|
107 |
-
let $theLink = jQuery( evt.currentTarget );
|
108 |
-
if ( $theLink.hasClass( 'activesub' ) ) {
|
109 |
-
$theLink.removeClass( 'activesub' )
|
110 |
-
}
|
111 |
-
else {
|
112 |
-
jQuery( 'li.nav-item.with-submenu.activesub', navBar ).removeClass( 'activesub' );
|
113 |
-
$theLink.addClass( 'activesub' )
|
114 |
-
}
|
115 |
-
} );
|
116 |
-
jQuery( document ).on( 'click', function ( evt ) {
|
117 |
-
if ( !jQuery( evt.target ).closest( navBar ).length && jQuery( navBar ).is( ":visible" ) ) {
|
118 |
-
jQuery( 'li.nav-item.with-submenu.activesub', navBar ).removeClass( 'activesub' );
|
119 |
-
}
|
120 |
-
} );
|
121 |
-
} );
|
122 |
-
};
|
123 |
-
}();
|
124 |
-
iCWP_WPSF_SubMenu.initialise();
|
125 |
-
|
126 |
var iCWP_WPSF_OptionsFormSubmit = new function () {
|
127 |
|
128 |
let bRequestCurrentlyRunning = false;
|
99 |
}();
|
100 |
iCWP_WPSF_Toaster.initialise();
|
101 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
102 |
var iCWP_WPSF_OptionsFormSubmit = new function () {
|
103 |
|
104 |
let bRequestCurrentlyRunning = false;
|
resources/js/shield/navigation.js
CHANGED
@@ -21,7 +21,7 @@ jQuery.fn.icwpWpsfPluginNavigation = function ( options ) {
|
|
21 |
|
22 |
let parentNav = currentMenuClickTarget.closest( 'ul' ).closest( 'li.nav-item' );
|
23 |
if ( parentNav !== null ) {
|
24 |
-
parentNav.querySelector( 'a.nav-link' ).classList.add( 'active' );
|
25 |
}
|
26 |
|
27 |
iCWP_WPSF_BodyOverlay.hide();
|
@@ -51,6 +51,23 @@ jQuery.fn.icwpWpsfPluginNavigation = function ( options ) {
|
|
51 |
} );
|
52 |
|
53 |
jQuery( document ).on( 'shield-dynamic_load', handleDynamicLoad );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
54 |
} );
|
55 |
};
|
56 |
|
21 |
|
22 |
let parentNav = currentMenuClickTarget.closest( 'ul' ).closest( 'li.nav-item' );
|
23 |
if ( parentNav !== null ) {
|
24 |
+
parentNav.querySelector( 'li.nav-item > a.nav-link' ).classList.add( 'active' );
|
25 |
}
|
26 |
|
27 |
iCWP_WPSF_BodyOverlay.hide();
|
51 |
} );
|
52 |
|
53 |
jQuery( document ).on( 'shield-dynamic_load', handleDynamicLoad );
|
54 |
+
|
55 |
+
let navBar = jQuery( '#NavSideBar' );
|
56 |
+
navBar.on( 'click', 'li.nav-item.with-submenu', function ( evt ) {
|
57 |
+
let $theLink = jQuery( evt.currentTarget );
|
58 |
+
if ( $theLink.hasClass( 'activesub' ) ) {
|
59 |
+
$theLink.removeClass( 'activesub' )
|
60 |
+
}
|
61 |
+
else {
|
62 |
+
jQuery( 'li.nav-item.with-submenu.activesub', navBar ).removeClass( 'activesub' );
|
63 |
+
$theLink.addClass( 'activesub' )
|
64 |
+
}
|
65 |
+
} );
|
66 |
+
jQuery( document ).on( 'click', function ( evt ) {
|
67 |
+
if ( !jQuery( evt.target ).closest( navBar ).length && jQuery( navBar ).is( ":visible" ) ) {
|
68 |
+
jQuery( 'li.nav-item.with-submenu.activesub', navBar ).removeClass( 'activesub' );
|
69 |
+
}
|
70 |
+
} );
|
71 |
} );
|
72 |
};
|
73 |
|
src/lib/src/Crons/PluginCronsConsumer.php
CHANGED
@@ -2,6 +2,8 @@
|
|
2 |
|
3 |
namespace FernleafSystems\Wordpress\Plugin\Shield\Crons;
|
4 |
|
|
|
|
|
5 |
trait PluginCronsConsumer {
|
6 |
|
7 |
public function runDailyCron() {
|
@@ -11,7 +13,9 @@ trait PluginCronsConsumer {
|
|
11 |
}
|
12 |
|
13 |
protected function setupCronHooks() {
|
14 |
-
|
15 |
-
|
|
|
|
|
16 |
}
|
17 |
}
|
2 |
|
3 |
namespace FernleafSystems\Wordpress\Plugin\Shield\Crons;
|
4 |
|
5 |
+
use FernleafSystems\Wordpress\Services\Services;
|
6 |
+
|
7 |
trait PluginCronsConsumer {
|
8 |
|
9 |
public function runDailyCron() {
|
13 |
}
|
14 |
|
15 |
protected function setupCronHooks() {
|
16 |
+
if ( Services::WpGeneral()->isCron() ) {
|
17 |
+
add_action( $this->getCon()->prefix( 'daily_cron' ), [ $this, 'runDailyCron' ] );
|
18 |
+
add_action( $this->getCon()->prefix( 'hourly_cron' ), [ $this, 'runHourlyCron' ] );
|
19 |
+
}
|
20 |
}
|
21 |
}
|
src/lib/src/Modules/HackGuard/Lib/Snapshots/CrowdSourced/SubmitHashes.php
CHANGED
@@ -8,6 +8,7 @@ use FernleafSystems\Wordpress\Services\Core\VOs\Assets\{
|
|
8 |
WpPluginVo,
|
9 |
WpThemeVo
|
10 |
};
|
|
|
11 |
use FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes\CrowdSourcedHashes\Submit\{
|
12 |
PreSubmit,
|
13 |
Submit
|
@@ -44,8 +45,8 @@ class SubmitHashes {
|
|
44 |
}
|
45 |
|
46 |
private function canSubmitAsset() :bool {
|
47 |
-
return preg_match( '
|
48 |
-
&& preg_match( '
|
49 |
}
|
50 |
|
51 |
private function isSubmitRequired() :bool {
|
8 |
WpPluginVo,
|
9 |
WpThemeVo
|
10 |
};
|
11 |
+
use FernleafSystems\Wordpress\Services\Utilities\Constants\Regex;
|
12 |
use FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes\CrowdSourcedHashes\Submit\{
|
13 |
PreSubmit,
|
14 |
Submit
|
45 |
}
|
46 |
|
47 |
private function canSubmitAsset() :bool {
|
48 |
+
return preg_match( sprintf( '#^%s$#', Regex::ASSET_VERSION ), $this->asset->Version )
|
49 |
+
&& preg_match( sprintf( '#^%s$#', Regex::ASSET_SLUG ), $this->asset->slug );
|
50 |
}
|
51 |
|
52 |
private function isSubmitRequired() :bool {
|
src/lib/src/Modules/HackGuard/UI.php
CHANGED
@@ -288,27 +288,27 @@ class UI extends BaseShield\UI {
|
|
288 |
}
|
289 |
|
290 |
protected function getSectionWarnings( string $section ) :array {
|
291 |
-
$
|
292 |
|
293 |
switch ( $section ) {
|
294 |
|
295 |
case 'section_realtime':
|
296 |
-
$
|
297 |
->getModule_Plugin()
|
298 |
->getShieldNetApiController()
|
299 |
->canHandshake();
|
300 |
-
if ( !$
|
301 |
-
$
|
302 |
}
|
303 |
// if ( !Services::Encrypt()->isSupportedOpenSslDataEncryption() ) {
|
304 |
-
// $
|
305 |
// }
|
306 |
// if ( !Services::WpFs()->isFilesystemAccessDirect() ) {
|
307 |
-
// $
|
308 |
// }
|
309 |
break;
|
310 |
}
|
311 |
|
312 |
-
return $
|
313 |
}
|
314 |
}
|
288 |
}
|
289 |
|
290 |
protected function getSectionWarnings( string $section ) :array {
|
291 |
+
$warnings = [];
|
292 |
|
293 |
switch ( $section ) {
|
294 |
|
295 |
case 'section_realtime':
|
296 |
+
$canHandshake = $this->getCon()
|
297 |
->getModule_Plugin()
|
298 |
->getShieldNetApiController()
|
299 |
->canHandshake();
|
300 |
+
if ( !$canHandshake ) {
|
301 |
+
$warnings[] = sprintf( __( 'Not available as your site cannot handshake with ShieldNET API.', 'wp-simple-firewall' ), 'OpenSSL' );
|
302 |
}
|
303 |
// if ( !Services::Encrypt()->isSupportedOpenSslDataEncryption() ) {
|
304 |
+
// $warnings[] = sprintf( __( 'Not available because the %s extension is not available.', 'wp-simple-firewall' ), 'OpenSSL' );
|
305 |
// }
|
306 |
// if ( !Services::WpFs()->isFilesystemAccessDirect() ) {
|
307 |
+
// $warnings[] = sprintf( __( "Not available because PHP/WordPress doesn't have direct filesystem access.", 'wp-simple-firewall' ), 'OpenSSL' );
|
308 |
// }
|
309 |
break;
|
310 |
}
|
311 |
|
312 |
+
return $warnings;
|
313 |
}
|
314 |
}
|
src/lib/src/Modules/IPs/Lib/BlacklistHandler.php
CHANGED
@@ -21,7 +21,7 @@ class BlacklistHandler extends Modules\Base\Common\ExecOnceModConsumer {
|
|
21 |
/** @var IPs\ModCon $mod */
|
22 |
$mod = $this->getMod();
|
23 |
|
24 |
-
if (
|
25 |
$this->setupCronHooks();
|
26 |
}
|
27 |
|
21 |
/** @var IPs\ModCon $mod */
|
22 |
$mod = $this->getMod();
|
23 |
|
24 |
+
if ( $this->getCon()->isPremiumActive() ) {
|
25 |
$this->setupCronHooks();
|
26 |
}
|
27 |
|
src/lib/src/Modules/IPs/Lib/Bots/NotBot/InsertNotBotJs.php
CHANGED
@@ -10,7 +10,9 @@ use FernleafSystems\Wordpress\Services\Services;
|
|
10 |
class InsertNotBotJs extends ExecOnceModConsumer {
|
11 |
|
12 |
protected function canRun() :bool {
|
13 |
-
|
|
|
|
|
14 |
->setMod( $this->getMod() )
|
15 |
->setIP( Services::IP()->getRequestIp() )
|
16 |
->retrieve()->notbot_at ) > MINUTE_IN_SECONDS*45;
|
10 |
class InsertNotBotJs extends ExecOnceModConsumer {
|
11 |
|
12 |
protected function canRun() :bool {
|
13 |
+
$req = Services::Request();
|
14 |
+
return $req->query( 'force_notbot' ) == 1
|
15 |
+
|| ( $req->ts() - ( new BotSignalsRecord() )
|
16 |
->setMod( $this->getMod() )
|
17 |
->setIP( Services::IP()->getRequestIp() )
|
18 |
->retrieve()->notbot_at ) > MINUTE_IN_SECONDS*45;
|
src/lib/src/Modules/IPs/Lib/Bots/NotBot/TestNotBotLoading.php
CHANGED
@@ -3,6 +3,7 @@
|
|
3 |
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs\Lib\Bots\NotBot;
|
4 |
|
5 |
use FernleafSystems\Wordpress\Plugin\Shield\Modules\ModConsumer;
|
|
|
6 |
use FernleafSystems\Wordpress\Services\Services;
|
7 |
|
8 |
class TestNotBotLoading {
|
@@ -10,12 +11,23 @@ class TestNotBotLoading {
|
|
10 |
use ModConsumer;
|
11 |
|
12 |
public function test() :bool {
|
|
|
|
|
|
|
|
|
13 |
$urlToFind = explode( '?', $this->getCon()->urls->forJs( 'shield/notbot' ) )[ 0 ];
|
14 |
return preg_match(
|
15 |
sprintf( '#%s#i', preg_quote( $urlToFind, '#' ) ),
|
16 |
-
Services::HttpRequest()->getContent(
|
17 |
-
'
|
18 |
-
|
|
|
19 |
) === 1;
|
20 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
}
|
3 |
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs\Lib\Bots\NotBot;
|
4 |
|
5 |
use FernleafSystems\Wordpress\Plugin\Shield\Modules\ModConsumer;
|
6 |
+
use FernleafSystems\Wordpress\Plugin\Shield\ShieldNetApi\Tools\DetectNotBot;
|
7 |
use FernleafSystems\Wordpress\Services\Services;
|
8 |
|
9 |
class TestNotBotLoading {
|
11 |
use ModConsumer;
|
12 |
|
13 |
public function test() :bool {
|
14 |
+
return $this->testInternally() || $this->testViaShieldNet();
|
15 |
+
}
|
16 |
+
|
17 |
+
public function testInternally() :bool {
|
18 |
$urlToFind = explode( '?', $this->getCon()->urls->forJs( 'shield/notbot' ) )[ 0 ];
|
19 |
return preg_match(
|
20 |
sprintf( '#%s#i', preg_quote( $urlToFind, '#' ) ),
|
21 |
+
Services::HttpRequest()->getContent(
|
22 |
+
add_query_arg( [ 'force_notbot' => '1' ], network_home_url( '/' ) ),
|
23 |
+
[ 'timeout' => 5 ]
|
24 |
+
)
|
25 |
) === 1;
|
26 |
}
|
27 |
+
|
28 |
+
public function testViaShieldNet() :bool {
|
29 |
+
return ( new DetectNotBot() )
|
30 |
+
->setMod( $this->getCon()->getModule_Plugin() )
|
31 |
+
->run( explode( '?', $this->getCon()->urls->forJs( 'shield/notbot' ) )[ 0 ] );
|
32 |
+
}
|
33 |
}
|
src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php
CHANGED
@@ -50,9 +50,6 @@ class SideMenuBuilder {
|
|
50 |
}
|
51 |
|
52 |
if ( !empty( $item[ 'sub_items' ] ) ) {
|
53 |
-
$item[ 'data' ][ 'toggle' ] = 'collapse';
|
54 |
-
$item[ 'href' ] = '#collapse-'.$item[ 'slug' ];
|
55 |
-
|
56 |
$item[ 'sub_items' ] = array_map( function ( $sub ) {
|
57 |
if ( empty( $sub[ 'classes' ] ) ) {
|
58 |
$sub[ 'classes' ] = [];
|
50 |
}
|
51 |
|
52 |
if ( !empty( $item[ 'sub_items' ] ) ) {
|
|
|
|
|
|
|
53 |
$item[ 'sub_items' ] = array_map( function ( $sub ) {
|
54 |
if ( empty( $sub[ 'classes' ] ) ) {
|
55 |
$sub[ 'classes' ] = [];
|
src/lib/src/Modules/Plugin/Components/PluginBadge.php
CHANGED
@@ -10,11 +10,9 @@ use FernleafSystems\Wordpress\Services\Services;
|
|
10 |
* Class PluginBadge
|
11 |
* @package FernleafSystems\Wordpress\Plugin\Shield\Modules\Plugin\Components
|
12 |
*/
|
13 |
-
class PluginBadge {
|
14 |
|
15 |
-
|
16 |
-
|
17 |
-
public function run() {
|
18 |
/** @var Plugin\Options $opts */
|
19 |
$opts = $this->getOptions();
|
20 |
$req = Services::Request();
|
10 |
* Class PluginBadge
|
11 |
* @package FernleafSystems\Wordpress\Plugin\Shield\Modules\Plugin\Components
|
12 |
*/
|
13 |
+
class PluginBadge extends Modules\Base\Common\ExecOnceModConsumer {
|
14 |
|
15 |
+
protected function run() {
|
|
|
|
|
16 |
/** @var Plugin\Options $opts */
|
17 |
$opts = $this->getOptions();
|
18 |
$req = Services::Request();
|
src/lib/src/Modules/Plugin/Processor.php
CHANGED
@@ -21,7 +21,8 @@ class Processor extends BaseShield\Processor {
|
|
21 |
->setMod( $this->getMod() )
|
22 |
->run();
|
23 |
|
24 |
-
$mod->
|
|
|
25 |
|
26 |
( new PluginTelemetry() )
|
27 |
->setMod( $this->getMod() )
|
21 |
->setMod( $this->getMod() )
|
22 |
->run();
|
23 |
|
24 |
+
$mod->getShieldNetApiController()->execute();
|
25 |
+
$mod->getPluginBadgeCon()->execute();
|
26 |
|
27 |
( new PluginTelemetry() )
|
28 |
->setMod( $this->getMod() )
|
src/lib/src/ShieldNetApi/ShieldNetApiController.php
CHANGED
@@ -3,6 +3,7 @@
|
|
3 |
namespace FernleafSystems\Wordpress\Plugin\Shield\ShieldNetApi;
|
4 |
|
5 |
use FernleafSystems\Utilities\Data\Adapter\DynPropertiesClass;
|
|
|
6 |
use FernleafSystems\Wordpress\Plugin\Shield\Crons\PluginCronsConsumer;
|
7 |
use FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs\Lib\Bots\ShieldNET\BuildData;
|
8 |
use FernleafSystems\Wordpress\Plugin\Shield\Modules\ModConsumer;
|
@@ -18,9 +19,14 @@ use FernleafSystems\Wordpress\Services\Services;
|
|
18 |
*/
|
19 |
class ShieldNetApiController extends DynPropertiesClass {
|
20 |
|
|
|
21 |
use ModConsumer;
|
22 |
use PluginCronsConsumer;
|
23 |
|
|
|
|
|
|
|
|
|
24 |
/**
|
25 |
* Automatically throttles request because otherwise PRO-nulled versions of Shield will cause
|
26 |
* overload on our API.
|
@@ -128,7 +134,7 @@ class ShieldNetApiController extends DynPropertiesClass {
|
|
128 |
* So if the timestamp for the last store is too far in the past, we believe we can't reliably
|
129 |
* store data.
|
130 |
*/
|
131 |
-
|
132 |
if ( Services::Request()->carbon()->subHours( 2 )->timestamp > $this->vo->data_last_saved_at ) {
|
133 |
$can = false;
|
134 |
$this->storeVoData();
|
3 |
namespace FernleafSystems\Wordpress\Plugin\Shield\ShieldNetApi;
|
4 |
|
5 |
use FernleafSystems\Utilities\Data\Adapter\DynPropertiesClass;
|
6 |
+
use FernleafSystems\Utilities\Logic\ExecOnce;
|
7 |
use FernleafSystems\Wordpress\Plugin\Shield\Crons\PluginCronsConsumer;
|
8 |
use FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs\Lib\Bots\ShieldNET\BuildData;
|
9 |
use FernleafSystems\Wordpress\Plugin\Shield\Modules\ModConsumer;
|
19 |
*/
|
20 |
class ShieldNetApiController extends DynPropertiesClass {
|
21 |
|
22 |
+
use ExecOnce;
|
23 |
use ModConsumer;
|
24 |
use PluginCronsConsumer;
|
25 |
|
26 |
+
protected function run() {
|
27 |
+
$this->setupCronHooks();
|
28 |
+
}
|
29 |
+
|
30 |
/**
|
31 |
* Automatically throttles request because otherwise PRO-nulled versions of Shield will cause
|
32 |
* overload on our API.
|
134 |
* So if the timestamp for the last store is too far in the past, we believe we can't reliably
|
135 |
* store data.
|
136 |
*/
|
137 |
+
public function canStoreDataReliably() :bool {
|
138 |
if ( Services::Request()->carbon()->subHours( 2 )->timestamp > $this->vo->data_last_saved_at ) {
|
139 |
$can = false;
|
140 |
$this->storeVoData();
|
src/lib/src/ShieldNetApi/Tools/DetectNotBot.php
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php declare( strict_types=1 );
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Plugin\Shield\ShieldNetApi\Tools;
|
4 |
+
|
5 |
+
use FernleafSystems\Wordpress\Plugin\Shield\ShieldNetApi\Common;
|
6 |
+
|
7 |
+
class DetectNotBot extends Common\BaseShieldNetApi {
|
8 |
+
|
9 |
+
const API_ACTION = 'tools/detect/notbot';
|
10 |
+
|
11 |
+
public function run( string $urlToFind ) :bool {
|
12 |
+
$this->shield_net_params_required = true;
|
13 |
+
$this->params_query = [
|
14 |
+
'to_find' => $urlToFind,
|
15 |
+
];
|
16 |
+
$raw = $this->sendReq();
|
17 |
+
return is_array( $raw ) && empty( $raw[ 'error' ] ) && $raw[ 'data' ][ 'success' ];
|
18 |
+
}
|
19 |
+
}
|
src/lib/vendor/composer/autoload_classmap.php
CHANGED
@@ -837,6 +837,7 @@ return array(
|
|
837 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\ShieldNetApi\\ShieldNetApiDataVO' => $baseDir . '/src/ShieldNetApi/ShieldNetApiDataVO.php',
|
838 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\ShieldNetApi\\SureSend\\SendEmail' => $baseDir . '/src/ShieldNetApi/SureSend/SendEmail.php',
|
839 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\ShieldNetApi\\Telemetry\\SendTelemetry' => $baseDir . '/src/ShieldNetApi/Telemetry/SendTelemetry.php',
|
|
|
840 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\ShieldNetApi\\Tools\\GenerateGoogleAuthQrCode' => $baseDir . '/src/ShieldNetApi/Tools/GenerateGoogleAuthQrCode.php',
|
841 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\ShieldNetApi\\WPHashes\\SolicitToken' => $baseDir . '/src/ShieldNetApi/WPHashes/SolicitToken.php',
|
842 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Build\\AdminNotes' => $baseDir . '/src/Tables/Build/AdminNotes.php',
|
@@ -935,6 +936,7 @@ return array(
|
|
935 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Autoloading\\FindClassFromNamespaceRoots' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Autoloading/FindClassFromNamespaceRoots.php',
|
936 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\BackgroundProcessing\\BackgroundProcess' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/BackgroundProcessing/BackgroundProcess.php',
|
937 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\ClassicPress\\Checksums' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/ClassicPress/Checksums.php',
|
|
|
938 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Consumers\\PluginConsumer' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Consumers/PluginConsumer.php',
|
939 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Data' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Data.php',
|
940 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\DataManipulation' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/DataManipulation.php',
|
837 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\ShieldNetApi\\ShieldNetApiDataVO' => $baseDir . '/src/ShieldNetApi/ShieldNetApiDataVO.php',
|
838 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\ShieldNetApi\\SureSend\\SendEmail' => $baseDir . '/src/ShieldNetApi/SureSend/SendEmail.php',
|
839 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\ShieldNetApi\\Telemetry\\SendTelemetry' => $baseDir . '/src/ShieldNetApi/Telemetry/SendTelemetry.php',
|
840 |
+
'FernleafSystems\\Wordpress\\Plugin\\Shield\\ShieldNetApi\\Tools\\DetectNotBot' => $baseDir . '/src/ShieldNetApi/Tools/DetectNotBot.php',
|
841 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\ShieldNetApi\\Tools\\GenerateGoogleAuthQrCode' => $baseDir . '/src/ShieldNetApi/Tools/GenerateGoogleAuthQrCode.php',
|
842 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\ShieldNetApi\\WPHashes\\SolicitToken' => $baseDir . '/src/ShieldNetApi/WPHashes/SolicitToken.php',
|
843 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Build\\AdminNotes' => $baseDir . '/src/Tables/Build/AdminNotes.php',
|
936 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Autoloading\\FindClassFromNamespaceRoots' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Autoloading/FindClassFromNamespaceRoots.php',
|
937 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\BackgroundProcessing\\BackgroundProcess' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/BackgroundProcessing/BackgroundProcess.php',
|
938 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\ClassicPress\\Checksums' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/ClassicPress/Checksums.php',
|
939 |
+
'FernleafSystems\\Wordpress\\Services\\Utilities\\Constants\\Regex' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Constants/Regex.php',
|
940 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Consumers\\PluginConsumer' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Consumers/PluginConsumer.php',
|
941 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Data' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Data.php',
|
942 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\DataManipulation' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/DataManipulation.php',
|
src/lib/vendor/composer/autoload_static.php
CHANGED
@@ -1010,6 +1010,7 @@ class ComposerStaticInit4fc2c6daaffaf40b64b79b6d26830171
|
|
1010 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\ShieldNetApi\\ShieldNetApiDataVO' => __DIR__ . '/../..' . '/src/ShieldNetApi/ShieldNetApiDataVO.php',
|
1011 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\ShieldNetApi\\SureSend\\SendEmail' => __DIR__ . '/../..' . '/src/ShieldNetApi/SureSend/SendEmail.php',
|
1012 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\ShieldNetApi\\Telemetry\\SendTelemetry' => __DIR__ . '/../..' . '/src/ShieldNetApi/Telemetry/SendTelemetry.php',
|
|
|
1013 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\ShieldNetApi\\Tools\\GenerateGoogleAuthQrCode' => __DIR__ . '/../..' . '/src/ShieldNetApi/Tools/GenerateGoogleAuthQrCode.php',
|
1014 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\ShieldNetApi\\WPHashes\\SolicitToken' => __DIR__ . '/../..' . '/src/ShieldNetApi/WPHashes/SolicitToken.php',
|
1015 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Build\\AdminNotes' => __DIR__ . '/../..' . '/src/Tables/Build/AdminNotes.php',
|
@@ -1108,6 +1109,7 @@ class ComposerStaticInit4fc2c6daaffaf40b64b79b6d26830171
|
|
1108 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Autoloading\\FindClassFromNamespaceRoots' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Autoloading/FindClassFromNamespaceRoots.php',
|
1109 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\BackgroundProcessing\\BackgroundProcess' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/BackgroundProcessing/BackgroundProcess.php',
|
1110 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\ClassicPress\\Checksums' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/ClassicPress/Checksums.php',
|
|
|
1111 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Consumers\\PluginConsumer' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Consumers/PluginConsumer.php',
|
1112 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Data' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Data.php',
|
1113 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\DataManipulation' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/DataManipulation.php',
|
1010 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\ShieldNetApi\\ShieldNetApiDataVO' => __DIR__ . '/../..' . '/src/ShieldNetApi/ShieldNetApiDataVO.php',
|
1011 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\ShieldNetApi\\SureSend\\SendEmail' => __DIR__ . '/../..' . '/src/ShieldNetApi/SureSend/SendEmail.php',
|
1012 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\ShieldNetApi\\Telemetry\\SendTelemetry' => __DIR__ . '/../..' . '/src/ShieldNetApi/Telemetry/SendTelemetry.php',
|
1013 |
+
'FernleafSystems\\Wordpress\\Plugin\\Shield\\ShieldNetApi\\Tools\\DetectNotBot' => __DIR__ . '/../..' . '/src/ShieldNetApi/Tools/DetectNotBot.php',
|
1014 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\ShieldNetApi\\Tools\\GenerateGoogleAuthQrCode' => __DIR__ . '/../..' . '/src/ShieldNetApi/Tools/GenerateGoogleAuthQrCode.php',
|
1015 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\ShieldNetApi\\WPHashes\\SolicitToken' => __DIR__ . '/../..' . '/src/ShieldNetApi/WPHashes/SolicitToken.php',
|
1016 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Tables\\Build\\AdminNotes' => __DIR__ . '/../..' . '/src/Tables/Build/AdminNotes.php',
|
1109 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Autoloading\\FindClassFromNamespaceRoots' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Autoloading/FindClassFromNamespaceRoots.php',
|
1110 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\BackgroundProcessing\\BackgroundProcess' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/BackgroundProcessing/BackgroundProcess.php',
|
1111 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\ClassicPress\\Checksums' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/ClassicPress/Checksums.php',
|
1112 |
+
'FernleafSystems\\Wordpress\\Services\\Utilities\\Constants\\Regex' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Constants/Regex.php',
|
1113 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Consumers\\PluginConsumer' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Consumers/PluginConsumer.php',
|
1114 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Data' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Data.php',
|
1115 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\DataManipulation' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/DataManipulation.php',
|
src/lib/vendor/fernleafsystems/wordpress-services/src/Utilities/Constants/Regex.php
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php declare( strict_types=1 );
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Services\Utilities\Constants;
|
4 |
+
|
5 |
+
class Regex {
|
6 |
+
|
7 |
+
const ASSET_SLUG = '([A-Za-z0-9]+[_\-])*[A-Za-z0-9]+';
|
8 |
+
const ASSET_VERSION = '([0-9]+\.)*[0-9]+';
|
9 |
+
const HASH_MD5 = '[A-Fa-f0-9]{32}';
|
10 |
+
const HASH_SHA1 = '[A-Fa-f0-9]{40}';
|
11 |
+
}
|
src/lib/vendor/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/CrowdSourcedHashes/Base.php
CHANGED
@@ -5,4 +5,5 @@ namespace FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes\Cro
|
|
5 |
abstract class Base extends \FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes\ApiBase {
|
6 |
|
7 |
const API_ENDPOINT = 'cshashes';
|
|
|
8 |
}
|
5 |
abstract class Base extends \FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes\ApiBase {
|
6 |
|
7 |
const API_ENDPOINT = 'cshashes';
|
8 |
+
const API_VERSION = 2;
|
9 |
}
|
templates/twig/wpadmin_pages/components/page/nav_sidebar.twig
CHANGED
@@ -14,7 +14,7 @@
|
|
14 |
<span class="text-secondary font-italic text-monospace">{{ mitem.title }}</span>
|
15 |
</li>
|
16 |
{% for sub in mitem.sub_items %}
|
17 |
-
<li class="
|
18 |
<a class="p-0 nav-link {{ sub.classes|default([])|join( ' ' ) }}"
|
19 |
href="{{ sub.href|default('#') }}"
|
20 |
{% for data_key,data_val in sub.data|default([]) %}
|
14 |
<span class="text-secondary font-italic text-monospace">{{ mitem.title }}</span>
|
15 |
</li>
|
16 |
{% for sub in mitem.sub_items %}
|
17 |
+
<li class="mb-2 pl-0 py-1">
|
18 |
<a class="p-0 nav-link {{ sub.classes|default([])|join( ' ' ) }}"
|
19 |
href="{{ sub.href|default('#') }}"
|
20 |
{% for data_key,data_val in sub.data|default([]) %}
|