PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 1.4.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v1.4.0
4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / app / src / Rest / RestServiceProvider.php
surecart / app / src / Rest Last commit date
AbandonedCheckoutProtocolRestServiceProvider.php 3 years ago AbandonedCheckoutRestServiceProvider.php 3 years ago AccountRestServiceProvider.php 3 years ago ActivationRestServiceProvider.php 3 years ago BalanceTransactionRestServiceProvider.php 3 years ago BlockPatternsRestServiceProvider.php 3 years ago BrandRestServiceProvider.php 3 years ago BumpRestServiceProvider.php 3 years ago ChargesRestServiceProvider.php 3 years ago CheckEmailRestServiceProvider.php 3 years ago CheckoutRestServiceProvider.php 3 years ago CouponRestServiceProvider.php 3 years ago CustomerLinksRestServiceProvider.php 3 years ago CustomerNotificationProtocolRestServiceProvider.php 3 years ago CustomerRestServiceProvider.php 3 years ago DownloadRestServiceProvider.php 3 years ago IntegrationProvidersRestServiceProvider.php 3 years ago IntegrationsRestServiceProvider.php 3 years ago InvoicesRestServiceProvider.php 3 years ago LicenseRestServiceProvider.php 3 years ago LoginRestServiceProvider.php 3 years ago ManualPaymentMethodsRestServiceProvider.php 3 years ago MediaRestServiceProvider.php 3 years ago OrderProtocolRestServiceProvider.php 3 years ago OrderRestServiceProvider.php 3 years ago PaymentIntentsRestServiceProvider.php 3 years ago PaymentMethodsRestServiceProvider.php 3 years ago PeriodRestServiceProvider.php 3 years ago PortalProtocolRestServiceProvider.php 3 years ago PriceRestServiceProvider.php 3 years ago ProcessorRestServiceProvider.php 3 years ago ProductGroupsRestServiceProvider.php 3 years ago ProductsRestServiceProvider.php 3 years ago PromotionRestServiceProvider.php 3 years ago PurchasesRestServiceProvider.php 3 years ago RefundsRestServiceProvider.php 3 years ago RestServiceInterface.php 3 years ago RestServiceProvider.php 3 years ago SettingsRestServiceProvider.php 3 years ago StatisticRestServiceProvider.php 3 years ago SubscriptionProtocolRestServiceProvider.php 3 years ago SubscriptionRestServiceProvider.php 3 years ago TaxProtocolRestServiceProvider.php 3 years ago TaxRegistrationRestServiceProvider.php 3 years ago TaxZoneRestServiceProvider.php 3 years ago UploadsRestServiceProvider.php 3 years ago VerificationCodeRestServiceProvider.php 3 years ago WebhooksRestServiceProvider.php 3 years ago
RestServiceProvider.php
298 lines
1 <?php
2
3 namespace SureCart\Rest;
4
5 use SureCart\Models\Model;
6 use SureCart\Rest\RestServiceInterface;
7
8 /**
9 * Abstract Rest Service Provider interface
10 */
11 abstract class RestServiceProvider extends \WP_REST_Controller implements RestServiceInterface {
12 /**
13 * Mark specific properties that need additional permissions checks
14 * before modifying. We don't want customers being able to modify these.
15 *
16 * @var array
17 */
18 protected $property_permissions = [];
19
20 /**
21 * Plugin namespace.
22 *
23 * @var string
24 */
25 protected $name = 'surecart';
26
27 /**
28 * API Version
29 *
30 * @var string
31 */
32 protected $version = '1';
33
34 /**
35 * Endpoint.
36 *
37 * @var string
38 */
39 protected $endpoint = '';
40
41 /**
42 * Controller class
43 *
44 * @var string
45 */
46 protected $controller = '';
47
48 /**
49 * Methods allowed for the model.
50 *
51 * @var array
52 */
53 protected $methods = [ 'index', 'create', 'find', 'edit', 'delete' ];
54
55 /**
56 * {@inheritDoc}
57 *
58 * @param \Pimple\Container $container Service Container.
59 */
60 public function register( $container ) {
61 // nothing to register.
62 }
63
64 /**
65 * Bootstrap routes
66 *
67 * @param \Pimple\Container $container Service Container.
68 *
69 * @return void
70 */
71 public function bootstrap( $container ) {
72 add_action( 'rest_api_init', [ $this, 'registerModelRoutes' ] );
73 }
74
75 /**
76 * Do we have the method
77 *
78 * @param string $name
79 * @return boolean
80 */
81 public function hasMethod( $name ) {
82 return in_array( $name, $this->methods, true );
83 }
84
85 /**
86 * Do we have all these methods.
87 *
88 * @param array $methods Array of method names.
89 * @return boolean
90 */
91 public function hasAnyMethods( $methods = [] ) {
92 foreach ( $methods as $method ) {
93 if ( $this->hasMethod( $method ) ) {
94 return true;
95 }
96 }
97 return false;
98 }
99
100 /**
101 * Register REST Routes
102 *
103 * @return void
104 */
105 public function registerModelRoutes() {
106 if ( $this->hasAnyMethods( [ 'index', 'create' ] ) ) {
107 register_rest_route(
108 "$this->name/v$this->version",
109 "$this->endpoint",
110 array_filter(
111 [
112 ( $this->hasMethod( 'index' ) ? [
113 'methods' => \WP_REST_Server::READABLE,
114 'callback' => $this->callback( $this->controller, 'index' ),
115 'permission_callback' => [ $this, 'get_items_permissions_check' ],
116 'args' => $this->get_collection_params(),
117 ] : [] ),
118 ( $this->hasMethod( 'create' ) ? [
119 'methods' => \WP_REST_Server::CREATABLE,
120 'callback' => $this->callback( $this->controller, 'create' ),
121 'permission_callback' => [ $this, 'create_item_permissions_check' ],
122 ] : [] ),
123 'schema' => [ $this, 'get_item_schema' ],
124 ]
125 )
126 );
127 }
128
129 if ( $this->hasAnyMethods( [ 'find', 'edit', 'delete' ] ) ) {
130 register_rest_route(
131 "$this->name/v$this->version",
132 $this->endpoint . '/(?P<id>[^/]+)',
133 array_filter(
134 [
135 ( $this->hasMethod( 'find' ) ? [
136 'methods' => \WP_REST_Server::READABLE,
137 'callback' => $this->callback( $this->controller, 'find' ),
138 'permission_callback' => [ $this, 'get_item_permissions_check' ],
139 ] : [] ),
140 ( $this->hasMethod( 'edit' ) ? [
141 'methods' => \WP_REST_Server::EDITABLE,
142 'callback' => $this->callback( $this->controller, 'edit' ),
143 'permission_callback' => [ $this, 'update_item_permissions_check' ],
144 ] : [] ),
145 ( $this->hasMethod( 'delete' ) ? [
146 'methods' => \WP_REST_Server::DELETABLE,
147 'callback' => $this->callback( $this->controller, 'delete' ),
148 'permission_callback' => [ $this, 'delete_item_permissions_check' ],
149 ] : [] ),
150 // Register our schema callback.
151 'schema' => [ $this, 'get_item_schema' ],
152 ]
153 )
154 );
155 }
156
157 $this->registerRoutes();
158 }
159
160 /**
161 * Additional routes to register for the model.
162 *
163 * @return void
164 */
165 public function registerRoutes() {
166 }
167
168 /**
169 * Process the callback for the route.
170 *
171 * @param string $class Class name.
172 * @param string $method Class method.
173 * @return callback
174 */
175 public function callback( $class, $method ) {
176 // litespeed caching bypass.
177 do_action( 'litespeed_control_set_nocache', 'surecart api request' );
178
179 return function ( $request ) use ( $class, $method ) {
180 // get and call controller with request.
181 $controller = \SureCart::closure()->method( $class, $method );
182 $model = $controller( $request );
183
184 // check and filter context.
185 $context = ! empty( $request['context'] ) ? $request['context'] : 'view';
186
187 if ( is_wp_error( $model ) ) {
188 return $model;
189 }
190
191 // if we are editing, creating, deleting, we are in an edit context. No need to pass the context.
192 if ( in_array( $method, [ 'edit', 'create', 'delete' ], true ) ) {
193 $context = 'edit';
194 }
195
196 // remove wp_created_by to prevent user ids from being leaked.
197 if ( 'edit' !== $context && ! empty( $model->metadata->wp_created_by ) ) {
198 unset( $model->metadata->wp_created_by );
199 }
200
201 $response = rest_ensure_response( $this->filter_response_by_context( is_a( $model, Model::class ) ? $model->toArray() : $model, $context ) );
202
203 if ( is_a( $model, Model::class ) ) {
204 $response->header( 'X-SURECART-CACHE-STATUS', $model->getCacheStatus() );
205 }
206
207 return $response;
208 };
209 }
210
211 /**
212 * Check permissions for specific properties of the request.
213 *
214 * @param \WP_REST_Request $request Full details about the request.
215 * @param array $keys Keys to check.
216 *
217 * @return boolean
218 */
219 protected function requestOnlyHasKeys( $request, $keys ) {
220 $keys = array_merge( $keys, [ 'context', '_locale', 'rest_route', 'id', 'expand' ] );
221 foreach ( $request->get_params() as $key => $value ) {
222 if ( ! in_array( $key, $keys, true ) ) {
223 return false;
224 }
225 }
226 return true;
227 }
228
229 /**
230 * Retrieves the query params for collections.
231 *
232 * @return array
233 */
234 public function get_collection_params() {
235 return [];
236 }
237
238 /**
239 * Set these all as false by default
240 * in case parent class doesn't implement them.
241 *
242 * @param \WP_REST_Request $request Full details about the request.
243 *
244 * @return false
245 */
246 public function get_item_permissions_check( $request ) {
247 return false;
248 }
249
250 /**
251 * Set these all as false by default
252 * in case parent class doesn't implement them.
253 *
254 * @param \WP_REST_Request $request Full details about the request.
255 *
256 * @return false
257 */
258 public function get_items_permissions_check( $request ) {
259 return false;
260 }
261
262 /**
263 * Set these all as false by default
264 * in case parent class doesn't implement them.
265 *
266 * @param \WP_REST_Request $request Full details about the request.
267 *
268 * @return false
269 */
270 public function create_item_permissions_check( $request ) {
271 return false;
272 }
273
274 /**
275 * Set these all as false by default
276 * in case parent class doesn't implement them.
277 *
278 * @param \WP_REST_Request $request Full details about the request.
279 *
280 * @return false
281 */
282 public function update_item_permissions_check( $request ) {
283 return false;
284 }
285
286 /**
287 * Set these all as false by default
288 * in case parent class doesn't implement them.
289 *
290 * @param \WP_REST_Request $request Full details about the request.
291 *
292 * @return false
293 */
294 public function delete_item_permissions_check( $request ) {
295 return false;
296 }
297 }
298