PluginProbe
VdoCipher: Secure Video Player and Hosting / 1.9
VdoCipher: Secure Video Player and Hosting v1.9
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 +82 -361 1.261.9 View file →
@@ -1,15 +1,18 @@
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.26
6 + * Version: 1.9
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 +error_reporting(E_ALL);
13 +ini_set('display_errors', 1);
14 +
12 15 if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) {
13 16 header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');
14 17 exit("<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\r\n<html><head>\r\n<title>404 Not Found</title>\r\n".
15 18 "</head><body>\r\n<h1>Not Found</h1>\r\n<p>The requested URL " . $_SERVER['SCRIPT_NAME'] . " was not found on ".
@@ -15,58 +18,21 @@
15 18 "</head><body>\r\n<h1>Not Found</h1>\r\n<p>The requested URL " . $_SERVER['SCRIPT_NAME'] . " was not found on ".
16 19 "this server.</p>\r\n</body></html>");
17 20 }
18 21
19 -if (!defined('VDOCIPHER_PLUGIN_VERSION')) {
20 - define('VDOCIPHER_PLUGIN_VERSION', '1.25');
21 -}
22 -
23 -if (!defined('VDOCIPHER_PLAYER_VERSION')) {
24 - define('VDOCIPHER_PLAYER_VERSION', '1.6.10');
25 -}
26 -
27 -function vdo_plugin_check_version()
22 +function vdo_send($action, $params, $posts = array())
28 23 {
29 -// This applies only for installs 1.24 and below
30 - if (!get_option('vdo_plugin_version')) {
31 - if (preg_match('/^1\.[0123456]\.[0-9]{1,2}$/', get_option('vdo_embed_version'))) {
32 - update_option('vdo_embed_version', VDOCIPHER_PLAYER_VERSION);
33 - }
34 - if (preg_match('/^1\.[01234]\.[0-9]{1,2}$/', get_option('vdo_embed_version'))) {
35 - update_option('vdo_default_height', 'auto');
36 - }
37 - update_option('vdo_plugin_version', VDOCIPHER_PLUGIN_VERSION);
38 - return ;
39 - }
40 - // This applies for all new installs after 1.25
41 - if (VDOCIPHER_PLUGIN_VERSION !== get_option('vdo_plugin_version')) {
42 - if (preg_match('/^1\.[0-9]{1,2}\.[0-9]{1,2}$/', get_option('vdo_embed_version'))) {
43 - update_option('vdo_embed_version', VDOCIPHER_PLAYER_VERSION);
44 - }
45 - update_option('vdo_plugin_version', VDOCIPHER_PLUGIN_VERSION);
46 - return ;
47 - }
48 - return ;
49 -}
50 -
51 -add_action('plugins_loaded', 'vdo_plugin_check_version');
52 -
53 -// Function called to retrieve id for when title given, starts
54 -function vdo_retrieve_id($title)
55 -{
56 24 $client_key = get_option('vdo_client_key');
57 25 if ($client_key == false || $client_key == "") {
58 - return "Plugin not configured. Please set the API key to embed videos.";
26 + return "Plugin not configured. Please set the key to embed videos.";
59 27 }
60 - $url = "https://dev.vdocipher.com/api/videos?q=$title";
61 - $headers = array(
62 - 'Authorization'=>'Apisecret '.$client_key,
63 - 'Content-Type'=>'application/json',
64 - 'Accept'=>'application/json'
65 - );
66 - $response = wp_remote_post($url, array(
67 - 'method' => 'GET',
68 - 'headers' => $headers
28 +
29 + $getData = http_build_query($params);
30 + $posts["clientSecretKey"] = $client_key;
31 + $url = "http://api.vdocipher.com/v2/$action/?$getData";
32 + $response = wp_safe_remote_post($url, array(
33 + 'method' => 'POST',
34 + 'body' => $posts
69 35 ));
70 36 if (is_wp_error($response)) {
71 37 $error_message = $response->get_error_message();
72 38 echo "VdoCipher: Something went wrong: $error_message";
@@ -71,99 +37,52 @@
71 37 $error_message = $response->get_error_message();
72 38 echo "VdoCipher: Something went wrong: $error_message";
73 39 return "";
74 40 }
75 - $video_json_response = $response['body'];
76 - $video_list_object = json_decode($video_json_response);
77 - $video_list = $video_list_object->rows;
78 - $video_object = $video_list[0];
79 - $video_id = $video_object->id;
80 - return $video_id;
41 + return $response['body'];
81 42 }
82 -// Function called to retrieve id for when title given, ends
83 -
84 -// Function called to get OTP, starts
85 -function vdo_otp($video, $otp_post_array = array())
86 -{
87 - $client_key = get_option('vdo_client_key');
88 - if ($client_key == false || $client_key == "") {
89 - return "Plugin not configured. Please set the API key to embed videos.";
90 - }
91 - $url = "https://dev.vdocipher.com/api/videos/$video/otp";
92 - $headers = array(
93 - 'Authorization'=>'Apisecret '.$client_key,
94 - 'Content-Type'=>'application/json',
95 - 'Accept'=>'application/json'
96 - );
97 - $otp_post_json = json_encode($otp_post_array);
98 - $response = wp_remote_post(
99 - $url,
100 - array(
101 - 'method' => 'POST',
102 - 'headers' => $headers,
103 - 'body' => $otp_post_json
104 - )
105 - );
106 - if (is_wp_error($response)) {
107 - $error_message = $response->get_error_message();
108 - echo "VdoCipher: Something went wrong: $error_message";
109 - return "";
110 - }
111 - $OTP_Response = $response['body'];
112 - return json_decode($OTP_Response);
113 -}
114 -// Function called to get OTP, ends
115 -
116 -// VdoCipher Shortcode starts
117 43 function vdo_shortcode($atts)
118 44 {
119 - $vdo_args = shortcode_atts(
45 + extract(shortcode_atts(
120 46 array(
121 - 'title' => 'TITLE_OF_VIDEO',
122 - 'width' => get_option('vdo_default_width'),
123 - 'height' => get_option('vdo_default_height'),
124 - 'id' => 'id',
125 - 'no_annotate'=> false,
126 - 'version'=> 0,
127 - 'vdo_theme'=> false,
128 - 'vdo_version'=> false,
129 - 'player_tech'=> ''
130 - ),
47 + 'title' => 'TITLE_OF_VIDEO',
48 + 'width' => get_option('vdo_default_width') . "px",
49 + 'height' => get_option('vdo_default_height') . "px",
50 + 'id' => 'id',
51 + 'no_annotate'=> false,
52 + 'version'=> 0,
53 + ),
131 54 $atts
132 - );
133 - $title = $vdo_args['title'];
134 - $width = $vdo_args['width'];
135 - $height = $vdo_args['height'];
136 - $id = $vdo_args['id'];
137 - $no_annotate = $vdo_args['no_annotate'];
138 - $version = $vdo_args['version'];
139 - $vdo_theme = $vdo_args['vdo_theme'];
140 - $vdo_version = $vdo_args['vdo_version'];
141 - $player_tech = $vdo_args['player_tech'];
142 -
143 - if (!preg_match('/.*px$/', $width)) {
144 - $width = $width."px";
145 - }
146 - if (!preg_match('/.*px$/', $height)) {
147 - if ($height != 'auto') {
148 - $height = $height."px";
149 - }
150 - }
55 + ));
151 56 if (!$atts['id']) {
152 57 if (!$atts['title']) {
153 58 return "Required argument id for embedded video not found.";
154 - } else {
155 - $video = vdo_retrieve_id($title);
156 - if ($video == null) {
157 - return "404. Video not found.";
158 - }
159 59 }
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 + }
73 + $video = $video[0]->id;
74 + if ($video == null) {
75 + return "No video with given title found.";
76 + }
160 77 } else {
161 78 $video = $id;
162 79 }
163 80
164 - // Initialize $otp_post_array, to be sent as part of OTP request, as for time-to-live 300
165 - $otp_post_array = array("ttl" => 300);
81 + $params = array(
82 + 'video'=>$video
83 + );
84 + $anno = false;
166 85 if (!function_exists("eval_date")) {
167 86 function eval_date($matches)
168 87 {
169 88 return current_time($matches[1]);
@@ -181,184 +100,71 @@
181 100 }
182 101 $vdo_annotate_code = str_replace('{ip}', $_SERVER['REMOTE_ADDR'], $vdo_annotate_code);
183 102 $vdo_annotate_code = preg_replace_callback('/\{date\.([^\}]+)\}/', "eval_date", $vdo_annotate_code);
184 103 $vdo_annotate_code = apply_filters('vdocipher_annotate_postprocess', $vdo_annotate_code);
185 - // Add annotate code to $otp_post_array, which will be
186 - // converted to Json and then sent as POST body to API endpoint
187 104 if (!$no_annotate) {
188 - $otp_post_array["annotate"] = $vdo_annotate_code;
105 + $anno = array("annotate" => $vdo_annotate_code);
189 106 }
190 107 }
191 - // OTP is requested via vdo_otp function
192 - $OTP_Response = vdo_otp($video, $otp_post_array);
193 - $OTP = $OTP_Response->otp;
194 - $playbackInfo = $OTP_Response->playbackInfo;
195 -
108 + $OTP = vdo_send("otp", $params, $anno);
109 + $OTP = json_decode($OTP);
196 110 if (is_null($OTP)) {
197 111 $output = "<span id='vdo$OTP' style='background:#555555;color:#FFFFFF'><h4>Video not found</h4></span>";
198 112 return $output;
199 113 }
114 + $OTP = $OTP->otp;
200 115
201 - // Version, legacy, for flash only
202 116 $version = 0;
203 117 if (isset($atts['version'])) {
204 118 $version = $atts['version'];
205 119 }
206 -
207 - // Video Embed version is retrieved from options table or from shortcode attribute
208 - if ((get_option('vdo_embed_version')) == false) {
209 - update_option('vdo_embed_version', VDOCIPHER_PLAYER_VERSION);
120 + $output = "<div id='vdo$OTP' style='height:$height;width:$width;max-width:100%' ></div>";
121 + $output .= "<script> (function(v,i,d,e,o){v[o]=v[o]||{}; v[o].add = v[o].add || function V(a){".
122 + " (v[o].d=v[o].d||[]).push(a);};";
123 + $output .= "if(!v[o].l) { v[o].l=1*new Date(); a=i.createElement(d), m=i.getElementsByTagName(d)[0]; a.async=1; ".
124 + "a.src=e; m.parentNode.insertBefore(a,m);}";
125 + $output .= " })(window,document,'script','//de122v0opjemw.cloudfront.net/vdo.js','vdo'); vdo.add({ ";
126 + $output .= "o: '$OTP', ";
127 + if ($version == 32) {
128 + $output .= "version: '$version' ";
210 129 }
211 - if (!$vdo_version) {
212 - $vdo_embed_version_str = get_option('vdo_embed_version');
213 - } else {
214 - $vdo_embed_version_str = $vdo_version;
215 - }
216 -
217 - // Video Player theme, update and as shortcode attribute
218 - if ((get_option('vdo_player_theme')) == false) {
219 - update_option('vdo_player_theme', '9ae8bbe8dd964ddc9bdb932cca1cb59a');
220 - }
221 - if (!$vdo_theme) {
222 - $vdo_player_theme = get_option('vdo_player_theme');
223 - } else {
224 - $vdo_player_theme = $vdo_theme;
225 - }
226 -
227 - // tech override custom names
228 - switch ($player_tech) {
229 - case "flash":
230 - $player_tech = "*,-dash";
231 - break;
232 - case "nohtml5":
233 - $player_tech = "*,-dash";
234 - break;
235 - case "noflash":
236 - $player_tech = "*,-hss";
237 - break;
238 - case "nozen":
239 - $player_tech = "*,-zen";
240 - break;
241 - case "noios":
242 - $player_tech = "*,-hlse";
243 - break;
244 - default:
245 - break;
246 - }
247 -
248 - // Old Embed Code
249 - if ($vdo_embed_version_str === '0.5') {
250 - $output = "<div id='vdo$OTP' style='height:$height;width:$width;max-width:100%' ></div>";
251 - $output .= "<script> (function(v,i,d,e,o){v[o]=v[o]||{}; v[o].add = v[o].add || function V(a){".
252 - " (v[o].d=v[o].d||[]).push(a);};";
253 - $output .= "if(!v[o].l) { v[o].l=1*new Date();a=i.createElement(d),m=i.getElementsByTagName(d)[0];a.async=1;".
254 - "a.src=e; m.parentNode.insertBefore(a,m);}";
255 - $output .= " })(window,document,'script','//de122v0opjemw.cloudfront.net/vdo.js','vdo'); vdo.add({ ";
256 - $output .= "o: '$OTP', ";
257 - if ($version == 32) {
258 - $output .= "version: '$version' ";
259 - }
260 - $output .= "}); </script>";
261 - } else {
262 - //New embed code
263 - if ($player_tech === '') {
264 - if (get_option('vdo_watermark_flash_html') === 'flash') {
265 - $player_tech = "*,-dash";
266 - }
267 - }
268 - $output = "<div id='vdo$OTP' style='height:$height;width:$width;max-width:100%' ></div>";
269 - $output .= "<script>(function(v,i,d,e,o){v[o]=v[o]||{}; v[o].add = v[o].add || function V(a){".
270 - "(v[o].d=v[o].d||[]).push(a);};";
271 - $output .= "if(!v[o].l) { v[o].l=1*new Date(); a=i.createElement(d), m=i.getElementsByTagName(d)[0];";
272 - $output .= "a.async=1; a.src=e; m.parentNode.insertBefore(a,m);}";
273 - $output .= "})(window,document,'script','https://d1z78r8i505acl.cloudfront.net/playerAssets/";
274 - $output .= "$vdo_embed_version_str";
275 - $output .= "/vdo.js','vdo');";
276 - $output .= "vdo.add({";
277 - $output .= "otp: '$OTP',";
278 - $output .= "playbackInfo: '$playbackInfo',";
279 - $output .= "theme: '$vdo_player_theme',";
280 - $output .= "plugins: [{";
281 - $output .= "name: 'keyboard',";
282 - $output .= "options: {";
283 - $output .= "preset: 'default',";
284 - $output .= "bindings: {";
285 - $output .= "'Left' : (player) => player.seek(player.currentTime - 15),";
286 - $output .= "'Right' : (player) => player.seek(player.currentTime + 15),";
287 - $output .= "},";
288 - $output .= "}";
289 - $output .= "}],";
290 - if ($player_tech !== '') {
291 - $output .= "techoverride: [" ;
292 - $techarray = explode(',', $player_tech);
293 - for ($i = 0; $i < sizeof($techarray); $i++) {
294 - $techStr = $techarray[$i];
295 - $output .= "'$techStr'";
296 - if ($i !== sizeof($techarray)-1) {
297 - $output .= ", ";
298 - }
299 - }
300 - $output .= "],";
301 - }
302 - $output .= "container: document.querySelector('#vdo$OTP'),});";
303 - $output .= "</script>";
304 - }
130 + $output .= "}); </script>";
305 131 return $output;
306 132 }
133 +
307 134 add_shortcode('vdo', 'vdo_shortcode');
308 -// VdoCipher Shortcode ends
309 135
310 -// adding the Settings link, starts
136 +
137 +/// adding the settings link
311 138 $plugin = plugin_basename(__FILE__);
312 139 add_filter("plugin_action_links_$plugin", 'vdo_settings_link');
313 140
314 141 function vdo_settings_link($links)
315 142 {
316 - $settings_link = '<a href="options-general.php?page=vdocipher">Settings</a>';
143 + $settings_link = '<a href="options-general.php?page=vdocipher.php">Settings</a>';
317 144 array_unshift($links, $settings_link);
318 145 return $links;
319 146 }
320 -// adding the Settings link, ends
321 147
322 -// add the menu item and register settings (3 functions), starts
148 +
149 +/// add the menu item and register settings
323 150 if (is_admin()) { // admin actions
151 + add_action('admin_menu', 'vdo_menu');
324 152 add_action('admin_init', 'register_vdo_settings');
325 - add_action('admin_menu', 'vdo_menu');
326 153 } else {
327 154 // non-admin enqueues, actions, and filters
328 155 }
329 156 function vdo_menu()
330 157 {
331 - add_menu_page(
332 - 'VdoCipher Options',
333 - 'VdoCipher',
334 - 'manage_options',
335 - 'vdocipher',
336 - 'vdo_options',
337 - plugin_dir_url(__FILE__).'images/logo.png'
338 - );
339 - add_submenu_page(
340 - null,
341 - 'Video Player Themes',
342 - 'CustomPlayer',
343 - 'manage_options',
344 - 'themesvdo',
345 - 'themesvdo'
346 - );
158 + add_options_page('VdoCipher Options', 'VdoCipher', 'manage_options', 'vdocipher', 'vdo_options');
347 159 }
348 -
349 -function themesvdo()
350 -{
351 - include('include/player_themes.php');
352 -}
353 -
354 160 function vdo_options()
355 161 {
356 162 if (!get_option('vdo_default_height')) {
357 - update_option('vdo_default_height', 'auto');
163 + update_option('vdo_default_height', '360');
358 164 }
359 165 if (!get_option('vdo_default_width')) {
360 - update_option('vdo_default_width', '1280');
166 + update_option('vdo_default_width', '640');
361 167 }
362 168 $vdo_client_key = get_option('vdo_client_key');
363 169 if (!$vdo_client_key && strlen($vdo_client_key) != 64) {
364 170 vdo_show_form_client_key();
@@ -375,103 +181,16 @@
375 181 register_setting('vdo_option-group', 'vdo_client_key');
376 182 register_setting('vdo_option-group', 'vdo_default_height');
377 183 register_setting('vdo_option-group', 'vdo_default_width');
378 184 register_setting('vdo_option-group', 'vdo_annotate_code');
379 - register_setting('vdo_option-group', 'vdo_embed_version');
380 - register_setting('vdo_option-group', 'vdo_player_theme');
381 - register_setting('vdo_option-group', 'vdo_watermark_flash_html');
382 - register_setting('vdo_option-group', 'vdo_plugin_version');
383 - register_setting('vdo_custom_theme', 'vdo_player_theme_options');
384 185 }
385 -// add the menu item and register settings (3 functions), ends
386 186
387 -// section for client key for new users
187 +/// adding a section for asking for the client key
388 188 function vdo_show_form_client_key()
389 189 {
390 190 include('include/setting_form.php');
391 191 }
392 -
393 -// Activation Hook starts
394 -function vdo_activate()
395 -{
396 - if ((get_option('vdo_default_height')) == false) {
397 - update_option('vdo_default_height', 'auto');
398 - }
399 - if ((get_option('vdo_default_width')) == false) {
400 - update_option('vdo_default_width', '1280');
401 - }
402 - //https://stackoverflow.com/a/2173318/5022684
403 - if ((get_option('vdo_embed_version')) == false) {
404 - update_option('vdo_embed_version', VDOCIPHER_PLAYER_VERSION);
405 - }
406 - if ((get_option('vdo_player_theme')) == false) {
407 - update_option('vdo_player_theme', '9ae8bbe8dd964ddc9bdb932cca1cb59a');
408 - }
409 - if ((get_option('vdo_watermark_flash_html')) == false) {
410 - update_option('vdo_watermark_flash_html', 'html5');
411 - }
412 - if ((get_option('vdo_plugin_version')) == false) {
413 - update_option('vdo_plugin_version', VDOCIPHER_PLUGIN_VERSION);
414 - }
415 -}
416 -register_activation_hook(__FILE__, 'vdo_activate');
417 -
418 -// Registering and specifying Gutenberg block
419 -function vdo_register_block()
420 -{
421 - if (!function_exists('register_block_type')) {
422 - return ;
423 - }
424 - wp_register_script(
425 - 'vdo-block-script',
426 - plugins_url('/include/block/dist/blocks.build.js', __FILE__),
427 - array('wp-blocks', 'wp-element', 'wp-editor', 'wp-i18n')
428 - );
429 - wp_register_style(
430 - 'vdo-block-base-style',
431 - plugins_url('/include/block/dist/blocks.style.build.css', __FILE__),
432 - array('wp-blocks')
433 - );
434 - wp_register_style(
435 - 'vdo-block-editor-style',
436 - plugins_url('/include/block/dist/blocks.editor.build.css', __FILE__),
437 - array('wp-edit-blocks')
438 - );
439 - register_block_type(
440 - 'vdo/block',
441 - array(
442 - 'editor_script'=>'vdo-block-script',
443 - 'editor_style'=>'vdo-block-editor-style',
444 - 'style'=>'vdo-block-base-style',
445 - 'attributes'=>array(
446 - 'id'=>array(
447 - 'type'=>'string',
448 - ),
449 - 'width'=>array(
450 - 'type'=>'string',
451 - 'default'=>get_option('vdo_default_width')
452 - ),
453 - 'height'=>array(
454 - 'type'=>'string',
455 - 'default'=>get_option('vdo_default_height')
456 - ),
457 - 'vdo_theme'=>array(
458 - 'type'=>'string',
459 - 'default'=>get_option('vdo_player_theme')
460 - ),
461 - 'vdo_version'=>array(
462 - 'type'=>'string',
463 - 'default'=>get_option('vdo_embed_version')
464 - ),
465 - ),
466 - 'render_callback'=>'vdo_shortcode'
467 - )
468 - );
469 -}
470 -
471 -add_action('init', 'vdo_register_block');
472 -
473 -// Deactivation Hook starts
192 +register_deactivation_hook(__FILE__, 'vdo_deactivate');
474 193 function vdo_deactivate()
475 194 {
476 195 delete_option('vdo_client_key');
477 196 delete_option('vdo_default_width');
@@ -476,17 +195,19 @@
476 195 delete_option('vdo_client_key');
477 196 delete_option('vdo_default_width');
478 197 delete_option('vdo_default_height');
479 198 delete_option('vdo_annotate_code');
480 - delete_option('vdo_embed_version');
481 - delete_option('vdo_player_theme');
482 - delete_option('vdo_watermark_flash_html');
483 - delete_option('vdo_player_theme_options');
484 - delete_option('vdo_plugin_version');
485 199 }
486 -register_deactivation_hook(__FILE__, 'vdo_deactivate');
487 -
488 -// Admin notice to configure plugin for new installs, starts
200 +function vdo_activate()
201 +{
202 + if (!get_option('vdo_default_height')) {
203 + update_option('vdo_default_height', '400');
204 + }
205 + if (!get_option('vdo_default_width')) {
206 + update_option('vdo_default_width', '640');
207 + }
208 +}
209 +register_activation_hook(__FILE__, 'vdo_activate');
489 210 function vdo_admin_notice()
490 211 {
491 212 if ((!get_option('vdo_client_key') || strlen(get_option('vdo_client_key')) != 64)
492 213 && basename($_SERVER['PHP_SELF']) == "plugins.php"