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