We could not connect to WpStream.net. Make sure you have the php Curl library enabled and your hosting allows outgoing HTTP Connection. '; } $token = $this->wpstream_get_token(); if($token=='' and $page!='wpstream_plugin_options'){ // echo 'wpstream_curl_failed: ' . get_option('wpstream_curl_failed'); $text = get_option('wpstream_curl_failed') === "0" ? 'Not connected to WpStream. Please check your credentials here.' : 'Not connected to WpStream. Please note the errors above and contact support.'; echo '
'.__($text,'wpstream').'
'; } } /* * Curl request * * * * */ function wpstream_baker_do_curl_base($url,$curl_post_fields, $expect_json = false, $quiet = false, $timeout = 10){ $curl = curl_init(); $base_api_url = defined('WPSTREAM_TEST_API' ) ? WPSTREAM_TEST_API : WPSTREAM_API; $api_url = $base_api_url . '/' . $url; curl_setopt_array($curl, array( CURLOPT_URL =>$api_url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => $timeout, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => http_build_query($curl_post_fields), CURLOPT_HTTPHEADER => array( "cache-control: no-cache", "content-type: application/x-www-form-urlencoded" ), )); $response = curl_exec($curl); $err = curl_error($curl); $http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE); curl_close($curl); $curl_failed = 0; $logger = new WpStream_Logger(); if ($err) { // do not echo every time, some operations must return JSON if (!$quiet){ echo '
Critical: Could Not Connect to WpStream - '.$err.'
'; } $curl_failed = $err; $log_entry = new WpStream_Log_Entry([ 'type' => 'error', 'description' => 'CURL error: ' . $err . ' on endpoint ' . $url, ]); $logger->add( $log_entry ); $response = json_encode( array( 'success' => false, 'error' => $err, )); } else if ($http_code != 200) { $log_entry = new WpStream_Log_Entry([ 'type' => 'error', 'description' => 'HTTP error: ' . $http_code . ' on endpoint ' . $url, ]); $logger->add( $log_entry ); if (!$quiet){ switch ($http_code) { case 0: $message = "CURL failed with code 0. Please address CURL connectivity with your hosting provider."; break; case 429: $message = "API: Too many Requests"; break; case 403: $message = "API: Access Forbidden with response: " . $response . ' and HTTP code: ' . $http_code; break; default: $message = "API - Unexpected response: " . $http_code; break; } echo '
'.$message.'
'; } $curl_failed = $http_code; $response = json_encode( array( 'success' => false, 'error' => $http_code, )); } else if ($expect_json){ $curl_response_decoded = json_decode($response,JSON_OBJECT_AS_ARRAY); if (JSON_ERROR_NONE !== json_last_error()) { $log_entry = new WpStream_Log_Entry([ 'type' => 'error', 'description' => 'Malformed JSON response: ' . json_last_error_msg() . ' on endpoint ' . $url, ]); $logger->add( $log_entry ); if (!$quiet) { echo '
Critical: Malformed API response #: ' . json_last_error() . '
'; } $curl_failed = json_last_error(); $response = json_encode(array( 'success' => false, 'error' => json_last_error(), )); } } update_option( "wpstream_curl_failed", $curl_failed ); return $response; } /** * retreive server id based on show id * * @since 3.0.1 * returns live url */ function retrive_server_id_based_on_show_id($show_id){ $transient_name = 'server_id_to_return_'.$show_id; $server_id_to_return = get_transient( $transient_name ); if ( false === $server_id_to_return ) { $token = $this->wpstream_get_token(); $values_array=array( "show_id" => intval($show_id), ); $values_array=array(); $show_id=intval($show_id); $url="https://rest-baker.wpstream.net/?&apiFunctionName=server_id_by_show_id&show_id=".$show_id."&access_token=".$token; $arguments = array( 'method' => 'GET', 'timeout' => 45, 'redirection' => 5, 'httpversion' => '1.0', 'blocking' => true, 'headers' => array(), 'body' => $values_array, 'cookies' => array() ); $response = wp_remote_post($url,$arguments); $received_data = wp_remote_retrieve_body($response); $received_data_decoded=json_decode($received_data); if( isset($response['response']['code']) && $response['response']['code']=='200' && $received_data_decoded->success===true && $received_data_decoded->result!=''){ $server_id_to_return = $received_data_decoded->result; set_transient( $transient_name, json_decode($server_id_to_return), 60 ); return $server_id_to_return; }else{ return ''; } }else{ return $server_id_to_return; } die(); } /** * edited 4.0 * * * * check event status from start stremaing process * * @since 3.0.1 * returns live url */ public function wpstream_check_event_status(){ check_ajax_referer( 'wpstream_start_event_nonce', 'nonce' ); $channel_id = intval($_POST['channel_id']); $notes = 'wpstream_check_event_status_note'; if(isset($_POST['notes'])){ $notes = sanitize_text_field($_POST['notes']); } $response = $this->wpstream_check_event_status_api_call($channel_id,$notes); if( isset($response['success']) && $response['success']){ $this->api20_wpstream_update_event($response,$channel_id); if( isset($response['broadcast_url']) && isset($response['status']) && $response['status']==='active' ){ $response['live_data_url'] = $response['qos_url']; /* obsolote due to new url format $local_event_options = get_post_meta ($channel_id,'local_event_options',true); if( is_array( $local_event_options ) && intval( $local_event_options['autostart']) ==1 ){ $to_split=explode('/',$response['broadcast_url']); $obs_stream = array_pop($to_split);; $obs_uri = str_replace($obs_stream,'',$response['broadcast_url']); }else{ $to_split=explode('wpstream/',$response['broadcast_url']); $obs_uri = $to_split[0].'wpstream/'; $obs_stream = $to_split[1]; } */ $to_split = explode('/',$response['broadcast_url']); $obs_stream = array_pop($to_split);; $obs_uri = str_replace($obs_stream,'',$response['broadcast_url']); $response['obs_uri'] = $obs_uri; $response['obs_stream'] = $obs_stream; update_post_meta($channel_id,'obs_uri',$obs_uri); update_post_meta($channel_id,'obs_stream',$obs_stream); update_post_meta($channel_id,'broadcast_url',$response['broadcast_url']); } } print json_encode($response); die(); } public function wpstream_check_whipurl() { check_ajax_referer( 'wpstream_start_event_nonce', 'nonce' ); $channel_id = intval($_POST['channel_id']); $whip_url = get_post_meta($channel_id, 'whipUrl', true); if ( $whip_url ) { print json_encode( array( 'success' => true, 'whip_url' => $whip_url, ) ); } else { print json_encode( array( 'success' => false, 'error' => esc_html__('WHIP URL not found for this channel.', 'wpstream'), ) ); } die(); } /** * edited 4.0 * * check event status from API * * @since 3.0.1 * returns live url */ public function wpstream_check_event_status_api_call($channel_id,$notes){ $access_token = $this->wpstream_get_token(); $domain = parse_url ( get_site_url() ); $url = 'channel/info'; // do not make the call if no token is available if (!$access_token) return false; $curl_post_fields=array( 'access_token' => $access_token, 'channel_id' => $channel_id, 'domain' => $domain['host'], 'notes' => $notes ); $curl_response = $this->wpstream_baker_do_curl_base($url,$curl_post_fields,true, false,WPSTREAM_TIMEOUT_CONST); $curl_response_decoded = json_decode($curl_response,JSON_OBJECT_AS_ARRAY); return $curl_response_decoded; } public function wpstream_reset_event_data($event_id){ update_post_meta($event_id,'stats_url',''); update_post_meta($event_id,'hls_playback_url',''); update_post_meta($event_id,'server_id', '' ); } /** * edited 4.0 * update event metadata * * @since 3.0.1 * returns live url */ function api20_wpstream_update_event($response,$channel_id){ if( is_array($response) ) { $event_data_for_transient = array(); $transient_name = 'event_data_to_return_'.$channel_id; foreach($response as $key=>$value){ update_post_meta($channel_id,$key,$value); $event_data_for_transient[$key]=$value; } set_transient($transient_name,$event_data_for_transient,45); return $event_data_for_transient; }else{ return false; } } /** * Update event settings * * @since 3.0.1 * returns live url */ public function wpstream_update_local_event_settings(){ check_ajax_referer( 'wpstream_start_event_nonce', 'security' ); if(!is_user_logged_in()){ exit('not logged in'); } if( !current_user_can('administrator') ){ exit('not admin'); } $show_id = intval($_POST['show_id']); $option_array = $_POST['option']; $to_save_option=array(); foreach($option_array as $key=>$value){ $to_save_option[sanitize_key($key)]=sanitize_text_field($value); } if( $to_save_option['low_latency'] == 1 || $to_save_option['adaptive_bitrate'] ==1 ){ $to_save_option['encrypt']=0; } if( $to_save_option['encrypt']==1){ $to_save_option['low_latency'] = 0; $to_save_option['adaptive_bitrate'] =0; } update_post_meta ($show_id,'local_event_options',$to_save_option); $this->wpstream_update_chanel_on_baker($show_id,$to_save_option); } public function wpstream_update_local_event_settings_with_global() { check_ajax_referer( 'wpstream_start_event_nonce', 'security' ); check_ajax_referer( 'wpstream_start_event_nonce', 'security' ); if(!is_user_logged_in()){ wp_send_json_error(['success' => false, 'message' => __('Not logged in', 'wpstream')]); } if( !current_user_can('administrator') ){ wp_send_json_error(['success' => false, 'message' => __('Not admin', 'wpstream')]); } if ( !isset($_POST['show_id']) || !isset($_POST['use_global']) ) { wp_send_json_error(['success' => false, 'message' => __('Missing parameters', 'wpstream')]); } $show_id = intval($_POST['show_id']); $default_channel_settings = get_option('wpstream_user_streaming_global_channel_options') ; $this->wpstream_update_chanel_on_baker($show_id, $default_channel_settings); } public function wpstream_update_use_global_event_options() { check_ajax_referer( 'wpstream_start_event_nonce', 'security' ); if(!is_user_logged_in()){ wp_send_json_error(['success' => false, 'message' => __('Not logged in', 'wpstream')]); } if( !current_user_can('administrator') ){ wp_send_json_error(['success' => false, 'message' => __('Not admin', 'wpstream')]); } if ( !isset($_POST['show_id']) || !isset($_POST['use_global']) ) { wp_send_json_error(['success' => false, 'message' => __('Missing parameters', 'wpstream')]); } $show_id = intval($_POST['show_id']); $use_global_event_options = intval($_POST['use_global']); $result = update_post_meta( $show_id, 'use_global_event_options', $use_global_event_options ); if ( !$result ) { wp_send_json_error(['success' => false, 'message' => __('Failed to update event', 'wpstream')]); } $local_event_options = get_post_meta($show_id,'local_event_options',true); if( $use_global_event_options ) { $global_event_options = get_option('wpstream_user_streaming_global_channel_options'); $this->wpstream_update_chanel_on_baker( $show_id, $global_event_options ); } else { $global_event_options = get_option('wpstream_user_streaming_global_channel_options'); // if the local options are not set, we need to set them to the global ones if ( !is_array($local_event_options) ) { update_post_meta( $show_id, 'local_event_options', $global_event_options ); } $this->wpstream_update_chanel_on_baker( $show_id, $global_event_options ); } } public function wpstream_update_default_channel_settings() { check_ajax_referer( 'wpstream-settings-nonce', 'security' ); $options_array= $_POST['option']; $sanitized_options = array(); foreach( $options_array as $key => $value ) { $sanitized_options[ sanitize_key( $key ) ] = sanitize_text_field( $value ); } if ( $sanitized_options['low_latency'] == 1 || $sanitized_options['adaptive_bitrate'] == 1 ) { $sanitized_options['encrypt'] = 0; } if ( $sanitized_options['encrypt'] == 1 ) { $sanitized_options['low_latency'] = 0; $sanitized_options['adaptive_bitrate'] = 0; } $successful_update = update_option( 'wpstream_user_streaming_global_channel_options', $sanitized_options ); if ( $successful_update ) { wp_send_json( array( 'success' => true, ) ); } else { wp_send_json_error( array( 'success' => false, ) ); } wp_die(); } public function wpstream_update_settings() { check_ajax_referer( 'wpstream-settings-nonce', 'security' ); $option_name = sanitize_key( $_POST['option_name'] ); $option_type = sanitize_key( $_POST['option_type'] ); switch( $option_type ) { case 'checkbox': $option_value = filter_var( $_POST['option_value'], FILTER_VALIDATE_INT ); break; case 'text': case 'select': $option_value = sanitize_text_field( $_POST['option_value'] ); break; case 'multiple-select': if ( !is_array( $_POST['option_value'] ) ) { $option_value = array(); break; } $option_value = array_map( 'sanitize_text_field', $_POST['option_value'] ); break; default: $option_value = sanitize_text_field( $_POST['option_value'] ); } $successful_update = update_option( 'wpstream_' . $option_name, $option_value ); if( $successful_update ) { wp_send_json( array( 'success' => true, ) ); } else { wp_send_json_error( array( 'success' => false, ) ); } wp_die(); } /** * Update channel settings on baker * * @since 4.2 * returns live url */ public function wpstream_update_chanel_on_baker($channel_id,$to_save_option){ $access_token = $this->wpstream_get_token(); if($access_token==''){ // cleanup any previous echo before sending json ob_end_clean(); echo json_encode( array( 'is_record' => '', 'conected' => false, 'event_data' => '', 'error' => esc_html('You are not connected to wpstream.net! Please check your WpStream credentials!','wpstream'), )); exit(); } $current_user = wp_get_current_user(); $userID = $current_user->ID; $url = '/channel/update'; $local_event_options = get_post_meta($channel_id,'local_event_options',true); $domain = parse_url ( get_site_url() ); $domain_scheme = 'http'; if(is_ssl()){ $domain_scheme='https'; } $domain_ip= esc_html( $_SERVER['SERVER_ADDR'] ); if($domain_ip==''){ $domain_ip="0.0.0.0/0"; } $corsorigin='*'; if( isset($local_event_options['domain_lock']) && intval( $local_event_options['domain_lock']) ==0 ){ $corsorigin='*'; } else{ $corsorigin=$domain_scheme.'://'.$domain['host']; } $url = 'channel/update'; $to_record="false"; if($to_save_option['record']){ $to_record="true"; } if( $to_save_option['low_latency'] == 1 || $to_save_option['adaptive_bitrate'] ==1 ){ $to_save_option['encrypt']=0; } if( $to_save_option['encrypt']==1){ $to_save_option['low_latency'] = 0; $to_save_option['adaptive_bitrate'] =0; } $abr='none'; if($to_save_option['adaptive_bitrate'] ==1 ){ $abr='common'; } $curl_post_fields=array( 'access_token' => $access_token, 'channel_id' => $channel_id, 'domain' => $domain['host'], 'allow_access_from' => $corsorigin, 'record' => $to_record, 'encrypt' => boolval($to_save_option['encrypt']), 'autostart' => boolval($to_save_option['autostart']), 'low_latency' => boolval($to_save_option['low_latency']), 'abr' => $abr, 'hls_keys_url_prefix' => get_site_url().'?wpstream_livedrm=', 'allow_key_access_from' => $domain_ip, 'to_save_option' => $to_save_option, ); $curl_response = $this->wpstream_baker_do_curl_base($url,$curl_post_fields,true); print_r($curl_response); exit(); } /** * * added 5.0 * * Turn off channel * */ public function wpstream_turn_of_channel(){ $access_token = $this->wpstream_get_token(); if($access_token==''){ // cleanup any previous echo before sending json ob_end_clean(); echo json_encode( array( 'is_record' => '', 'conected' => false, 'event_data' => '', 'error' => esc_html('You are not connected to wpstream.net! Please check your WpStream credentials!','wpstream'), )); exit(); } $current_user = wp_get_current_user(); $userID = $current_user->ID; global $wpstream_plugin; if( !$wpstream_plugin->main->wpstream_check_user_can_stream() ){ exit('You are not allowed to stream.Code 407'); } $channel_id = intval($_POST['show_id']); $url = 'channel/stop'; $domain = parse_url ( get_site_url() ); $curl_post_fields=array( 'access_token' => $access_token, 'channel_id' => $channel_id, 'domain' => $domain['host'], ); $curl_response = $this->wpstream_baker_do_curl_base($url,$curl_post_fields,true); $curl_response_decoded = json_decode($curl_response,JSON_OBJECT_AS_ARRAY); if( isset($curl_response_decoded['success']) && $curl_response_decoded['success']===true ){ // cleanup any previous echo before sending json ob_end_clean(); echo json_encode( array( 'conected' => true, 'answer' => $curl_response_decoded, )); }else{ // cleanup any previous echo before sending json ob_end_clean(); echo json_encode( array( 'conected' => false, 'error' => esc_html__('Channel is already turned off or does not exist!','wpstream'), 'answer' => $curl_response_decoded, )); } die(); } /** * * Edited 4.0 * * Request live url * * @since 3.0.1 * returns live url */ public function wpstream_give_me_live_uri(){ $access_token = $this->wpstream_get_token(); if($access_token==''){ // cleanup any previous echo before sending json ob_end_clean(); echo json_encode( array( 'is_record' => '', 'conected' => false, 'event_data' => '', 'error' => esc_html('You are not connected to wpstream.net! Please check your WpStream credentials!','wpstream'), )); exit(); } $current_user = wp_get_current_user(); $userID = $current_user->ID; global $wpstream_plugin; if( !$wpstream_plugin->main->wpstream_check_user_can_stream() ){ exit('You are not allowed to stream.Code 407'); } $channel_id = intval($_POST['show_id']); $basic_streaming = filter_var($_POST['basic_streaming'], FILTER_VALIDATE_BOOLEAN); $on_boarding = ''; if(isset($_POST['start_onboarding'])){ $on_boarding = sanitize_text_field($_POST['start_onboarding']); } $local_event_options = get_post_meta($channel_id,'local_event_options',true); $use_global_event_options = get_post_meta($channel_id,'use_global_event_options',true); $is_local_event_options_enabled = ( is_array( $local_event_options ) && empty( $use_global_event_options ) ) || ( !empty($use_global_event_options) && intval( $use_global_event_options ) === 0 ); if( !$is_local_event_options_enabled ) { $local_event_options = get_option('wpstream_user_streaming_global_channel_options') ; } $is_autostart="false"; $is_encrypt="false"; $low_latency="false"; $adaptive_bitrate="false"; $is_record="false"; $corsorigin='*'; if ( is_array($local_event_options) ) { if ( isset($local_event_options['autostart']) && intval( $local_event_options['autostart']) == 1 ) { $is_autostart = "true"; } if ( isset($local_event_options['encrypt']) && intval( $local_event_options['encrypt']) == 1 ) { $is_encrypt = "true"; } if ( isset($local_event_options['low_latency']) && intval( $local_event_options['low_latency']) == 1 ) { $low_latency = "true"; } if ( isset($local_event_options['adaptive_bitrate']) && intval( $local_event_options['adaptive_bitrate']) == 1 ) { $adaptive_bitrate = "true"; } if ( isset($local_event_options['record']) && intval( $local_event_options['record']) == 1 ) { $is_record = "true"; } if ( !isset($local_event_options['domain_lock']) || intval( $local_event_options['domain_lock']) == 0 ) { $corsorigin = '*'; } } if( $adaptive_bitrate=="true" || $low_latency=="true" ) { $is_encrypt="false"; } if( $is_encrypt=="true" ) { $adaptive_bitrate="false"; $low_latency="false"; } $event_data = $this->wpstream_request_live_stream_uri( $channel_id, $is_autostart, $is_record, $is_encrypt, $low_latency, $adaptive_bitrate, $userID, $corsorigin, $on_boarding, $basic_streaming ); if( isset($event_data['success']) && $event_data['success']===true ){ // cleanup any previous echo before sending json ob_end_clean(); echo json_encode( array( 'is_record' => $is_record, 'conected' => true, 'event_data' => $event_data, )); }else{ $default_error= 'Failed to turn channel ON. Please try again in a few minutes.'; if( isset($event_data['error'])){ $plumer_error = $event_data['error']; switch ($plumer_error) { case 'NOT_ENOUGH_TRAFFIC': $default_error= 'You do not have enough Streaming Data to turn ON a live channel. Please upgrade your subscription for more resources.' ; break; } } // cleanup any previous echo before sending json ob_end_clean(); echo json_encode( array( 'is_record' => $is_record, 'conected' => false, 'event_data' => $event_data, 'error' => $default_error, )); } die(); } public function wpstream_is_streamify_user() { return false; // global $wpstream_plugin; // $pack_details = $wpstream_plugin->main->quota_manager->get_live_quota_data( 'wpstream_is_streamify_user' ); // // if ( isset( $pack_details['available_data'] ) && $pack_details['available_data'] <= 0 ) { // return true; // } // return false; } /** * * Edited 4.0 * * Request live url via api * * @since 3.0.1 * returns live url */ public function wpstream_request_live_stream_uri( $schannel_id, $is_autostart, $is_record, $is_encrypt, $low_latency, $adaptive_bitrate, $request_by_userid, $corsorigin, $on_boarding, $basic_streaming ) { $domain = parse_url ( get_site_url() ); $domain_scheme = 'http'; if(is_ssl()){ $domain_scheme='https'; } $domain_ip= esc_html( $_SERVER['SERVER_ADDR'] ); if($domain_ip==''){ $domain_ip="0.0.0.0/0"; } if($corsorigin!='*'){ $corsorigin=$domain_scheme.'://'.$domain['host']; } $abr='none'; if($adaptive_bitrate=="true"){ $abr='common'; } if($low_latency=="true"){ $low_latency=true; }else{ $low_latency = false; } $basic_streaming = $basic_streaming ? 'true' : 'false'; $url = 'channel/start'; $access_token = $this->wpstream_get_token(); $metadata_array=array( 'pluginVersion'=>WPSTREAM_PLUGIN_VERSION ); if($on_boarding!=''){ $metadata_array['on_boarding']='yes'; } $permalink = get_permalink($schannel_id); if ($permalink !== false) { $metadata_array['permalink'] = $permalink; } $curl_post_fields=array( 'access_token' => $access_token, 'channel_id' => $schannel_id, 'domain' => $domain['host'], 'allow_access_from' => $corsorigin, 'record' => $basic_streaming ? $is_record : 'false', 'encrypt' => $basic_streaming ? $is_encrypt : 'false', 'low_latency' => $basic_streaming ? $low_latency : 'false', 'abr' => $basic_streaming ? $abr : 'none', 'hls_keys_url_prefix' => get_site_url().'?wpstream_livedrm=', 'allow_key_access_from' => $domain_ip, 'metadata' => json_encode($metadata_array), 'autostart' => $basic_streaming ? $is_autostart : 'false', 'basic_streaming' => $basic_streaming, // 'fakeError' => 'init' ); $curl_response = $this->wpstream_baker_do_curl_base($url,$curl_post_fields,true); $curl_response_decoded = json_decode($curl_response,JSON_OBJECT_AS_ARRAY); // $curl_response_decoded['curl_post_fields']=$curl_post_fields; return $curl_response_decoded; } /** * Retrive auth token from tranzient * * @since 3.0.1 * returns token */ public function wpstream_get_token(){ $token = get_transient('wpstream_token_api'); if ( false === $token || $token === '' || $token=== NULL ) { $token = $this->wpstream_club_get_token(); if ($token !== false){ set_transient( 'wpstream_token_api', $token ,3500); } else { // cache the failed response for a second, otherwise it'll make a shitload of requests set_transient( 'wpstream_token_api', 'failed' , 1); } } $ret = $token === 'failed' ? false : $token; return $ret; } /** * Edited 4.0 * * Request auth token from wpstream.net * * @since 3.0.1 * returns token fron wpstream */ protected function wpstream_club_get_token(){ $username = get_option('wpstream_api_username',''); $password = get_option('wpstream_api_password',''); if ( $username=='' || $password==''){ return; } $url='access_token'; $curl_post_fields=array( 'grant_type' => 'password', 'username' => $username, 'password' => $password ); $curl_response=$this->wpstream_baker_do_curl_base($url,$curl_post_fields, true); $response= json_decode($curl_response); if( isset($response->access_token) && $response->access_token!='' ){ return $response->access_token; }else{ return false; } } /* * * Return token for api version 3.0 * */ /** * edited 4.0 * Return admin package data * * @since 3.0.1 * returns pack data */ public function wpstream_request_pack_data_per_user($context = ''){ $url = 'user/quota'; $access_token = $this->wpstream_get_token(); // do not make the call if no token is available if (!$access_token) return false; $curl_post_fields=array( 'access_token'=>$access_token, 'context' => $context, 'plugin_version' => WPSTREAM_PLUGIN_VERSION ); $curl_response = $this->wpstream_baker_do_curl_base($url,$curl_post_fields,true, false, WPSTREAM_TIMEOUT_CONST); $curl_response_decoded = json_decode($curl_response,JSON_OBJECT_AS_ARRAY); if( isset($curl_response_decoded['success']) && $curl_response_decoded['success']===true ){ set_transient( 'wpstream_request_pack_data_per_user_transient', $curl_response_decoded, 60 ); update_option('wpstream_api_username_from_token',$curl_response_decoded['username']); return $curl_response_decoded; } else { return false; } } public function wpstream_check_user_quota() { $pack_data = $this->wpstream_request_pack_data_per_user('wpstream_check_user_quota'); if ( ! $pack_data || ! isset( $pack_data['success'] ) || ! $pack_data['success'] ) { print json_encode( array( 'success' => false, 'error' => esc_html__('Couldn\'t get user quota.', 'wpstream'), ) ); } else { print json_encode($pack_data); } die(); } /** * Edited 4.0 * * Check Api Status * * @since 3.0.1 * returns true or false */ function wpstream_client_check_api_status(){ return true; } /** * * Edited 4.0 * * Start Get live events for users * * @since 3.0.1 * returns true or false */ public function wpstream_get_live_event_for_user($with_exit='yes'){ $current_user = wp_get_current_user(); $userID = $current_user->ID; global $wpstream_plugin; if( !$wpstream_plugin->main->wpstream_check_user_can_stream() ){ if($with_exit=='yes'){ // esc_html_e ('You are not allowed to start a live stream !','wpstream'); return; }else{ return; } } $event_data = $this->wpstream_request_live_stream_for_user($userID); $return_event = array(); if(is_array($event_data)): foreach ($event_data as $key=>$event){ $return_event[$event['channel_id']]=$event; } endif; return $return_event; } /** * * Edited 4.0 * * Get live events for users * * @since 3.0.1 * returns true or false */ public function wpstream_request_live_stream_for_user($user_id){ global $wpstream_plugin; $domain = parse_url ( get_site_url() ); $url = 'channel/list'; $access_token = $this->wpstream_get_token(); // do not make the call if no token is available if (!$access_token) return false; $curl_post_fields=array( 'access_token' => $access_token, 'domain' => $domain['host'], 'status' => 'active' ); $curl_response = $this->wpstream_baker_do_curl_base($url,$curl_post_fields,true); $curl_response_decoded = json_decode($curl_response,JSON_OBJECT_AS_ARRAY); if( isset($curl_response_decoded['success']) && $curl_response_decoded['success']==true ){ return $curl_response_decoded['channels']; }else{ return false; } } /** * live events for shortocde - behind tranzisnt * returns an array with local show id for live events * @since 3.0.1 * returns noda */ public function api20_wpstream_request_live_stream_for_user_for_shortcode($outside=''){ global $wpstream_plugin; $return_array=array(); $result = get_transient('wpstream_live_stream_for_user_for_shortcode'); if($result===false){ $result = $this->wpstream_request_live_stream_for_user(''); set_transient('wpstream_live_stream_for_user_for_shortcode',$result,30); } if(is_array($result)): foreach($result as $key=>$event){ $return_array[]=$event['channel_id']; } endif; return $return_array; } /** * Delete event * * @since 3.0.1 * returns noda */ public function wpstream_close_event(){ //not implemented yet } /** * Get signed upload form data * * @since 3.0.1 * returns aws form */ public function wpstream_get_signed_form_upload_data(){ if( !current_user_can('administrator') ){ exit('not admin on wpstream_get_signed_form_upload_data'); } $url = 'video/upload'; $access_token = $this->wpstream_get_token(); // do not make the call if no token is available if (!$access_token) return array( 'success' => false, 'error' => 'not_connected', ); $curl_post_fields=array( 'access_token' => $access_token, ); $curl_response = $this->wpstream_baker_do_curl_base($url,$curl_post_fields,true); $curl_response_decoded = json_decode($curl_response,JSON_OBJECT_AS_ARRAY); return $curl_response_decoded; exit(); } /** * * Get video from storage- clear data for front end use * * @since 3.0.1 * returns aws data * */ public function wpstream_get_videos(){ if( !current_user_can('administrator') ){ return; } $video_options = array(); $video_array = $this->wpstream_get_videos_from_api(); $video_list_raw_array = false; if ( is_array($video_array) && isset($video_array['items']) && is_array($video_array['items']) ) { $video_list_raw_array = $video_array['items']; } if(is_array($video_list_raw_array)){ $keys = array_column($video_list_raw_array, 'time'); array_multisort($keys, SORT_DESC , $video_list_raw_array); foreach ($video_list_raw_array as $key => $videos){ if($videos['name']!=''): $video_options[$videos['name']]=$videos['name']; endif; } } return $video_options; } /** * * Get video from storage- raw data * * @since 3.0.1 * returns aws data * */ public function wpstream_get_videos_from_api( ){ if( !current_user_can('administrator') ){ exit('not admin on wpstream_get_videos_from_api'); } $url = 'video/list'; $access_token = $this->wpstream_get_token(); // do not make the call if no token is available if (!$access_token) return false; $curl_post_fields=array( 'access_token' => $access_token, ); $current_page= get_current_screen(); $curl_response = $this->wpstream_baker_do_curl_base($url,$curl_post_fields,true); $curl_response_decoded = json_decode($curl_response,JSON_OBJECT_AS_ARRAY); if( isset($curl_response_decoded['success']) && $curl_response_decoded['success']==true ){ return $curl_response_decoded; }else{ return array(); } } /** * Get download link from aws * * @since 3.0.1 * returns aws data */ function wpstream_get_download_link(){ if( !current_user_can('administrator') ){ exit('not admin on get_download_link'); } $video_name = sanitize_text_field($_POST['video_name']); $url = 'video/download'; $access_token = $this->wpstream_get_token(); // do not make the call if no token is available if (!$access_token) return false; $curl_post_fields=array( 'access_token' => $access_token, 'name' => $video_name, ); $curl_response = $this->wpstream_baker_do_curl_base($url,$curl_post_fields); print $curl_response; exit(); } /** * Delete file from storage * * @since 3.0.1 * */ public function wpstream_get_delete_file(){ if( !current_user_can('administrator') ){ exit('not admin on get_delete_file'); } $video_name = esc_html($_POST['video_name']); $url = 'video/delete'; $access_token = $this->wpstream_get_token(); // do not make the call if no token is available if (!$access_token) return false; $curl_post_fields=array( 'access_token' => $access_token, 'name'=>$video_name, ); $curl_response = $this->wpstream_baker_do_curl_base($url,$curl_post_fields,true); $curl_response_decoded = json_decode($curl_response,JSON_OBJECT_AS_ARRAY); print $curl_response; exit(); } public function wpstream_check_pending_videos() { if (!current_user_can('administrator')) { wp_send_json_error(__('Unauthorized', 'wpstream')); } $videos_list_raw = $this->wpstream_get_videos_from_api(); wp_send_json_success($videos_list_raw); } }// end class