PluginProbe ʕ •ᴥ•ʔ
WP STAGING – WordPress Backups, Restore, Migration & Clone / 4.11.2
WP STAGING – WordPress Backups, Restore, Migration & Clone v4.11.2
4.11.2 4.11.1 4.11.0 4.10.0 4.9.5 4.9.4 4.9.3 4.9.2 4.9.1 4.9.0 4.8.1 trunk 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.10.0 3.2.0 3.3.1 3.3.2 3.3.3 3.4.1 3.4.3 3.5.0 3.6.0 3.7.1 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.8.6 3.8.7 3.9.0 3.9.1 3.9.2 3.9.3 3.9.4 4.0.0 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.0 4.7.0 4.7.1 4.7.2 4.7.3 4.8.0
wp-staging / Framework / Job / JobServiceProvider.php
wp-staging / Framework / Job Last commit date
Ajax 3 days ago BackgroundProcessing 3 days ago Dto 3 days ago Exception 3 days ago Interfaces 2 weeks ago Jobs 2 weeks ago Task 1 week ago Traits 10 months ago AbstractJob.php 2 weeks ago JobProvider.php 2 weeks ago JobServiceProvider.php 3 days ago JobTransientCache.php 3 days ago ProcessLock.php 2 weeks ago
JobServiceProvider.php
77 lines
1 <?php
2
3 namespace WPStaging\Framework\Job;
4
5 use WPStaging\Core\WPStaging;
6 use WPStaging\Framework\DI\FeatureServiceProvider;
7 use WPStaging\Framework\Job\Ajax\Cancel;
8 use WPStaging\Framework\Job\Ajax\Heartbeat;
9 use WPStaging\Framework\Job\Ajax\LoginUrl;
10 use WPStaging\Framework\Job\Ajax\PrepareCancel;
11 use WPStaging\Framework\Job\Dto\JobCancelDataDto;
12 use WPStaging\Framework\Job\Dto\JobDataDto;
13 use WPStaging\Framework\Job\Jobs\JobCancel;
14 use WPStaging\Framework\Logger\BackgroundLogger;
15 use WPStaging\Framework\Rest\Rest;
16 use WPStaging\Framework\Security\Auth;
17
18 class JobServiceProvider extends FeatureServiceProvider
19 {
20 protected function registerClasses()
21 {
22 $this->container->singleton(BackgroundLogger::class);
23
24 $this->container->when(JobCancel::class)
25 ->needs(JobDataDto::class)
26 ->give(JobCancelDataDto::class);
27 }
28
29 protected function addHooks()
30 {
31 $this->enqueueAjaxListeners();
32
33
34 add_filter('rest_pre_dispatch', $this->container->callback(BackgroundLogger::class, 'maybePrepareSseStream'), 10, 3);
35 add_action('rest_api_init', [$this, 'registerRestEndpoints']);
36 }
37
38 protected function enqueueAjaxListeners()
39 {
40 add_action('wp_ajax_wpstg--job--heartbeat', $this->container->callback(Heartbeat::class, 'ajaxProcess')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
41 add_action('wp_ajax_wpstg--job--prepare-cancel', $this->container->callback(PrepareCancel::class, 'ajaxPrepare')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
42 add_action('wp_ajax_wpstg--job--cancel', $this->container->callback(Cancel::class, 'ajaxProcess')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
43 add_action('wp_ajax_wpstg--job--outcome', $this->container->callback(BackgroundLogger::class, 'ajaxCheckJobOutcome')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
44 add_action('wp_ajax_raw_wpstg--login-url', $this->container->callback(LoginUrl::class, 'ajaxLoginUrl')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
45
46
47 add_action('wp_ajax_nopriv_raw_wpstg--login-url', $this->container->callback(LoginUrl::class, 'ajaxLoginUrl')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
48 add_action('wp_ajax_nopriv_wpstg--job--heartbeat', $this->container->callback(Heartbeat::class, 'ajaxProcess')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
49 add_action('wp_ajax_nopriv_wpstg--job--outcome', $this->container->callback(BackgroundLogger::class, 'ajaxCheckJobOutcome')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
50 }
51
52 public function registerRestEndpoints()
53 {
54 register_rest_route(Rest::WPSTG_ROUTE_NAMESPACE_V1, '/ping', [
55 'methods' => 'GET',
56 'callback' => function () {
57 wp_send_json_success();
58 },
59 'permission_callback' => function () {
60
61 $auth = WPStaging::make(Auth::class);
62 if (!$auth->isAuthenticatedRequest()) {
63 return new \WP_Error('rest_forbidden', esc_html__('You are not allowed to access this resource.', 'wp-staging'), ['status' => 403]);
64 }
65
66 return true;
67 },
68 ]);
69
70 register_rest_route(Rest::WPSTG_ROUTE_NAMESPACE_V1, '/sse-logs', [
71 'methods' => 'GET',
72 'callback' => $this->container->callback(BackgroundLogger::class, 'restEventStream'),
73 'permission_callback' => $this->container->callback(BackgroundLogger::class, 'verifyRestRequest'),
74 ]);
75 }
76 }
77