PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.6.1
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.6.1
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 CancellationActRestServiceProvider.php 3 years ago CancellationReasonRestServiceProvider.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 DraftCheckoutRestServiceProvider.php 2 years ago FulfillmentRestServiceProvider.php 3 years ago IncomingWebhooksRestServiceProvider.php 2 years ago IntegrationProvidersRestServiceProvider.php 3 years ago IntegrationsRestServiceProvider.php 3 years ago InvoicesRestServiceProvider.php 3 years ago LicenseRestServiceProvider.php 3 years ago LineItemsRestServiceProvider.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 2 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 ProductMediaRestServiceProvider.php 3 years ago ProductsRestServiceProvider.php 3 years ago PromotionRestServiceProvider.php 3 years ago ProvisionalAccountRestServiceProvider.php 3 years ago PurchasesRestServiceProvider.php 3 years ago RefundsRestServiceProvider.php 3 years ago RegisteredWebhookRestServiceProvider.php 2 years ago RestServiceInterface.php 3 years ago RestServiceProvider.php 3 years ago SettingsRestServiceProvider.php 3 years ago ShippingMethodRestServiceProvider.php 3 years ago ShippingProfileRestServiceProvider.php 3 years ago ShippingProtocolRestServiceProvider.php 3 years ago ShippingRateRestServiceProvider.php 3 years ago ShippingZoneRestServiceProvider.php 3 years ago SiteHealthRestServiceProvider.php 2 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
297 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 $this->registerRoutes();
107 if ( $this->hasAnyMethods( [ 'index', 'create' ] ) ) {
108 register_rest_route(
109 "$this->name/v$this->version",
110 "$this->endpoint",
111 array_filter(
112 [
113 ( $this->hasMethod( 'index' ) ? [
114 'methods' => \WP_REST_Server::READABLE,
115 'callback' => $this->callback( $this->controller, 'index' ),
116 'permission_callback' => [ $this, 'get_items_permissions_check' ],
117 'args' => $this->get_collection_params(),
118 ] : [] ),
119 ( $this->hasMethod( 'create' ) ? [
120 'methods' => \WP_REST_Server::CREATABLE,
121 'callback' => $this->callback( $this->controller, 'create' ),
122 'permission_callback' => [ $this, 'create_item_permissions_check' ],
123 ] : [] ),
124 'schema' => [ $this, 'get_item_schema' ],
125 ]
126 )
127 );
128 }
129
130 if ( $this->hasAnyMethods( [ 'find', 'edit', 'delete' ] ) ) {
131 register_rest_route(
132 "$this->name/v$this->version",
133 $this->endpoint . '/(?P<id>[^/]+)',
134 array_filter(
135 [
136 ( $this->hasMethod( 'find' ) ? [
137 'methods' => \WP_REST_Server::READABLE,
138 'callback' => $this->callback( $this->controller, 'find' ),
139 'permission_callback' => [ $this, 'get_item_permissions_check' ],
140 ] : [] ),
141 ( $this->hasMethod( 'edit' ) ? [
142 'methods' => \WP_REST_Server::EDITABLE,
143 'callback' => $this->callback( $this->controller, 'edit' ),
144 'permission_callback' => [ $this, 'update_item_permissions_check' ],
145 ] : [] ),
146 ( $this->hasMethod( 'delete' ) ? [
147 'methods' => \WP_REST_Server::DELETABLE,
148 'callback' => $this->callback( $this->controller, 'delete' ),
149 'permission_callback' => [ $this, 'delete_item_permissions_check' ],
150 ] : [] ),
151 // Register our schema callback.
152 'schema' => [ $this, 'get_item_schema' ],
153 ]
154 )
155 );
156 }
157 }
158
159 /**
160 * Additional routes to register for the model.
161 *
162 * @return void
163 */
164 public function registerRoutes() {
165 }
166
167 /**
168 * Process the callback for the route.
169 *
170 * @param string $class Class name.
171 * @param string $method Class method.
172 * @return callback
173 */
174 public function callback( $class, $method ) {
175 // litespeed caching bypass.
176 do_action( 'litespeed_control_set_nocache', 'surecart api request' );
177
178 return function ( $request ) use ( $class, $method ) {
179 // get and call controller with request.
180 $controller = \SureCart::closure()->method( $class, $method );
181 $model = $controller( $request );
182
183 // check and filter context.
184 $context = ! empty( $request['context'] ) ? $request['context'] : 'view';
185
186 if ( is_wp_error( $model ) ) {
187 return $model;
188 }
189
190 // if we are editing, creating, deleting, we are in an edit context. No need to pass the context.
191 if ( in_array( $method, [ 'edit', 'create', 'delete' ], true ) ) {
192 $context = 'edit';
193 }
194
195 // remove wp_created_by to prevent user ids from being leaked.
196 if ( 'edit' !== $context && ! empty( $model->metadata->wp_created_by ) ) {
197 unset( $model->metadata->wp_created_by );
198 }
199
200 $response = rest_ensure_response( $this->filter_response_by_context( is_a( $model, Model::class ) ? $model->toArray() : $model, $context ) );
201
202 if ( is_a( $model, Model::class ) ) {
203 $response->header( 'X-SURECART-CACHE-STATUS', $model->getCacheStatus() );
204 }
205
206 return $response;
207 };
208 }
209
210 /**
211 * Check permissions for specific properties of the request.
212 *
213 * @param \WP_REST_Request $request Full details about the request.
214 * @param array $keys Keys to check.
215 *
216 * @return boolean
217 */
218 protected function requestOnlyHasKeys( $request, $keys ) {
219 $keys = array_merge( $keys, [ 'context', '_locale', 'rest_route', 'id', 'expand' ] );
220 foreach ( $request->get_params() as $key => $value ) {
221 if ( ! in_array( $key, $keys, true ) ) {
222 return false;
223 }
224 }
225 return true;
226 }
227
228 /**
229 * Retrieves the query params for collections.
230 *
231 * @return array
232 */
233 public function get_collection_params() {
234 return [];
235 }
236
237 /**
238 * Set these all as false by default
239 * in case parent class doesn't implement them.
240 *
241 * @param \WP_REST_Request $request Full details about the request.
242 *
243 * @return false
244 */
245 public function get_item_permissions_check( $request ) {
246 return false;
247 }
248
249 /**
250 * Set these all as false by default
251 * in case parent class doesn't implement them.
252 *
253 * @param \WP_REST_Request $request Full details about the request.
254 *
255 * @return false
256 */
257 public function get_items_permissions_check( $request ) {
258 return false;
259 }
260
261 /**
262 * Set these all as false by default
263 * in case parent class doesn't implement them.
264 *
265 * @param \WP_REST_Request $request Full details about the request.
266 *
267 * @return false
268 */
269 public function create_item_permissions_check( $request ) {
270 return false;
271 }
272
273 /**
274 * Set these all as false by default
275 * in case parent class doesn't implement them.
276 *
277 * @param \WP_REST_Request $request Full details about the request.
278 *
279 * @return false
280 */
281 public function update_item_permissions_check( $request ) {
282 return false;
283 }
284
285 /**
286 * Set these all as false by default
287 * in case parent class doesn't implement them.
288 *
289 * @param \WP_REST_Request $request Full details about the request.
290 *
291 * @return false
292 */
293 public function delete_item_permissions_check( $request ) {
294 return false;
295 }
296 }
297