PluginProbe ʕ •ᴥ•ʔ
Advanced Access Manager – Access Governance for WordPress / 5.11
Advanced Access Manager – Access Governance for WordPress v5.11
6.8.4 6.8.5 6.9.0 6.9.1 6.9.10 6.9.11 6.9.12 6.9.13 6.9.14 6.9.15 6.9.16 6.9.17 6.9.18 6.9.19 6.9.2 6.9.20 6.9.21 6.9.22 6.9.23 6.9.24 6.9.25 6.9.26 6.9.27 6.9.28 6.9.29 6.9.3 6.9.30 6.9.31 6.9.32 6.9.33 6.9.34 6.9.35 6.9.36 6.9.37 6.9.38 6.9.39 6.9.4 6.9.41 6.9.42 6.9.43 6.9.44 6.9.45 6.9.46 6.9.47 6.9.48 6.9.49 6.9.5 6.9.51 6.9.6 6.9.7 6.9.8 6.9.9 7.0.0 7.0.0-alpha.6 7.0.0-alpha.7 7.0.0-beta.1 7.0.0-rc1 7.0.0-rc2 7.0.0-rc3 7.0.1 7.0.10 7.0.11 7.0.2 7.0.3 7.0.4 7.0.5 7.0.6 7.0.7 7.0.8 7.0.9 7.1.0 7.1.1 trunk 3.0 4.0 4.0.1 4.1 4.2 4.3 4.4 4.4.1 4.5 4.6 4.6.1 4.6.2 4.7 4.7.1 4.7.2 4.7.5 4.7.6 4.8 4.8.1 4.9 4.9.1 4.9.2 4.9.3 4.9.4 4.9.5 4.9.5.1 4.9.5.2 5.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.1 5.1.1 5.10 5.11 5.2 5.2.1 5.2.5 5.2.6 5.2.7 5.3 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.4 5.4.1 5.4.2 5.4.3 5.4.3.1 5.4.3.2 5.5 5.5.1 5.5.2 5.6 5.6.1 5.6.1.1 5.7 5.7.1 5.7.2 5.7.3 5.8 5.8.1 5.8.2 5.8.3 5.9 5.9.1 5.9.1.1 5.9.2 5.9.2.1 5.9.3 5.9.4 5.9.5 5.9.6 5.9.6.1 5.9.6.2 5.9.6.3 5.9.7 5.9.7.1 5.9.7.2 5.9.7.3 5.9.8 5.9.8.1 5.9.9 5.9.9.1 6.0.0 6.0.1 6.0.2 6.0.3 6.0.4 6.0.5 6.1.0 6.1.1 6.2.0 6.2.1 6.2.2 6.3.0 6.3.1 6.3.2 6.3.3 6.4.0 6.4.1 6.4.2 6.4.3 6.5.0 6.5.1 6.5.2 6.5.3 6.5.4 6.6.0 6.6.1 6.6.2 6.6.3 6.6.4 6.7.0 6.7.1 6.7.2 6.7.3 6.7.4 6.7.5 6.7.6 6.7.7 6.7.8 6.7.9 6.8.0 6.8.1 6.8.2 6.8.3
advanced-access-manager / application / Core / Policy / Validator.php
advanced-access-manager / application / Core / Policy Last commit date
Condition.php 6 years ago Factory.php 6 years ago Manager.php 6 years ago Token.php 6 years ago Validator.php 6 years ago
Validator.php
181 lines
1 <?php
2
3 /**
4 * ======================================================================
5 * LICENSE: This file is subject to the terms and conditions defined in *
6 * file 'license.txt', which is part of this source code package. *
7 * ======================================================================
8 */
9
10 use Composer\Semver\Semver;
11
12 /**
13 * AAM core policy validator
14 *
15 * @package AAM
16 * @author Vasyl Martyniuk <vasyl@vasyltech.com>
17 * @since AAM v5.7.3
18 */
19 class AAM_Core_Policy_Validator {
20
21 /**
22 * Raw policy text
23 *
24 * @var string
25 *
26 * @access protected
27 */
28 protected $policy;
29
30 /**
31 * Parsed JSON document
32 *
33 * @var array
34 *
35 * @access protected
36 */
37 protected $json;
38
39 /**
40 * Collection of errors
41 *
42 * @var array
43 *
44 * @access protected
45 */
46 protected $errors = array();
47
48 /**
49 * Constructor
50 *
51 * @param string $policy
52 *
53 * @access public
54 */
55 public function __construct($policy) {
56 $this->policy = trim($policy);
57 $this->json = json_decode($policy, true);
58 }
59
60 /**
61 * Validate the policy
62 *
63 * @return array
64 *
65 * @access public
66 */
67 public function validate() {
68 $steps = array(
69 'isJSON', // #1. Check if policy is valid JSON
70 'isNotEmpty', // #2. Check if policy is not empty
71 'isValidDependency', // #3. Check if all dependencies are defined properly
72 );
73
74 foreach($steps as $step) {
75 if (call_user_func(array($this, $step)) === false) {
76 break;
77 }
78 }
79
80 return $this->errors;
81 }
82
83 /**
84 * Check if policy is valid JSON
85 *
86 * @return boolean
87 *
88 * @access public
89 */
90 public function isJSON() {
91 $result = is_array($this->json);
92
93 if ($result === false) {
94 $this->errors[] = __('The policy is not valid JSON object', AAM_KEY);
95 }
96
97 return $result;
98 }
99
100 /**
101 * Check if policy is empty
102 *
103 * @return boolean
104 *
105 * @access public
106 */
107 public function isNotEmpty() {
108 $result = !empty($this->policy) && !empty($this->json);
109
110 if ($result === false) {
111 $this->errors[] = __('The policy document is empty', AAM_KEY);
112 }
113
114 return $result;
115 }
116
117 public function isValidDependency() {
118 if (!empty($this->json['Dependency'])) {
119 foreach($this->json['Dependency'] as $app => $constraints) {
120 try {
121 $satisfies = Semver::satisfies(
122 $this->getAppVersion(strtolower($app)), $constraints
123 );
124 if ($satisfies === false) {
125 throw new Exception(
126 AAM_Backend_View_Helper::preparePhrase(
127 "The dependency [{$app}] does not satisfy version requirement by the policy",
128 'b'
129 )
130 );
131 }
132 } catch (Exception $e) {
133 $this->errors[] = $e->getMessage();
134 }
135 }
136 }
137 }
138
139 protected function getAppVersion($app) {
140 global $wp_version;
141
142 if ($app === 'wordpress') {
143 $version = $wp_version;
144 } else {
145 $version = $this->getPluginVersion($app);
146 }
147
148 return $version;
149 }
150
151 protected function getPluginVersion($slug) {
152 static $plugins = null;
153
154 if (is_null($plugins)) {
155 if (file_exists(ABSPATH . 'wp-admin/includes/plugin.php')) {
156 require_once ABSPATH . 'wp-admin/includes/plugin.php';
157 }
158
159 $plugins = get_plugins();
160 }
161
162 $version = null;
163
164 foreach($plugins as $plugin => $data) {
165 if (stripos($plugin, $slug . '/') === 0) {
166 $version = $data['Version'];
167 }
168 }
169
170 if (is_null($version)) {
171 throw new Exception(
172 AAM_Backend_View_Helper::preparePhrase(
173 "The plugin [{$slug}] is required by the policy",
174 'b'
175 )
176 );
177 }
178
179 return $version;
180 }
181 }