138 lines
3.6 KiB
PHP
138 lines
3.6 KiB
PHP
<?php
|
|
/**
|
|
* VideoPress Token
|
|
*
|
|
* @package automattic/jetpack-videopress
|
|
*/
|
|
|
|
namespace Automattic\Jetpack\VideoPress;
|
|
|
|
use Automattic\Jetpack\Connection\Client;
|
|
use Automattic\Jetpack\Connection\Manager as Connection_Manager;
|
|
use Jetpack_Options;
|
|
/**
|
|
* VideoPress token utility class
|
|
*/
|
|
class VideoPressToken {
|
|
/**
|
|
* Check if user is connected.
|
|
*
|
|
* @return bool
|
|
* @throws Upload_Exception - If user is not connected.
|
|
*/
|
|
private static function check_connection() {
|
|
if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
|
|
return true;
|
|
}
|
|
if ( ! ( new Connection_Manager() )->has_connected_owner() ) {
|
|
throw new Upload_Exception( __( 'You need to connect Jetpack before being able to upload a video to VideoPress.', 'jetpack-videopress-pkg' ) );
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Get current blog id.
|
|
*
|
|
* @return string - Blog id.
|
|
*/
|
|
public static function blog_id() {
|
|
if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
|
|
$blog_id = get_current_blog_id();
|
|
} else {
|
|
$blog_id = Jetpack_Options::get_option( 'id' );
|
|
}
|
|
|
|
return $blog_id;
|
|
}
|
|
|
|
/**
|
|
* Retrieve a Playback JWT via WPCOM api.
|
|
*
|
|
* @param string $guid The VideoPress GUID.
|
|
* @return string
|
|
*/
|
|
public static function videopress_playback_jwt( $guid ) {
|
|
$blog_id = static::blog_id();
|
|
|
|
$args = array(
|
|
'method' => 'POST',
|
|
);
|
|
|
|
$endpoint = "sites/{$blog_id}/media/videopress-playback-jwt/{$guid}";
|
|
|
|
$result = Client::wpcom_json_api_request_as_blog( $endpoint, 'v2', $args, null, 'wpcom' );
|
|
|
|
if ( is_wp_error( $result ) ) {
|
|
return $result;
|
|
}
|
|
|
|
$response = json_decode( $result['body'], true );
|
|
|
|
if ( empty( $response['metadata_token'] ) ) {
|
|
return false;
|
|
}
|
|
|
|
return $response['metadata_token'];
|
|
}
|
|
|
|
/**
|
|
* Retrieve a One Time Upload Token via WPCOM api.
|
|
*
|
|
* @return string
|
|
* @throws Upload_Exception If token is empty or is had an error.
|
|
*/
|
|
public static function videopress_onetime_upload_token() {
|
|
if ( static::check_connection() ) {
|
|
$blog_id = static::blog_id();
|
|
|
|
$args = array(
|
|
'method' => 'POST',
|
|
);
|
|
|
|
$endpoint = "sites/{$blog_id}/media/token";
|
|
$result = Client::wpcom_json_api_request_as_blog( $endpoint, Client::WPCOM_JSON_API_VERSION, $args );
|
|
|
|
if ( is_wp_error( $result ) ) {
|
|
throw new Upload_Exception( __( 'Could not obtain a VideoPress upload token. Please try again later.', 'jetpack-videopress-pkg' ) );
|
|
}
|
|
|
|
$response = json_decode( $result['body'], true );
|
|
|
|
if ( empty( $response['upload_token'] ) ) {
|
|
throw new Upload_Exception( __( 'Could not obtain a VideoPress upload token. Please try again later.', 'jetpack-videopress-pkg' ) );
|
|
}
|
|
|
|
return $response['upload_token'];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Gets the VideoPress Upload JWT
|
|
*
|
|
* @return string
|
|
* @throws Upload_Exception - If user is not connected, if token is empty or failed to obtain.
|
|
*/
|
|
public static function videopress_upload_jwt() {
|
|
if ( static::check_connection() ) {
|
|
$blog_id = static::blog_id();
|
|
$endpoint = "sites/{$blog_id}/media/videopress-upload-jwt";
|
|
$args = array( 'method' => 'POST' );
|
|
$result = Client::wpcom_json_api_request_as_blog( $endpoint, 'v2', $args, null, 'wpcom' );
|
|
|
|
if ( is_wp_error( $result ) ) {
|
|
throw new Upload_Exception(
|
|
__( 'Could not obtain a VideoPress upload JWT. Please try again later.', 'jetpack-videopress-pkg' ) .
|
|
'(' . $result->get_error_message() . ')'
|
|
);
|
|
}
|
|
|
|
$response = json_decode( $result['body'], true );
|
|
|
|
if ( empty( $response['upload_token'] ) ) {
|
|
throw new Upload_Exception( __( 'Could not obtain a VideoPress upload JWT. Please try again later. (empty upload token)', 'jetpack-videopress-pkg' ) );
|
|
}
|
|
|
|
return $response['upload_token'];
|
|
}
|
|
}
|
|
}
|