PluginProbe
VdoCipher: Secure Video Player and Hosting / 1.23
VdoCipher: Secure Video Player and Hosting v1.23
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 -75 1.181.23 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.18
6 + * Version: 1.23
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]);
@@ -87,9 +118,8 @@
87 118 }
88 119 if (get_option('vdo_annotate_code') != "") {
89 120 $current_user = wp_get_current_user();
90 121 $vdo_annotate_code = get_option('vdo_annotate_code');
91 - $vdo_annotate_code = apply_filters('vdocipher_annotate_preprocess', $vdo_annotate_code);
92 122 if (is_user_logged_in()) {
93 123 $vdo_annotate_code = str_replace('{name}', $current_user->display_name, $vdo_annotate_code);
94 124 $vdo_annotate_code = str_replace('{email}', $current_user->user_email, $vdo_annotate_code);
95 125 $vdo_annotate_code = str_replace('{username}', $current_user->user_login, $vdo_annotate_code);
@@ -96,40 +126,74 @@
96 126 $vdo_annotate_code = str_replace('{id}', $current_user->ID, $vdo_annotate_code);
97 127 }
98 128 $vdo_annotate_code = str_replace('{ip}', $_SERVER['REMOTE_ADDR'], $vdo_annotate_code);
99 129 $vdo_annotate_code = preg_replace_callback('/\{date\.([^\}]+)\}/', "eval_date", $vdo_annotate_code);
100 - $vdo_annotate_code = apply_filters('vdocipher_annotate_postprocess', $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
101 131 if (!$no_annotate) {
102 - $anno = array("annotate" => $vdo_annotate_code);
132 + $otp_post_array["annotate"] = $vdo_annotate_code;
103 133 }
104 134 }
105 - $OTP = vdo_send("otp", $params, $anno);
106 - $OTP = json_decode($OTP);
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;
139 +
107 140 if (is_null($OTP)) {
141 +
108 142 $output = "<span id='vdo$OTP' style='background:#555555;color:#FFFFFF'><h4>Video not found</h4></span>";
109 143 return $output;
110 144 }
111 - $OTP = $OTP->otp;
112 145
146 + // Version, legacy, for flash only
113 147 $version = 0;
114 148 if (isset($atts['version'])) {
115 149 $version = $atts['version'];
116 150 }
151 +
152 + // Video Embed version is updated
117 153 if ((get_option('vdo_embed_version')) == false) {
118 - update_option('vdo_embed_version', '0.5');
154 + update_option('vdo_embed_version', '1.6.4');
119 155 }
156 + $vdo_embed_version_str = get_option('vdo_embed_version');
157 +
158 + // Video Player theme, update and as shortcode attribute
120 159 if ((get_option('vdo_player_theme')) == false) {
121 - update_option('vdo_player_theme','9ae8bbe8dd964ddc9bdb932cca1cb59a');
160 + update_option('vdo_player_theme', '9ae8bbe8dd964ddc9bdb932cca1cb59a');
122 161 }
123 - $vdo_embed_version_str = get_option('vdo_embed_version');
124 - $vdo_player_theme = get_option('vdo_player_theme');
162 + if(!$vdo_theme){
163 + $vdo_player_theme = get_option('vdo_player_theme');
164 + }
165 + else {
166 + $vdo_player_theme = $vdo_theme;
167 + }
125 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 +
126 190 // Old Embed Code
127 - if($vdo_embed_version_str === '0.5') {
191 + if ($vdo_embed_version_str === '0.5') {
128 192 $output = "<div id='vdo$OTP' style='height:$height;width:$width;max-width:100%' ></div>";
129 193 $output .= "<script> (function(v,i,d,e,o){v[o]=v[o]||{}; v[o].add = v[o].add || function V(a){".
130 194 " (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; ".
195 + $output .= "if(!v[o].l) { v[o].l=1*new Date();a=i.createElement(d),m=i.getElementsByTagName(d)[0];a.async=1;".
132 196 "a.src=e; m.parentNode.insertBefore(a,m);}";
133 197 $output .= " })(window,document,'script','//de122v0opjemw.cloudfront.net/vdo.js','vdo'); vdo.add({ ";
134 198 $output .= "o: '$OTP', ";
135 199 if ($version == 32) {
@@ -135,13 +199,18 @@
135 199 if ($version == 32) {
136 200 $output .= "version: '$version' ";
137 201 }
138 202 $output .= "}); </script>";
139 - }
140 - //New embed code
141 - else {
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 + }
142 210 $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);};";
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);};";
144 213 $output .= "if(!v[o].l) { v[o].l=1*new Date(); a=i.createElement(d), m=i.getElementsByTagName(d)[0];";
145 214 $output .= "a.async=1; a.src=e; m.parentNode.insertBefore(a,m);}";
146 215 $output .= "})(window,document,'script','https://d1z78r8i505acl.cloudfront.net/playerAssets/";
147 216 $output .= "$vdo_embed_version_str";
@@ -147,20 +216,31 @@
147 216 $output .= "$vdo_embed_version_str";
148 217 $output .= "/vdo.js','vdo');";
149 218 $output .= "vdo.add({";
150 219 $output .= "otp: '$OTP',";
151 - $output .= "playbackInfo: btoa(JSON.stringify({";
152 - $output .= "videoId: '$video'})),";
220 + $output .= "playbackInfo: '$playbackInfo',";
153 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 + }
154 234 $output .= "container: document.querySelector('#vdo$OTP'),});";
155 235 $output .= "</script>";
156 236 }
157 237 return $output;
158 238 }
159 -
160 239 add_shortcode('vdo', 'vdo_shortcode');
240 +// VdoCipher Shortcode ends
161 241
162 -/// adding the settings link
242 +// adding the Settings link, starts
163 243 $plugin = plugin_basename(__FILE__);
164 244 add_filter("plugin_action_links_$plugin", 'vdo_settings_link');
165 245
166 246 function vdo_settings_link($links)
@@ -168,27 +248,47 @@
168 248 $settings_link = '<a href="options-general.php?page=vdocipher">Settings</a>';
169 249 array_unshift($links, $settings_link);
170 250 return $links;
171 251 }
252 +// adding the Settings link, ends
172 253
173 -/// add the menu item and register settings
254 +// add the menu item and register settings (3 functions), starts
174 255 if (is_admin()) { // admin actions
256 + add_action('admin_init', 'register_vdo_settings');
175 257 add_action('admin_menu', 'vdo_menu');
176 - add_action('admin_init', 'register_vdo_settings');
177 258 } else {
178 259 // non-admin enqueues, actions, and filters
179 260 }
180 -function vdo_menu()
181 -{
182 - add_menu_page('VdoCipher Options', 'VdoCipher', 'manage_options', 'vdocipher', 'vdo_options');
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 + );
183 278 }
279 +
280 +function themesvdo() {
281 + include('include/player_themes.php');
282 +}
283 +
184 284 function vdo_options()
185 285 {
186 286 if (!get_option('vdo_default_height')) {
187 - update_option('vdo_default_height', '360');
287 + update_option('vdo_default_height', 'auto');
188 288 }
189 289 if (!get_option('vdo_default_width')) {
190 - update_option('vdo_default_width', '640');
290 + update_option('vdo_default_width', '1280');
191 291 }
192 292 $vdo_client_key = get_option('vdo_client_key');
193 293 if (!$vdo_client_key && strlen($vdo_client_key) != 64) {
194 294 vdo_show_form_client_key();
@@ -207,42 +307,56 @@
207 307 register_setting('vdo_option-group', 'vdo_default_width');
208 308 register_setting('vdo_option-group', 'vdo_annotate_code');
209 309 register_setting('vdo_option-group', 'vdo_embed_version');
210 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');
211 313 }
314 +// add the menu item and register settings (3 functions), ends
212 315
213 -/// adding a section for asking for the client key
316 +// section for client key for new users
214 317 function vdo_show_form_client_key()
215 318 {
216 319 include('include/setting_form.php');
217 320 }
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 -}
321 +
322 +// Activation Hook starts
228 323 function vdo_activate()
229 324 {
230 325 if ((get_option('vdo_default_height')) == false) {
231 - update_option('vdo_default_height', '360');
326 + update_option('vdo_default_height', 'auto');
232 327 }
233 328 if ((get_option('vdo_default_width')) == false) {
234 - update_option('vdo_default_width', '640');
329 + update_option('vdo_default_width', '1280');
235 330 }
236 331 //https://stackoverflow.com/a/2173318/5022684
237 332 if ((get_option('vdo_embed_version')) == false) {
238 - update_option('vdo_embed_version', '0.5');
333 + update_option('vdo_embed_version', '1.6.4');
239 334 }
240 335 if ((get_option('vdo_player_theme')) == false) {
241 - update_option('vdo_player_theme','9ae8bbe8dd964ddc9bdb932cca1cb59a');
336 + update_option('vdo_player_theme', '9ae8bbe8dd964ddc9bdb932cca1cb59a');
242 337 }
338 + if ((get_option('vdo_watermark_flash_html')) == false) {
339 + update_option('vdo_watermark_flash_html', 'html5');
340 + }
243 341 }
244 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');
355 +}
356 +register_deactivation_hook(__FILE__, 'vdo_deactivate');
357 +
358 +// Admin notice to configure plugin for new installs, starts
245 359 function vdo_admin_notice()
246 360 {
247 361 if ((!get_option('vdo_client_key') || strlen(get_option('vdo_client_key')) != 64)
248 362 && basename($_SERVER['PHP_SELF']) == "plugins.php"