PluginProbe ʕ •ᴥ•ʔ
Advanced Access Manager – Access Governance for WordPress / trunk
Advanced Access Manager – Access Governance for WordPress vtrunk
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 / Restful / NotFoundRedirect.php
advanced-access-manager / application / Restful Last commit date
AccessDeniedRedirect.php 1 year ago AdminToolbar.php 1 year ago ApiRoute.php 1 year ago BackendMenu.php 1 year ago BackwardCompatibility.php 1 year ago Capability.php 1 year ago Configs.php 5 months ago Content.php 1 year ago Identity.php 1 year ago Jwt.php 5 months ago LoginRedirect.php 1 year ago LogoutRedirect.php 1 year ago Metabox.php 1 year ago Mu.php 1 year ago NotFoundRedirect.php 1 year ago Policies.php 1 year ago Roles.php 1 year ago SecureLogin.php 1 year ago SecurityAudit.php 1 year ago ServiceTrait.php 1 year ago Settings.php 1 year ago Urls.php 1 year ago Users.php 1 year ago Widgets.php 1 year ago
NotFoundRedirect.php
291 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 /**
11 * RESTful API for the 404 Redirect service
12 *
13 * @package AAM
14 * @version 7.0.0
15 */
16 class AAM_Restful_NotFoundRedirect
17 {
18
19 use AAM_Restful_ServiceTrait;
20
21 /**
22 * Necessary permissions to access endpoint
23 *
24 * @version 7.0.0
25 */
26 const PERMISSIONS = [
27 'aam_manager',
28 'aam_manage_404_redirect'
29 ];
30
31 /**
32 * Constructor
33 *
34 * @return void
35 * @access protected
36 *
37 * @version 7.0.0
38 */
39 protected function __construct()
40 {
41 // Register API endpoint
42 add_action('rest_api_init', function() {
43 // Get current redirect
44 $this->_register_route('/redirect/not-found', [
45 'methods' => WP_REST_Server::READABLE,
46 'callback' => array($this, 'get_redirect')
47 ], self::PERMISSIONS);
48
49 // Create a redirect rule
50 $this->_register_route('/redirect/not-found', [
51 'methods' => WP_REST_Server::CREATABLE,
52 'callback' => array($this, 'set_redirect'),
53 'args' => array(
54 'type' => array(
55 'description' => 'Redirect type',
56 'type' => 'string',
57 'required' => true,
58 'enum' => AAM_Framework_Service_NotFoundRedirect::ALLOWED_REDIRECT_TYPES
59 ),
60 'redirect_page_id' => array(
61 'description' => 'Existing page ID to redirect to',
62 'type' => 'number',
63 'validate_callback' => function ($value, $request) {
64 return $this->_validate_redirect_page_id($value, $request);
65 }
66 ),
67 'redirect_url' => array(
68 'description' => 'Valid URL to redirect to',
69 'type' => 'string',
70 'validate_callback' => function ($value, $request) {
71 return $this->_validate_redirect_url($value, $request);
72 }
73 ),
74 'http_status_code' => array(
75 'description' => 'HTTP Status Code',
76 'type' => 'number'
77 ),
78 'callback' => array(
79 'description' => 'Custom callback function',
80 'type' => 'string',
81 'validate_callback' => function ($value, $request) {
82 return $this->_validate_callback($value, $request);
83 }
84 )
85 )
86 ], self::PERMISSIONS);
87
88 // Delete the redirect rule
89 $this->_register_route('/redirect/not-found', [
90 'methods' => WP_REST_Server::DELETABLE,
91 'callback' => array($this, 'reset_redirect')
92 ], self::PERMISSIONS);
93 });
94 }
95
96 /**
97 * Get current redirect rule
98 *
99 * @param WP_REST_Request $request
100 *
101 * @return WP_REST_Response
102 * @access public
103 *
104 * @version 7.0.0
105 */
106 public function get_redirect(WP_REST_Request $request)
107 {
108 try {
109 $service = $this->_get_service($request);
110 $result = $service->get_redirect();
111 } catch (Exception $e) {
112 $result = $this->_prepare_error_response($e);
113 }
114
115 return rest_ensure_response($result);
116 }
117
118 /**
119 * Set the 404 redirect
120 *
121 * @param WP_REST_Request $request
122 *
123 * @return WP_REST_Response
124 * @access public
125 *
126 * @version 7.0.0
127 */
128 public function set_redirect(WP_REST_Request $request)
129 {
130 try {
131 $service = $this->_get_service($request);
132 $result = $service->set_redirect($request->get_params());
133 } catch (Exception $e) {
134 $result = $this->_prepare_error_response($e);
135 }
136
137 return rest_ensure_response($result);
138 }
139
140 /**
141 * Reset the redirect rule
142 *
143 * @param WP_REST_Request $request
144 *
145 * @return WP_REST_Response
146 * @access public
147 *
148 * @version 7.0.0
149 */
150 public function reset_redirect(WP_REST_Request $request)
151 {
152 try {
153 $service = $this->_get_service($request);
154 $result = [ 'success' => $service->reset() ];
155 } catch (Exception $e) {
156 $result = $this->_prepare_error_response($e);
157 }
158
159 return rest_ensure_response($result);
160 }
161
162 /**
163 * Validate the 'url' param
164 *
165 * @param string $value
166 *
167 * @return boolean|WP_Error
168 * @access private
169 *
170 * @version 7.0.0
171 */
172 private function _validate_url($value)
173 {
174 $response = true;
175 $url = AAM::api()->misc->sanitize_url($value);
176
177 if (empty($url)) {
178 $response = new WP_Error(
179 'rest_invalid_param',
180 'The url is not a valid URL',
181 array('status' => 400)
182 );
183 }
184
185 return $response;
186 }
187
188 /**
189 * Validate redirect page ID
190 *
191 * @param int $value
192 * @param WP_REST_Request $request
193 *
194 * @return boolean|WP_Error
195 * @access private
196 *
197 * @version 7.0.0
198 */
199 private function _validate_redirect_page_id($value, $request)
200 {
201 $response = true;
202 $rule_type = $request->get_param('type');
203 $page_id = intval($value);
204
205 if ($rule_type === 'page_redirect') {
206 if ($page_id === 0 || get_post($page_id) === null) {
207 $response = new WP_Error(
208 'rest_invalid_param',
209 'The redirect_page_id refers to non-existing page',
210 array('status' => 400)
211 );
212 }
213 }
214
215 return $response;
216 }
217
218 /**
219 * Validate redirect URL
220 *
221 * @param string $value
222 * @param WP_REST_Request $request
223 *
224 * @return boolean|WP_Error
225 * @access private
226 *
227 * @version 7.0.0
228 */
229 private function _validate_redirect_url($value, $request)
230 {
231 $response = true;
232 $rule_type = $request->get_param('type');
233 $url = AAM::api()->misc->sanitize_url($value);
234
235 if ($rule_type === 'url_redirect' && empty($url)) {
236 $response = new WP_Error(
237 'rest_invalid_param',
238 'The redirect_url is not valid URL',
239 array('status' => 400)
240 );
241 }
242
243 return $response;
244 }
245
246 /**
247 * Validate the callback value
248 *
249 * @param string $value
250 * @param WP_REST_Request $request
251 *
252 * @return boolean|WP_Error
253 * @access private
254 *
255 * @version 7.0.0
256 */
257 private function _validate_callback($value, $request)
258 {
259 $response = true;
260 $rule_type = $request->get_param('type');
261
262 if ($rule_type === 'trigger_callback' && is_callable($value, true) === false) {
263 $response = new WP_Error(
264 'rest_invalid_param',
265 'The callback is not valid PHP callback',
266 array('status' => 400)
267 );
268 }
269
270 return $response;
271 }
272
273 /**
274 * Get service
275 *
276 * @param WP_REST_Request $request
277 *
278 * @return AAM_Framework_Service_NotFoundRedirect
279 * @access private
280 *
281 * @version 7.0.0
282 */
283 private function _get_service(WP_REST_Request $request)
284 {
285 return AAM::api()->not_found_redirect(
286 $this->_determine_access_level($request),
287 [ 'error_handling' => 'exception' ]
288 );
289 }
290
291 }