PluginProbe ʕ •ᴥ•ʔ
WP STAGING – WordPress Backup, Restore, Migration & Clone / 4.9.2
WP STAGING – WordPress Backup, Restore, Migration & Clone v4.9.2
4.9.2 4.9.1 4.9.0 4.8.1 trunk 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.10.0 3.2.0 3.3.1 3.3.2 3.3.3 3.4.1 3.4.3 3.5.0 3.6.0 3.7.1 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.8.6 3.8.7 3.9.0 3.9.1 3.9.2 3.9.3 3.9.4 4.0.0 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.0 4.7.0 4.7.1 4.7.2 4.7.3 4.8.0
wp-staging / Framework / ThirdParty / Aios.php
wp-staging / Framework / ThirdParty Last commit date
Aios.php 2 years ago FreemiusScript.php 9 months ago Jetpack.php 2 years ago LiteSpeedCache.php 1 year ago MalCare.php 1 year ago NinjaForms.php 1 year ago ThirdPartyCacheHandler.php 2 years ago WordFence.php 5 months ago
Aios.php
143 lines
1 <?php
2
3 namespace WPStaging\Framework\ThirdParty;
4
5 /**
6 * Class All in One WP Security (AIOWPS)
7 *
8 * Special treatment for the wpstg must-use plugin wp-staging-optimizer plugin if AIOWPS is installed
9 * and salt prefix option is enabled. This is to prevent making wp staging unusable due to ajax error 400
10 * Github: https://github.com/wp-staging/wp-staging-pro/pull/2762/
11 *
12 * Class created with performance in mind!
13 * It ensures that db calls are only made if actually a status change of the AIOS salt option happens.
14 *
15 * This class will do:
16 *
17 * - Add AIOWPS to optimizer whitelist and keep it active during wp staging processing.
18 * - Remove AIOWPS from optimizer whitelist and disables it during wp staging processing once AIOS does not have salt prefix option enabled.
19 * - Delivers the status if salt prefix option is enabled to allow showing an admin notice to recommend disabling the salt prefix option to increase reliability of wp staging requests.
20 *
21 * @package WPStaging\Framework\ThirdParty
22 */
23 class Aios
24 {
25
26 /** The option_name that contains all AIOWPS options in the db. */
27 const AIOS_OPTIONS = 'aio_wp_security_configs';
28
29 const AIOS_SALT_OPTION = 'aiowps_enable_salt_postfix';
30
31 /** The option_name that contains all optimizer whitelisted plugins in the db. */
32 const WHITELISTED_PLUGINS_OPTION = 'wpstg_optimizer_excluded';
33
34 // Plugin slug
35 const AIOS_PLUGIN_SLUG = 'all-in-one-wp-security-and-firewall';
36
37 /** @var array */
38 private $whitelistedPlugins;
39
40 public function __construct()
41 {
42 $this->whitelistedPlugins = get_option(self::WHITELISTED_PLUGINS_OPTION, []);
43 }
44
45 /**
46 * @return bool
47 */
48 public function isSaltPostfixOptionEnabled(): bool
49 {
50 // Extra check to reduce number of db calls for performance reasons
51 if (!$this->isAiosActive()) {
52 return false;
53 }
54
55 $aiosOptions = get_option(self::AIOS_OPTIONS);
56 if (empty($aiosOptions) || empty($aiosOptions[self::AIOS_SALT_OPTION])) {
57 return false;
58 }
59
60 return $aiosOptions[self::AIOS_SALT_OPTION] === '1';
61 }
62
63 /**
64 * @return void
65 */
66 public function optimizerWhitelistUpdater()
67 {
68 $this->maybeAddAiosToWhitelist();
69 $this->maybeRemoveAiosFromWhitelist();
70 }
71
72 /**
73 * Add AIOS plugin from being excluded in optimizer plugin if AIOS salt postfix option is enabled
74 * @return void
75 */
76 private function maybeAddAiosToWhitelist()
77 {
78 if (!$this->isSaltPostfixOptionEnabled()) {
79 return;
80 }
81
82 if (in_array(self::AIOS_PLUGIN_SLUG, $this->whitelistedPlugins)) {
83 return;
84 }
85
86 $this->whitelistedPlugins[] = self::AIOS_PLUGIN_SLUG;
87
88 update_option(self::WHITELISTED_PLUGINS_OPTION, $this->whitelistedPlugins);
89 }
90
91 /**
92 * Remove AIOS plugin from being excluded in optimizer plugin if AIOS salt postfix option is disabled
93 * @return void
94 */
95 private function maybeRemoveAiosFromWhitelist()
96 {
97 if (!$this->aiosIsWhitelisted()) {
98 return;
99 }
100
101 if ($this->isSaltPostfixOptionEnabled()) {
102 return;
103 }
104
105 $key = array_search(self::AIOS_PLUGIN_SLUG, $this->whitelistedPlugins);
106 if ($key !== false) {
107 unset($this->whitelistedPlugins[$key]);
108 }
109
110 update_option(self::WHITELISTED_PLUGINS_OPTION, $this->whitelistedPlugins);
111 }
112
113 /**
114 * Used to mock up this method in unit tests. Thus, it needs to be public.
115 * @param string $class
116 * @return bool
117 */
118 public function doesClassExist(string $class): bool
119 {
120 return class_exists($class);
121 }
122
123 /**
124 * @return bool
125 */
126 protected function isAiosActive(): bool
127 {
128 return $this->doesClassExist('AIO_WP_Security');
129 }
130
131 /**
132 * @return bool
133 */
134 private function aiosIsWhitelisted(): bool
135 {
136 if (in_array(self::AIOS_PLUGIN_SLUG, $this->whitelistedPlugins)) {
137 return true;
138 }
139
140 return false;
141 }
142 }
143