1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
<?php
namespace AutomateWoo;
use AutomateWoo\Rest_Api\Controllers\ConversionsController; use AutomateWoo\Rest_Api\Controllers\LogsController; use AutomateWoo\Rest_Api\Controllers\WorkflowPresets as WorkflowPresetsController; use AutomateWoo\Rest_Api\Controllers\Workflows as WorkflowsController; use AutomateWoo\Rest_Api\Controllers\ManualWorkflowRunner as ManualWorkflowRunnerController; use AutomateWoo\Rest_Api\Utilities\Controller_Namespace; use AutomateWoo\Admin\Analytics\Rest_API as Analytics_Rest_API; use WP_REST_Controller; use WP_REST_Request; use WP_REST_Response;
/** * Class Rest_Api * * @since 4.9.0 */ final class Rest_Api {
use Controller_Namespace;
/** * Init AutomateWoo's Rest API. */ public function init() { add_action( 'rest_api_init', [ $this, 'register_routes' ], 15 ); add_filter( 'rest_namespace_index', [ $this, 'filter_namespace_index' ], 10, 2 ); add_filter( 'woocommerce_rest_is_request_to_rest_api', [ $this, 'allow_wc_rest_api_authentication' ] ); Analytics_Rest_API::init(); }
/** * Register REST API routes. */ public function register_routes() { foreach ( $this->get_controllers() as $controller ) { $controller->register_routes(); } }
/** * Get REST API controller objects. * * @return WP_REST_Controller[] * @throws Exception When a class doesn't implement the correct interface. */ private function get_controllers() { $classes = [ LogsController::class, WorkflowsController::class, ManualWorkflowRunnerController::class, WorkflowPresetsController::class, ConversionsController::class, ];
$controllers = []; foreach ( $classes as $class ) { $object = new $class(); if ( ! $object instanceof WP_REST_Controller ) { throw new Exception( esc_html( sprintf( '%s must implement %s', get_class( $object ), WP_REST_Controller::class ) ) ); }
$controllers[] = $object; }
return $controllers; }
/** * Filter the index response for our namespace. * * @param WP_REST_Response $response The response object for the given request. * @param WP_REST_Request $request The current REST Request object. * * @return WP_REST_Response The filtered response object. */ public function filter_namespace_index( $response, $request ) { if ( $this->namespace === $request['namespace'] ) { $response->data['info'] = __( 'AutomateWoo API endpoints are still under development and subject to change.', 'automatewoo' ); }
return $response; }
/** * Allow the AutomateWoo namespace to use WC REST API authentication. * * @since 6.0.10 * * @param boolean $allow Allow the request to use WC REST API authentication. * * @return boolean */ public function allow_wc_rest_api_authentication( bool $allow ): bool { if ( $allow || empty( $_SERVER['REQUEST_URI'] ) ) { return $allow; }
$rest_prefix = trailingslashit( rest_get_url_prefix() ); $request_uri = esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) );
// Check if the request is to the AutomateWoo namespace. if ( false !== strpos( $request_uri, "{$rest_prefix}{$this->namespace}/" ) ) { return true; }
return $allow; } }
|