PluginProbe
VdoCipher: Secure Video Player and Hosting / 1.6
VdoCipher: Secure Video Player and Hosting v1.6
trunk 1.10 1.11 1.12 1.13 1.14 1.15 1.17 1.18 1.19 1.20 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.30 1.4 1.5 1.6 All 28 releases
← All changes | vdocipher.php +159 -341 1.231.6 View file →
@@ -1,374 +1,192 @@
1 1 <?php
2 2 /**
3 3 * Plugin Name: VdoCipher
4 - * Plugin URI: https://www.vdocipher.com
4 + * Plugin URI: http://www.vdocipher.com
5 5 * Description: Secured video hosting for wordpress
6 - * Version: 1.23
6 + * Version: 1.6
7 7 * Author: VdoCipher
8 - * Author URI: https://www.vdocipher.com
8 + * Author URI: http://www.vdocipher.com
9 9 * License: GPL2
10 10 */
11 11
12 +
12 13 if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) {
13 14 header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');
14 - exit("<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\r\n<html><head>\r\n<title>404 Not Found</title>\r\n".
15 - "</head><body>\r\n<h1>Not Found</h1>\r\n<p>The requested URL " . $_SERVER['SCRIPT_NAME'] . " was not found on ".
16 - "this server.</p>\r\n</body></html>");
15 + exit("<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\r\n<html><head>\r\n<title>404 Not Found</title>\r\n</head><body>\r\n<h1>Not Found</h1>\r\n<p>The requested URL " . $_SERVER['SCRIPT_NAME'] . " was not found on this server.</p>\r\n</body></html>");
17 16 }
18 17
19 -// Function called to retrieve id for when title given, starts
20 -function vdo_retrieve_id($title) {
21 - $client_key = get_option('vdo_client_key');
22 - if ($client_key == false || $client_key == "") {
23 - return "Plugin not configured. Please set the API key to embed videos.";
24 - }
25 - $url = "https://dev.vdocipher.com/api/videos?q=$title";
26 - $headers = array(
27 - 'Authorization'=>'Apisecret '.$client_key,
28 - 'Content-Type'=>'application/json',
29 - 'Accept'=>'application/json'
30 - );
31 - $response = wp_remote_post($url, array(
32 - 'method' => 'GET',
33 - 'headers' => $headers
34 - ));
35 - if (is_wp_error($response)) {
36 - $error_message = $response->get_error_message();
37 - echo "VdoCipher: Something went wrong: $error_message";
38 - return "";
39 - }
40 - $video_json_response = $response['body'];
41 - $video_list_object = json_decode($video_json_response);
42 - $video_list = $video_list_object->rows;
43 - $video_object = $video_list[0];
44 - $video_id = $video_object->id;
45 - return $video_id;
46 -}
47 -// Function called to retrieve id for when title given, ends
18 +function vdo_send($action, $params, $posts = false){
19 + $client_key = get_option('vdo_client_key');
20 + if ($client_key == false || $client_key == "") {
21 + return "Plugin not configured. Please set the key to embed videos.";
22 + }
23 + $curl = curl_init();
24 + curl_setopt($curl, CURLOPT_FAILONERROR, true);
25 + curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
26 + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
27 + curl_setopt($curl, CURLOPT_VERBOSE, true);
28 + curl_setopt($curl, CURLOPT_FAILONERROR, false);
29 + //curl_setopt($curl, CURLOPT_PROXY, "xxxxxxxxxxxxxxxxx:xxxx");
48 30
49 -// Function called to get OTP, starts
50 -function vdo_otp($video, $otp_post_array = array()) {
51 - $client_key = get_option('vdo_client_key');
52 - if ($client_key == false || $client_key == "") {
53 - return "Plugin not configured. Please set the API key to embed videos.";
54 - }
55 - $url = "https://dev.vdocipher.com/api/videos/$video/otp";
56 - $headers = array(
57 - 'Authorization'=>'Apisecret '.$client_key,
58 - 'Content-Type'=>'application/json',
59 - 'Accept'=>'application/json'
60 - );
61 - $otp_post_json = json_encode($otp_post_array);
62 - $response = wp_remote_post($url, array(
63 - 'method' => 'POST',
64 - 'headers' => $headers,
65 - 'body' => $otp_post_json
66 - ));
67 - if (is_wp_error($response)) {
68 - $error_message = $response->get_error_message();
69 - echo "VdoCipher: Something went wrong: $error_message";
70 - return "";
71 - }
72 - $OTP_Response = $response['body'];
73 - return json_decode($OTP_Response);
31 + $getData = http_build_query($params);
32 + curl_setopt($curl, CURLOPT_POST, true);
33 + $postData = "clientSecretKey=$client_key";
34 + if ($posts) {
35 + $postData .= "&". $posts;
36 + }
37 + curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
38 + $url = "http://api.vdocipher.com/v2/$action/?$getData";
39 + curl_setopt($curl, CURLOPT_URL,$url);
40 + $html = curl_exec($curl);
41 + if (!$html) {
42 + echo curl_error($curl);
43 + }
44 + curl_close($curl);
45 + return $html;
74 46 }
75 -// Function called to get OTP, ends
47 +function vdo_shortcode( $atts ) {
48 + extract( shortcode_atts(
49 + array(
50 + 'title' => 'TITLE_OF_VIDEO',
51 + 'width' => get_option('vdo_default_width'),
52 + 'height' => get_option('vdo_default_height'),
53 + 'id' => 'id',
54 + 'no_annotate'=> false
55 + ), $atts )
56 + );
57 + if(!$atts['id']){
58 + if(!$atts['title'])
59 + return "Required argument id for embedded video not found.";
60 + $params = array(
61 + 'search'=>array(
62 + 'title'=>$title
63 + ),
64 + 'page'=>1,
65 + 'limit'=>30,
66 + 'type'=>'json'
67 + );
68 + $video = vdo_send("videos", $params);
69 + $video = json_decode($video);
70 + if($video == null)
71 + return "404. Video not found.";
72 + $video = $video[0]->id;
73 + if ($video == null) {
74 + return "No video with given title found.";
75 + }
76 + }
77 + else
78 + $video = $id;
76 79
77 -// VdoCipher Shortcode starts
78 -function vdo_shortcode($atts)
79 -{
80 - extract(shortcode_atts(
81 - array(
82 - 'title' => 'TITLE_OF_VIDEO',
83 - 'width' => get_option('vdo_default_width') . "px",
84 - 'height' => get_option('vdo_default_height') . "px",
85 - 'id' => 'id',
86 - 'no_annotate'=> false,
87 - 'version'=> 0,
88 - 'vdo_theme'=> false,
89 - 'player_tech'=> ''
90 - ),
91 - $atts
92 - ));
93 - if ((get_option('vdo_default_height')) == 'auto') {
94 - $height = 'auto';
95 - }
96 - if (!$atts['id']) {
97 - if (!$atts['title']) {
98 - return "Required argument id for embedded video not found.";
99 - }
100 - else {
101 - $video = vdo_retrieve_id($title);
102 - if ($video == null) {
103 - return "404. Video not found.";
104 - }
105 - }
106 - }
107 - else {
108 - $video = $id;
109 - }
80 + $params = array(
81 + 'video'=>$video
82 + );
83 + $anno = false;
84 + if (!function_exists("eval_date")) {
85 + function eval_date($matches){
86 + return date($matches[1]);
87 + }
88 + }
89 + if (get_option('vdo_annotate_code') != "") {
90 + $current_user = wp_get_current_user();
91 + $vdo_annotate_code = get_option('vdo_annotate_code');
92 + $vdo_annotate_code = apply_filters('vdocipher_annotate_preprocess', $vdo_annotate_code);
93 + if (is_user_logged_in()) {
94 + $vdo_annotate_code = str_replace('{name}', $current_user->display_name , $vdo_annotate_code);
95 + $vdo_annotate_code = str_replace('{email}', $current_user->user_email , $vdo_annotate_code);
96 + $vdo_annotate_code = str_replace('{username}', $current_user->user_login , $vdo_annotate_code);
97 + $vdo_annotate_code = str_replace('{id}', $current_user->ID , $vdo_annotate_code);
98 + }
99 + $vdo_annotate_code = str_replace('{ip}', $_SERVER['REMOTE_ADDR'] , $vdo_annotate_code);
100 + $vdo_annotate_code = preg_replace_callback('/\{date\.([^\}]+)\}/', "eval_date" , $vdo_annotate_code);
101 + $vdo_annotate_code = apply_filters('vdocipher_annotate_postprocess', $vdo_annotate_code);
102 + if(!$no_annotate)
103 + $anno = "annotate=". urlencode($vdo_annotate_code);
104 + }
105 + $OTP = vdo_send("otp", $params, $anno);
106 + $OTP = json_decode($OTP);
107 + if(is_null($OTP)){
108 + $output = "<span id='vdo$OTP' style='background:#555555;color:#FFFFFF'><h4>Video not found</h4></span>";
109 + return $output;
110 + }
111 + $OTP = $OTP->otp;
110 112
111 - // Initialize $otp_post_array, to be sent as part of OTP request, as for time-to-live 300
112 - $otp_post_array = array("ttl" => 300);
113 - if (!function_exists("eval_date")) {
114 - function eval_date($matches)
115 - {
116 - return current_time($matches[1]);
117 - }
118 - }
119 - if (get_option('vdo_annotate_code') != "") {
120 - $current_user = wp_get_current_user();
121 - $vdo_annotate_code = get_option('vdo_annotate_code');
122 - if (is_user_logged_in()) {
123 - $vdo_annotate_code = str_replace('{name}', $current_user->display_name, $vdo_annotate_code);
124 - $vdo_annotate_code = str_replace('{email}', $current_user->user_email, $vdo_annotate_code);
125 - $vdo_annotate_code = str_replace('{username}', $current_user->user_login, $vdo_annotate_code);
126 - $vdo_annotate_code = str_replace('{id}', $current_user->ID, $vdo_annotate_code);
127 - }
128 - $vdo_annotate_code = str_replace('{ip}', $_SERVER['REMOTE_ADDR'], $vdo_annotate_code);
129 - $vdo_annotate_code = preg_replace_callback('/\{date\.([^\}]+)\}/', "eval_date", $vdo_annotate_code);
130 - // Add annotate code to $otp_post_array, which will be converted to Json and then sent as POST body to API endpoint
131 - if (!$no_annotate) {
132 - $otp_post_array["annotate"] = $vdo_annotate_code;
133 - }
134 - }
135 - // OTP is requested via vdo_otp function
136 - $OTP_Response = vdo_otp($video, $otp_post_array);
137 - $OTP = $OTP_Response->otp;
138 - $playbackInfo = $OTP_Response->playbackInfo;
113 + $output = "<span id='vdo$OTP'></span>";
114 + $output .= "<script src='https://de122v0opjemw.cloudfront.net/utils/playerInit.php?otp=$OTP&height=$height&width=$width&'></script>";
115 + return $output;
116 +}
139 117
140 - if (is_null($OTP)) {
118 +add_shortcode( 'vdo', 'vdo_shortcode' );
141 119
142 - $output = "<span id='vdo$OTP' style='background:#555555;color:#FFFFFF'><h4>Video not found</h4></span>";
143 - return $output;
144 - }
145 120
146 - // Version, legacy, for flash only
147 - $version = 0;
148 - if (isset($atts['version'])) {
149 - $version = $atts['version'];
150 - }
121 +/// adding the settings link
122 +$plugin = plugin_basename(__FILE__);
123 +add_filter("plugin_action_links_$plugin", 'vdo_settings_link' );
151 124
152 - // Video Embed version is updated
153 - if ((get_option('vdo_embed_version')) == false) {
154 - update_option('vdo_embed_version', '1.6.4');
155 - }
156 - $vdo_embed_version_str = get_option('vdo_embed_version');
157 -
158 - // Video Player theme, update and as shortcode attribute
159 - if ((get_option('vdo_player_theme')) == false) {
160 - update_option('vdo_player_theme', '9ae8bbe8dd964ddc9bdb932cca1cb59a');
161 - }
162 - if(!$vdo_theme){
163 - $vdo_player_theme = get_option('vdo_player_theme');
164 - }
165 - else {
166 - $vdo_player_theme = $vdo_theme;
167 - }
168 -
169 - // tech override custom names
170 - switch ($player_tech) {
171 - case "flash":
172 - $player_tech = "*,-dash";
173 - break;
174 - case "nohtml5":
175 - $player_tech = "*,-dash";
176 - break;
177 - case "noflash":
178 - $player_tech = "*,-hss";
179 - break;
180 - case "nozen":
181 - $player_tech = "*,-zen";
182 - break;
183 - case "noios":
184 - $player_tech = "*,-hlse";
185 - break;
186 - default:
187 - break;
188 - }
189 -
190 - // Old Embed Code
191 - if ($vdo_embed_version_str === '0.5') {
192 - $output = "<div id='vdo$OTP' style='height:$height;width:$width;max-width:100%' ></div>";
193 - $output .= "<script> (function(v,i,d,e,o){v[o]=v[o]||{}; v[o].add = v[o].add || function V(a){".
194 - " (v[o].d=v[o].d||[]).push(a);};";
195 - $output .= "if(!v[o].l) { v[o].l=1*new Date();a=i.createElement(d),m=i.getElementsByTagName(d)[0];a.async=1;".
196 - "a.src=e; m.parentNode.insertBefore(a,m);}";
197 - $output .= " })(window,document,'script','//de122v0opjemw.cloudfront.net/vdo.js','vdo'); vdo.add({ ";
198 - $output .= "o: '$OTP', ";
199 - if ($version == 32) {
200 - $output .= "version: '$version' ";
201 - }
202 - $output .= "}); </script>";
203 - } else {
204 - //New embed code
205 - if ($player_tech === '') {
206 - if (get_option('vdo_watermark_flash_html') === 'flash') {
207 - $player_tech = "*,-dash";
208 - }
209 - }
210 - $output .= "<div id='vdo$OTP' style='height:$height;width:$width;max-width:100%' ></div>";
211 - $output .= "<script>(function(v,i,d,e,o){v[o]=v[o]||{}; v[o].add = v[o].add || function V(a){".
212 - "(v[o].d=v[o].d||[]).push(a);};";
213 - $output .= "if(!v[o].l) { v[o].l=1*new Date(); a=i.createElement(d), m=i.getElementsByTagName(d)[0];";
214 - $output .= "a.async=1; a.src=e; m.parentNode.insertBefore(a,m);}";
215 - $output .= "})(window,document,'script','https://d1z78r8i505acl.cloudfront.net/playerAssets/";
216 - $output .= "$vdo_embed_version_str";
217 - $output .= "/vdo.js','vdo');";
218 - $output .= "vdo.add({";
219 - $output .= "otp: '$OTP',";
220 - $output .= "playbackInfo: '$playbackInfo',";
221 - $output .= "theme: '$vdo_player_theme',";
222 - if ($player_tech !== '') {
223 - $output .= "techoverride: [" ;
224 - $techarray = explode(',', $player_tech);
225 - for ($i = 0; $i < sizeof($techarray); $i++) {
226 - $techStr = $techarray[$i];
227 - $output .= "'$techStr'";
228 - if ($i !== sizeof($techarray)-1) {
229 - $output .= ", ";
230 - }
231 - }
232 - $output .= "],";
233 - }
234 - $output .= "container: document.querySelector('#vdo$OTP'),});";
235 - $output .= "</script>";
236 - }
237 - return $output;
125 +function vdo_settings_link($links) {
126 + $settings_link = '<a href="options-general.php?page=vdocipher.php">Settings</a>';
127 + array_unshift($links, $settings_link);
128 + return $links;
238 129 }
239 -add_shortcode('vdo', 'vdo_shortcode');
240 -// VdoCipher Shortcode ends
241 130
242 -// adding the Settings link, starts
243 -$plugin = plugin_basename(__FILE__);
244 -add_filter("plugin_action_links_$plugin", 'vdo_settings_link');
245 131
246 -function vdo_settings_link($links)
247 -{
248 - $settings_link = '<a href="options-general.php?page=vdocipher">Settings</a>';
249 - array_unshift($links, $settings_link);
250 - return $links;
251 -}
252 -// adding the Settings link, ends
253 -
254 -// add the menu item and register settings (3 functions), starts
255 -if (is_admin()) { // admin actions
256 - add_action('admin_init', 'register_vdo_settings');
257 - add_action('admin_menu', 'vdo_menu');
132 +/// add the menu item and register settings
133 +if ( is_admin() ){ // admin actions
134 + add_action( 'admin_menu', 'vdo_menu' );
135 + add_action( 'admin_init', 'register_vdo_settings' );
258 136 } else {
259 - // non-admin enqueues, actions, and filters
137 + // non-admin enqueues, actions, and filters
260 138 }
261 -function vdo_menu() {
262 - add_menu_page(
263 - 'VdoCipher Options',
264 - 'VdoCipher',
265 - 'manage_options',
266 - 'vdocipher',
267 - 'vdo_options',
268 - plugin_dir_url(__FILE__).'images/logo.png'
269 - );
270 - add_submenu_page(
271 - null,
272 - 'Video Player Themes',
273 - 'CustomPlayer',
274 - 'manage_options',
275 - 'themesvdo',
276 - 'themesvdo'
277 - );
139 +function vdo_menu(){
140 + add_options_page( 'VdoCipher Options', 'VdoCipher', 'manage_options', 'vdocipher', 'vdo_options' );
278 141 }
279 -
280 -function themesvdo() {
281 - include('include/player_themes.php');
142 +function vdo_options(){
143 + if (!get_option('vdo_default_height'))
144 + update_option('vdo_default_height', '360');
145 + if (!get_option('vdo_default_width'))
146 + update_option('vdo_default_width', '640');
147 + $vdo_client_key = get_option('vdo_client_key');
148 + if (!$vdo_client_key && strlen($vdo_client_key) != 64) {
149 + vdo_show_form_client_key();
150 + return "";
151 + }
152 + if ( !current_user_can( 'manage_options' ) ) {
153 + wp_die( __( 'You do not have sufficient permissions to access this page.' ) );
154 + }
155 + include('include/options.php');
282 156 }
283 -
284 -function vdo_options()
285 -{
286 - if (!get_option('vdo_default_height')) {
287 - update_option('vdo_default_height', 'auto');
288 - }
289 - if (!get_option('vdo_default_width')) {
290 - update_option('vdo_default_width', '1280');
291 - }
292 - $vdo_client_key = get_option('vdo_client_key');
293 - if (!$vdo_client_key && strlen($vdo_client_key) != 64) {
294 - vdo_show_form_client_key();
295 - return "";
296 - }
297 - if (!current_user_can('manage_options')) {
298 - wp_die(__('You do not have sufficient permissions to access this page.'));
299 - }
300 - include('include/options.php');
157 +function register_vdo_settings() { // whitelist options
158 + register_setting( 'vdo_option-group', 'vdo_client_key' );
159 + register_setting( 'vdo_option-group', 'vdo_default_height' );
160 + register_setting( 'vdo_option-group', 'vdo_default_width' );
161 + register_setting( 'vdo_option-group', 'vdo_annotate_code' );
301 162 }
302 -function register_vdo_settings()
303 -{
304 - // whitelist options
305 - register_setting('vdo_option-group', 'vdo_client_key');
306 - register_setting('vdo_option-group', 'vdo_default_height');
307 - register_setting('vdo_option-group', 'vdo_default_width');
308 - register_setting('vdo_option-group', 'vdo_annotate_code');
309 - register_setting('vdo_option-group', 'vdo_embed_version');
310 - register_setting('vdo_option-group', 'vdo_player_theme');
311 - register_setting('vdo_option-group', 'vdo_watermark_flash_html');
312 - register_setting('vdo_custom_theme', 'vdo_player_theme_options');
313 -}
314 -// add the menu item and register settings (3 functions), ends
315 163
316 -// section for client key for new users
317 -function vdo_show_form_client_key()
318 -{
319 - include('include/setting_form.php');
164 +/// adding a section for asking for the client key
165 +function vdo_show_form_client_key(){
166 + include('include/setting_form.php');
320 167 }
321 -
322 -// Activation Hook starts
323 -function vdo_activate()
324 -{
325 - if ((get_option('vdo_default_height')) == false) {
326 - update_option('vdo_default_height', 'auto');
327 - }
328 - if ((get_option('vdo_default_width')) == false) {
329 - update_option('vdo_default_width', '1280');
330 - }
331 - //https://stackoverflow.com/a/2173318/5022684
332 - if ((get_option('vdo_embed_version')) == false) {
333 - update_option('vdo_embed_version', '1.6.4');
334 - }
335 - if ((get_option('vdo_player_theme')) == false) {
336 - update_option('vdo_player_theme', '9ae8bbe8dd964ddc9bdb932cca1cb59a');
337 - }
338 - if ((get_option('vdo_watermark_flash_html')) == false) {
339 - update_option('vdo_watermark_flash_html', 'html5');
340 - }
168 +register_deactivation_hook(__FILE__, 'vdo_deactivate');
169 +function vdo_deactivate(){
170 + delete_option( 'vdo_client_key' );
171 + delete_option('vdo_default_width');
172 + delete_option('vdo_default_height');
173 + delete_option('vdo_annotate_code');
341 174 }
342 -register_activation_hook(__FILE__, 'vdo_activate');
343 -
344 -// Deactivation Hook starts
345 -function vdo_deactivate()
346 -{
347 - delete_option('vdo_client_key');
348 - delete_option('vdo_default_width');
349 - delete_option('vdo_default_height');
350 - delete_option('vdo_annotate_code');
351 - delete_option('vdo_embed_version');
352 - delete_option('vdo_player_theme');
353 - delete_option('vdo_watermark_flash_html');
354 - delete_option('vdo_player_theme_options');
175 +function vdo_activate() {
176 + if (!get_option('vdo_default_height'))
177 + update_option('vdo_default_height', '400');
178 + if (!get_option('vdo_default_width'))
179 + update_option('vdo_default_width', '640');
355 180 }
356 -register_deactivation_hook(__FILE__, 'vdo_deactivate');
357 -
358 -// Admin notice to configure plugin for new installs, starts
359 -function vdo_admin_notice()
360 -{
361 - if ((!get_option('vdo_client_key') || strlen(get_option('vdo_client_key')) != 64)
362 - && basename($_SERVER['PHP_SELF']) == "plugins.php"
363 - ) {
364 - ?>
365 - <div class="error">
366 - <p>
367 - The VdoCipher plugin is not ready.
368 - <a href="options-general.php?page=vdocipher">Click here to configure</a>
369 - </p>
370 - </div>
371 - <?php
372 - }
181 +register_activation_hook( __FILE__, 'vdo_activate' );
182 +function vdo_admin_notice() {
183 + if((!get_option('vdo_client_key') || strlen(get_option('vdo_client_key')) != 64) && basename($_SERVER['PHP_SELF']) == "plugins.php" ){
184 + ?>
185 + <div class="error">
186 + <p>The VdoCipher plugin is not ready. <a href="options-general.php?page=vdocipher">Click here to configure</a>
187 + </p>
188 + </div>
189 + <?php
190 + }
373 191 }
374 -add_action('admin_notices', 'vdo_admin_notice');
192 +add_action( 'admin_notices', 'vdo_admin_notice' );