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 / LogoutRedirect.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
LogoutRedirect.php
289 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 Logout Redirect service
12 *
13 * @package AAM
14 * @version 7.0.0
15 */
16 class AAM_Restful_LogoutRedirect
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_logout_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 logout redirect
44 $this->_register_route('/redirect/logout', [
45 'methods' => WP_REST_Server::READABLE,
46 'callback' => array($this, 'get_redirect'),
47 ], self::PERMISSIONS);
48
49 // Create a logout redirect
50 $this->_register_route('/redirect/logout', [
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_LogoutRedirect::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(
65 $value, $request
66 );
67 }
68 ),
69 'redirect_url' => array(
70 'description' => 'Valid URL to redirect to',
71 'type' => 'string',
72 'validate_callback' => function ($value, $request) {
73 return $this->_validate_redirect_url($value, $request);
74 }
75 ),
76 'callback' => array(
77 'description' => 'Custom callback function',
78 'type' => 'string',
79 'validate_callback' => function ($value, $request) {
80 return $this->_validate_callback($value, $request);
81 }
82 )
83 )
84 ], self::PERMISSIONS);
85
86 // Delete the logout redirect
87 $this->_register_route('/redirect/logout', [
88 'methods' => WP_REST_Server::DELETABLE,
89 'callback' => array($this, 'reset_redirect'),
90 ], self::PERMISSIONS);
91 });
92 }
93
94 /**
95 * Get current redirect
96 *
97 * @param WP_REST_Request $request
98 *
99 * @return WP_REST_Response
100 * @access public
101 *
102 * @version 7.0.0
103 */
104 public function get_redirect(WP_REST_Request $request)
105 {
106 try {
107 $service = $this->_get_service($request);
108 $result = $service->get_redirect();
109 } catch (Exception $e) {
110 $result = $this->_prepare_error_response($e);
111 }
112
113 return rest_ensure_response($result);
114 }
115
116 /**
117 * Set the logout redirect
118 *
119 * @param WP_REST_Request $request
120 *
121 * @return WP_REST_Response
122 * @access public
123 *
124 * @version 7.0.0
125 */
126 public function set_redirect(WP_REST_Request $request)
127 {
128 try {
129 $service = $this->_get_service($request);
130 $result = $service->set_redirect($request->get_params());
131 } catch (Exception $e) {
132 $result = $this->_prepare_error_response($e);
133 }
134
135 return rest_ensure_response($result);
136 }
137
138 /**
139 * Reset the redirect
140 *
141 * @param WP_REST_Request $request
142 *
143 * @return WP_REST_Response
144 * @access public
145 *
146 * @version 7.0.0
147 */
148 public function reset_redirect(WP_REST_Request $request)
149 {
150 try {
151 $service = $this->_get_service($request);
152 $result = [ 'success' => $service->reset() ];
153 } catch (Exception $e) {
154 $result = $this->_prepare_error_response($e);
155 }
156
157 return rest_ensure_response($result);
158 }
159
160 /**
161 * Validate the 'url' param
162 *
163 * @param string $value
164 *
165 * @return boolean|WP_Error
166 * @access private
167 *
168 * @version 7.0.0
169 */
170 private function _validate_url($value)
171 {
172 $response = true;
173 $url = AAM::api()->misc->sanitize_url($value);
174
175 if (empty($url)) {
176 $response = new WP_Error(
177 'rest_invalid_param',
178 'The url is not a valid URL',
179 array('status' => 400)
180 );
181 }
182
183 return $response;
184 }
185
186 /**
187 * Validate redirect page ID
188 *
189 * @param int $value
190 * @param WP_REST_Request $request
191 *
192 * @return boolean|WP_Error
193 * @access private
194 *
195 * @version 7.0.0
196 */
197 private function _validate_redirect_page_id($value, $request)
198 {
199 $response = true;
200 $rule_type = $request->get_param('type');
201 $page_id = intval($value);
202
203 if ($rule_type === 'page_redirect') {
204 if ($page_id === 0 || get_post($page_id) === null) {
205 $response = new WP_Error(
206 'rest_invalid_param',
207 'The redirect_page_id refers to non-existing page',
208 array('status' => 400)
209 );
210 }
211 }
212
213 return $response;
214 }
215
216 /**
217 * Validate redirect URL
218 *
219 * @param string $value
220 * @param WP_REST_Request $request
221 *
222 * @return boolean|WP_Error
223 * @access private
224 *
225 * @version 7.0.0
226 */
227 private function _validate_redirect_url($value, $request)
228 {
229 $response = true;
230 $rule_type = $request->get_param('type');
231 $url = AAM::api()->misc->sanitize_url($value);
232
233 if ($rule_type === 'url_redirect' && empty($url)) {
234 $response = new WP_Error(
235 'rest_invalid_param',
236 'The redirect_url is not valid URL',
237 array('status' => 400)
238 );
239 }
240
241 return $response;
242 }
243
244 /**
245 * Validate the callback value
246 *
247 * @param string $value
248 * @param WP_REST_Request $request
249 *
250 * @return boolean|WP_Error
251 * @access private
252 *
253 * @version 7.0.0
254 */
255 private function _validate_callback($value, $request)
256 {
257 $response = true;
258 $rule_type = $request->get_param('type');
259
260 if ($rule_type === 'trigger_callback' && is_callable($value, true) === false) {
261 $response = new WP_Error(
262 'rest_invalid_param',
263 'The callback is not valid PHP callback',
264 array('status' => 400)
265 );
266 }
267
268 return $response;
269 }
270
271 /**
272 * Get service
273 *
274 * @param WP_REST_Request $request
275 *
276 * @return AAM_Framework_Service_LogoutRedirect
277 * @access private
278 *
279 * @version 7.0.0
280 */
281 private function _get_service(WP_REST_Request $request)
282 {
283 return AAM::api()->logout_redirect(
284 $this->_determine_access_level($request),
285 [ 'error_handling' => 'exception' ]
286 );
287 }
288
289 }