PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.1-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.1-beta
16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / jetpack_vendor / automattic / jetpack-videopress / src / class-videopresstoken.php
jetpack / jetpack_vendor / automattic / jetpack-videopress / src Last commit date
js 2 months ago tus 1 month ago videopress-divi 2 months ago videopress-divi-5 2 months ago class-access-control.php 3 months ago class-admin-ui.php 3 weeks ago class-ajax.php 1 month ago class-attachment-handler.php 1 month ago class-block-editor-content.php 1 month ago class-block-editor-extensions.php 1 month ago class-block-replacement.php 9 months ago class-caption-tracks.php 1 month ago class-data.php 1 month ago class-divi.php 2 months ago class-initial-state.php 1 month ago class-initializer.php 1 month ago class-jwt-token-bridge.php 2 years ago class-module-control.php 3 years ago class-options.php 2 years ago class-package-version.php 3 weeks ago class-plan.php 2 years ago class-rest-controller.php 1 month ago class-site.php 3 years ago class-stats.php 1 year ago class-status.php 9 months ago class-upload-exception.php 3 years ago class-uploader-rest-endpoints.php 9 months ago class-uploader.php 1 month ago class-utils.php 4 months ago class-video-block-email-renderer.php 2 months ago class-videopress-rest-api-v1-features.php 6 months ago class-videopress-rest-api-v1-settings.php 1 month ago class-videopress-rest-api-v1-site.php 2 years ago class-videopress-rest-api-v1-stats.php 3 years ago class-videopresstoken.php 1 month ago class-wpcom-rest-api-v2-attachment-field-videopress.php 9 months ago class-wpcom-rest-api-v2-attachment-videopress-data.php 1 month ago class-wpcom-rest-api-v2-endpoint-videopress-caption-tracks.php 1 month ago class-wpcom-rest-api-v2-endpoint-videopress.php 1 month ago class-xmlrpc.php 1 month ago utility-functions.php 1 month ago
class-videopresstoken.php
169 lines
1 <?php
2 /**
3 * VideoPress Token
4 *
5 * @package automattic/jetpack-videopress
6 */
7
8 namespace Automattic\Jetpack\VideoPress;
9
10 use Automattic\Jetpack\Connection\Client;
11 use Automattic\Jetpack\Connection\Manager as Connection_Manager;
12 use Jetpack_Options;
13 /**
14 * VideoPress token utility class
15 */
16 class VideoPressToken {
17 /**
18 * Check if user is connected.
19 *
20 * @return bool
21 * @throws Upload_Exception - If user is not connected.
22 */
23 private static function check_connection() {
24 if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
25 return true;
26 }
27 if ( ! ( new Connection_Manager() )->has_connected_owner() ) {
28 throw new Upload_Exception( __( 'You need to connect Jetpack before being able to upload a video to VideoPress.', 'jetpack-videopress-pkg' ) );
29 }
30 return true;
31 }
32
33 /**
34 * Get current blog id.
35 *
36 * @return string - Blog id.
37 */
38 public static function blog_id() {
39 if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
40 $blog_id = get_current_blog_id();
41 } else {
42 $blog_id = Jetpack_Options::get_option( 'id' );
43 }
44
45 return $blog_id;
46 }
47
48 /**
49 * Retrieve a Playback JWT via WPCOM api.
50 *
51 * @param string $guid The VideoPress GUID.
52 * @return string
53 */
54 public static function videopress_playback_jwt( $guid ) {
55 $blog_id = static::blog_id();
56
57 $args = array(
58 'method' => 'POST',
59 );
60
61 $endpoint = "sites/{$blog_id}/media/videopress-playback-jwt/{$guid}";
62
63 $result = Client::wpcom_json_api_request_as_blog( $endpoint, 'v2', $args, null, 'wpcom' );
64
65 if ( is_wp_error( $result ) ) {
66 return $result;
67 }
68
69 $response = json_decode( $result['body'], true );
70
71 if ( empty( $response['metadata_token'] ) ) {
72 return false;
73 }
74
75 return $response['metadata_token'];
76 }
77
78 /**
79 * Retrieve a One Time Upload Token via WPCOM api.
80 *
81 * @return string
82 * @throws Upload_Exception If token is empty or is had an error.
83 */
84 public static function videopress_onetime_upload_token() {
85 if ( static::check_connection() ) {
86 $blog_id = static::blog_id();
87
88 /*
89 * On WordPress.com the classic `sites/{id}/media/token` (rest/v1.1) endpoint
90 * isn't reachable in-process: `Client::wpcom_json_api_request_as_blog` routes
91 * through `WPCOM_API_Direct`, which only dispatches WP-REST routes. Mint the
92 * one-time token straight from the same primitives that endpoint uses. Mirrors
93 * the IS_WPCOM branches already in this class (`blog_id()`) and its sibling AJAX
94 * playback-JWT handler (`AJAX::request_jwt_from_wpcom()`).
95 */
96 if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
97 if ( ! class_exists( '\Jetpack_Server_Upload_Token' ) && defined( 'ABSPATH' ) ) {
98 // file_exists-guarded so a relocated wpcom mu-plugins file degrades
99 // to the friendly exception below instead of a require fatal.
100 $upload_token_file = ABSPATH . 'wp-content/mu-plugins/jetpack/class.jetpack-server-upload-token.php';
101 if ( file_exists( $upload_token_file ) ) {
102 require_once $upload_token_file;
103 }
104 }
105 if ( class_exists( '\Jetpack_Data' ) && class_exists( '\Jetpack_Server_Upload_Token' ) && defined( 'JETPACK__ANY_USER_TOKEN' ) ) {
106 // blog_id() types as int|string (the Jetpack-option path), but on
107 // WPCOM it's get_current_blog_id() — narrow for the int-typed stubs.
108 $wpcom_blog_id = (int) $blog_id;
109 $jetpack_token = \Jetpack_Data::get_access_token_by_blog_id_user_id( $wpcom_blog_id, JETPACK__ANY_USER_TOKEN );
110 $token = \Jetpack_Server_Upload_Token::create_token( $wpcom_blog_id, $jetpack_token );
111 if ( is_array( $token ) && ! empty( $token['hash'] ) ) {
112 return $token['hash'];
113 }
114 }
115 throw new Upload_Exception( __( 'Could not obtain a VideoPress upload token. Please try again later.', 'jetpack-videopress-pkg' ) );
116 }
117
118 $args = array(
119 'method' => 'POST',
120 );
121
122 $endpoint = "sites/{$blog_id}/media/token";
123 $result = Client::wpcom_json_api_request_as_blog( $endpoint, Client::WPCOM_JSON_API_VERSION, $args );
124
125 if ( is_wp_error( $result ) ) {
126 throw new Upload_Exception( __( 'Could not obtain a VideoPress upload token. Please try again later.', 'jetpack-videopress-pkg' ) );
127 }
128
129 $response = json_decode( $result['body'], true );
130
131 if ( empty( $response['upload_token'] ) ) {
132 throw new Upload_Exception( __( 'Could not obtain a VideoPress upload token. Please try again later.', 'jetpack-videopress-pkg' ) );
133 }
134
135 return $response['upload_token'];
136 }
137 }
138
139 /**
140 * Gets the VideoPress Upload JWT
141 *
142 * @return string
143 * @throws Upload_Exception - If user is not connected, if token is empty or failed to obtain.
144 */
145 public static function videopress_upload_jwt() {
146 if ( static::check_connection() ) {
147 $blog_id = static::blog_id();
148 $endpoint = "sites/{$blog_id}/media/videopress-upload-jwt";
149 $args = array( 'method' => 'POST' );
150 $result = Client::wpcom_json_api_request_as_blog( $endpoint, 'v2', $args, null, 'wpcom' );
151
152 if ( is_wp_error( $result ) ) {
153 throw new Upload_Exception(
154 __( 'Could not obtain a VideoPress upload JWT. Please try again later.', 'jetpack-videopress-pkg' ) .
155 '(' . $result->get_error_message() . ')'
156 );
157 }
158
159 $response = json_decode( $result['body'], true );
160
161 if ( empty( $response['upload_token'] ) ) {
162 throw new Upload_Exception( __( 'Could not obtain a VideoPress upload JWT. Please try again later. (empty upload token)', 'jetpack-videopress-pkg' ) );
163 }
164
165 return $response['upload_token'];
166 }
167 }
168 }
169