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 +162 -82 1.201.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.20
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,44 +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,
50 89 'player_tech'=> ''
51 90 ),
52 91 $atts
53 92 ));
54 - if((get_option('vdo_default_height')) == 'auto') {
55 - $height = 'auto';
93 + if ((get_option('vdo_default_height')) == 'auto') {
94 + $height = 'auto';
56 95 }
57 96 if (!$atts['id']) {
58 97 if (!$atts['title']) {
59 98 return "Required argument id for embedded video not found.";
60 99 }
61 - $params = array(
62 - 'search'=>array(
63 - 'title'=>$title
64 - ),
65 - 'page'=>1,
66 - 'limit'=>30,
67 - 'type'=>'json'
68 - );
69 - $video = vdo_send("videos", $params);
70 - $video = json_decode($video);
71 - if ($video == null) {
72 - return "404. Video not found.";
100 + else {
101 + $video = vdo_retrieve_id($title);
102 + if ($video == null) {
103 + return "404. Video not found.";
104 + }
73 105 }
74 - $video = $video[0]->id;
75 - if ($video == null) {
76 - return "No video with given title found.";
77 - }
78 - } else {
106 + }
107 + else {
79 108 $video = $id;
80 109 }
81 110
82 - $params = array(
83 - 'video'=>$video
84 - );
85 - $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);
86 113 if (!function_exists("eval_date")) {
87 114 function eval_date($matches)
88 115 {
89 116 return current_time($matches[1]);
@@ -101,34 +128,48 @@
101 128 }
102 129 $vdo_annotate_code = str_replace('{ip}', $_SERVER['REMOTE_ADDR'], $vdo_annotate_code);
103 130 $vdo_annotate_code = preg_replace_callback('/\{date\.([^\}]+)\}/', "eval_date", $vdo_annotate_code);
104 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
105 133 if (!$no_annotate) {
106 - $anno = array("annotate" => $vdo_annotate_code);
134 + $otp_post_array["annotate"] = $vdo_annotate_code;
107 135 }
108 136 }
109 - $OTP = vdo_send("otp", $params, $anno);
110 - $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 +
111 142 if (is_null($OTP)) {
143 +
112 144 $output = "<span id='vdo$OTP' style='background:#555555;color:#FFFFFF'><h4>Video not found</h4></span>";
113 145 return $output;
114 146 }
115 - $OTP = $OTP->otp;
116 147
148 + // Version, legacy, for flash only
117 149 $version = 0;
118 150 if (isset($atts['version'])) {
119 151 $version = $atts['version'];
120 152 }
153 +
154 + // Video Embed version is updated
121 155 if ((get_option('vdo_embed_version')) == false) {
122 - update_option('vdo_embed_version', '1.5.0');
156 + update_option('vdo_embed_version', '1.6.4');
123 157 }
158 + $vdo_embed_version_str = get_option('vdo_embed_version');
159 +
160 + // Video Player theme, update and as shortcode attribute
124 161 if ((get_option('vdo_player_theme')) == false) {
125 - update_option('vdo_player_theme','9ae8bbe8dd964ddc9bdb932cca1cb59a');
162 + update_option('vdo_player_theme', '9ae8bbe8dd964ddc9bdb932cca1cb59a');
126 163 }
127 - $vdo_embed_version_str = get_option('vdo_embed_version');
128 - $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 + }
129 170
130 - // tech override custom names start
171 + // tech override custom names
131 172 switch ($player_tech) {
132 173 case "flash":
133 174 $player_tech = "*,-dash";
134 175 break;
@@ -146,16 +187,15 @@
146 187 break;
147 188 default:
148 189 break;
149 190 }
150 - // tech override ends
151 191
152 192 // Old Embed Code
153 - if($vdo_embed_version_str === '0.5') {
193 + if ($vdo_embed_version_str === '0.5') {
154 194 $output = "<div id='vdo$OTP' style='height:$height;width:$width;max-width:100%' ></div>";
155 195 $output .= "<script> (function(v,i,d,e,o){v[o]=v[o]||{}; v[o].add = v[o].add || function V(a){".
156 196 " (v[o].d=v[o].d||[]).push(a);};";
157 - $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;".
158 198 "a.src=e; m.parentNode.insertBefore(a,m);}";
159 199 $output .= " })(window,document,'script','//de122v0opjemw.cloudfront.net/vdo.js','vdo'); vdo.add({ ";
160 200 $output .= "o: '$OTP', ";
161 201 if ($version == 32) {
@@ -161,13 +201,18 @@
161 201 if ($version == 32) {
162 202 $output .= "version: '$version' ";
163 203 }
164 204 $output .= "}); </script>";
165 - }
166 - //New embed code
167 - 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 + }
168 212 $output .= "<div id='vdo$OTP' style='height:$height;width:$width;max-width:100%' ></div>";
169 - $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);};";
170 215 $output .= "if(!v[o].l) { v[o].l=1*new Date(); a=i.createElement(d), m=i.getElementsByTagName(d)[0];";
171 216 $output .= "a.async=1; a.src=e; m.parentNode.insertBefore(a,m);}";
172 217 $output .= "})(window,document,'script','https://d1z78r8i505acl.cloudfront.net/playerAssets/";
173 218 $output .= "$vdo_embed_version_str";
@@ -173,20 +218,21 @@
173 218 $output .= "$vdo_embed_version_str";
174 219 $output .= "/vdo.js','vdo');";
175 220 $output .= "vdo.add({";
176 221 $output .= "otp: '$OTP',";
177 - $output .= "playbackInfo: btoa(JSON.stringify({";
178 - $output .= "videoId: '$video'})),";
222 + $output .= "playbackInfo: '$playbackInfo',";
179 223 $output .= "theme: '$vdo_player_theme',";
180 - if($player_tech !== ''){
181 - $output .= "techoverride: [" ;
182 - $techarray = explode(',', $player_tech);
183 - for($i = 0; $i < sizeof($techarray); $i++){
184 - $output .= "'$techarray[$i]'";
185 - if($i !== sizeof($techarray)-1)
186 - $output .= ", ";
187 - }
188 - $output .= "],";
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 .= "],";
189 235 }
190 236 $output .= "container: document.querySelector('#vdo$OTP'),});";
191 237 $output .= "</script>";
192 238 }
@@ -191,12 +237,12 @@
191 237 $output .= "</script>";
192 238 }
193 239 return $output;
194 240 }
195 -
196 241 add_shortcode('vdo', 'vdo_shortcode');
242 +// VdoCipher Shortcode ends
197 243
198 -/// adding the settings link
244 +// adding the Settings link, starts
199 245 $plugin = plugin_basename(__FILE__);
200 246 add_filter("plugin_action_links_$plugin", 'vdo_settings_link');
201 247
202 248 function vdo_settings_link($links)
@@ -204,20 +250,40 @@
204 250 $settings_link = '<a href="options-general.php?page=vdocipher">Settings</a>';
205 251 array_unshift($links, $settings_link);
206 252 return $links;
207 253 }
254 +// adding the Settings link, ends
208 255
209 -/// add the menu item and register settings
256 +// add the menu item and register settings (3 functions), starts
210 257 if (is_admin()) { // admin actions
258 + add_action('admin_init', 'register_vdo_settings');
211 259 add_action('admin_menu', 'vdo_menu');
212 - add_action('admin_init', 'register_vdo_settings');
213 260 } else {
214 261 // non-admin enqueues, actions, and filters
215 262 }
216 -function vdo_menu()
217 -{
218 - add_menu_page('VdoCipher Options', 'VdoCipher', 'manage_options', 'vdocipher', 'vdo_options', plugin_dir_url(__FILE__).'images/logo.png');
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 + );
219 280 }
281 +
282 +function themesvdo() {
283 + include('include/player_themes.php');
284 +}
285 +
220 286 function vdo_options()
221 287 {
222 288 if (!get_option('vdo_default_height')) {
223 289 update_option('vdo_default_height', 'auto');
@@ -243,25 +309,20 @@
243 309 register_setting('vdo_option-group', 'vdo_default_width');
244 310 register_setting('vdo_option-group', 'vdo_annotate_code');
245 311 register_setting('vdo_option-group', 'vdo_embed_version');
246 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');
247 315 }
316 +// add the menu item and register settings (3 functions), ends
248 317
249 -/// adding a section for asking for the client key
318 +// section for client key for new users
250 319 function vdo_show_form_client_key()
251 320 {
252 321 include('include/setting_form.php');
253 322 }
254 -register_deactivation_hook(__FILE__, 'vdo_deactivate');
255 -function vdo_deactivate()
256 -{
257 - delete_option('vdo_client_key');
258 - delete_option('vdo_default_width');
259 - delete_option('vdo_default_height');
260 - delete_option('vdo_annotate_code');
261 - delete_option('vdo_embed_version');
262 - delete_option('vdo_player_theme');
263 -}
323 +
324 +// Activation Hook starts
264 325 function vdo_activate()
265 326 {
266 327 if ((get_option('vdo_default_height')) == false) {
267 328 update_option('vdo_default_height', 'auto');
@@ -270,15 +331,34 @@
270 331 update_option('vdo_default_width', '1280');
271 332 }
272 333 //https://stackoverflow.com/a/2173318/5022684
273 334 if ((get_option('vdo_embed_version')) == false) {
274 - update_option('vdo_embed_version', '1.5.0');
335 + update_option('vdo_embed_version', '1.6.4');
275 336 }
276 337 if ((get_option('vdo_player_theme')) == false) {
277 - update_option('vdo_player_theme','9ae8bbe8dd964ddc9bdb932cca1cb59a');
338 + update_option('vdo_player_theme', '9ae8bbe8dd964ddc9bdb932cca1cb59a');
278 339 }
340 + if ((get_option('vdo_watermark_flash_html')) == false) {
341 + update_option('vdo_watermark_flash_html', 'html5');
342 + }
279 343 }
280 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
281 361 function vdo_admin_notice()
282 362 {
283 363 if ((!get_option('vdo_client_key') || strlen(get_option('vdo_client_key')) != 64)
284 364 && basename($_SERVER['PHP_SELF']) == "plugins.php"