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 +76 -225 1.231.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.23
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,55 +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 -// Function called to retrieve id for when title given, starts
20 -function vdo_retrieve_id($title) {
22 +function vdo_send($action, $params, $posts = array())
23 +{
21 24 $client_key = get_option('vdo_client_key');
22 25 if ($client_key == false || $client_key == "") {
23 - return "Plugin not configured. Please set the API key to embed videos.";
26 + return "Plugin not configured. Please set the key to embed videos.";
24 27 }
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
48 28
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(
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(
63 33 'method' => 'POST',
64 - 'headers' => $headers,
65 - 'body' => $otp_post_json
34 + 'body' => $posts
66 35 ));
67 36 if (is_wp_error($response)) {
68 37 $error_message = $response->get_error_message();
69 38 echo "VdoCipher: Something went wrong: $error_message";
@@ -68,14 +37,10 @@
68 37 $error_message = $response->get_error_message();
69 38 echo "VdoCipher: Something went wrong: $error_message";
70 39 return "";
71 40 }
72 - $OTP_Response = $response['body'];
73 - return json_decode($OTP_Response);
41 + return $response['body'];
74 42 }
75 -// Function called to get OTP, ends
76 -
77 -// VdoCipher Shortcode starts
78 43 function vdo_shortcode($atts)
79 44 {
80 45 extract(shortcode_atts(
81 46 array(
@@ -84,33 +49,40 @@
84 49 'height' => get_option('vdo_default_height') . "px",
85 50 'id' => 'id',
86 51 'no_annotate'=> false,
87 52 'version'=> 0,
88 - 'vdo_theme'=> false,
89 - 'player_tech'=> ''
90 53 ),
91 54 $atts
92 55 ));
93 - if ((get_option('vdo_default_height')) == 'auto') {
94 - $height = 'auto';
95 - }
96 56 if (!$atts['id']) {
97 57 if (!$atts['title']) {
98 58 return "Required argument id for embedded video not found.";
99 59 }
100 - else {
101 - $video = vdo_retrieve_id($title);
102 - if ($video == null) {
103 - return "404. Video not found.";
104 - }
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.";
105 72 }
106 - }
107 - else {
73 + $video = $video[0]->id;
74 + if ($video == null) {
75 + return "No video with given title found.";
76 + }
77 + } else {
108 78 $video = $id;
109 79 }
110 80
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);
81 + $params = array(
82 + 'video'=>$video
83 + );
84 + $anno = false;
113 85 if (!function_exists("eval_date")) {
114 86 function eval_date($matches)
115 87 {
116 88 return current_time($matches[1]);
@@ -118,8 +90,9 @@
118 90 }
119 91 if (get_option('vdo_annotate_code') != "") {
120 92 $current_user = wp_get_current_user();
121 93 $vdo_annotate_code = get_option('vdo_annotate_code');
94 + $vdo_annotate_code = apply_filters('vdocipher_annotate_preprocess', $vdo_annotate_code);
122 95 if (is_user_logged_in()) {
123 96 $vdo_annotate_code = str_replace('{name}', $current_user->display_name, $vdo_annotate_code);
124 97 $vdo_annotate_code = str_replace('{email}', $current_user->user_email, $vdo_annotate_code);
125 98 $vdo_annotate_code = str_replace('{username}', $current_user->user_login, $vdo_annotate_code);
@@ -126,169 +99,72 @@
126 99 $vdo_annotate_code = str_replace('{id}', $current_user->ID, $vdo_annotate_code);
127 100 }
128 101 $vdo_annotate_code = str_replace('{ip}', $_SERVER['REMOTE_ADDR'], $vdo_annotate_code);
129 102 $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
103 + $vdo_annotate_code = apply_filters('vdocipher_annotate_postprocess', $vdo_annotate_code);
131 104 if (!$no_annotate) {
132 - $otp_post_array["annotate"] = $vdo_annotate_code;
105 + $anno = array("annotate" => $vdo_annotate_code);
133 106 }
134 107 }
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 -
108 + $OTP = vdo_send("otp", $params, $anno);
109 + $OTP = json_decode($OTP);
140 110 if (is_null($OTP)) {
141 -
142 111 $output = "<span id='vdo$OTP' style='background:#555555;color:#FFFFFF'><h4>Video not found</h4></span>";
143 112 return $output;
144 113 }
114 + $OTP = $OTP->otp;
145 115
146 - // Version, legacy, for flash only
147 116 $version = 0;
148 117 if (isset($atts['version'])) {
149 118 $version = $atts['version'];
150 119 }
151 -
152 - // Video Embed version is updated
153 - if ((get_option('vdo_embed_version')) == false) {
154 - update_option('vdo_embed_version', '1.6.4');
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' ";
155 129 }
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 - }
130 + $output .= "}); </script>";
237 131 return $output;
238 132 }
133 +
239 134 add_shortcode('vdo', 'vdo_shortcode');
240 -// VdoCipher Shortcode ends
241 135
242 -// adding the Settings link, starts
136 +
137 +/// adding the settings link
243 138 $plugin = plugin_basename(__FILE__);
244 139 add_filter("plugin_action_links_$plugin", 'vdo_settings_link');
245 140
246 141 function vdo_settings_link($links)
247 142 {
248 - $settings_link = '<a href="options-general.php?page=vdocipher">Settings</a>';
143 + $settings_link = '<a href="options-general.php?page=vdocipher.php">Settings</a>';
249 144 array_unshift($links, $settings_link);
250 145 return $links;
251 146 }
252 -// adding the Settings link, ends
253 147
254 -// add the menu item and register settings (3 functions), starts
148 +
149 +/// add the menu item and register settings
255 150 if (is_admin()) { // admin actions
151 + add_action('admin_menu', 'vdo_menu');
256 152 add_action('admin_init', 'register_vdo_settings');
257 - add_action('admin_menu', 'vdo_menu');
258 153 } else {
259 154 // non-admin enqueues, actions, and filters
260 155 }
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 - );
156 +function vdo_menu()
157 +{
158 + add_options_page('VdoCipher Options', 'VdoCipher', 'manage_options', 'vdocipher', 'vdo_options');
278 159 }
279 -
280 -function themesvdo() {
281 - include('include/player_themes.php');
282 -}
283 -
284 160 function vdo_options()
285 161 {
286 162 if (!get_option('vdo_default_height')) {
287 - update_option('vdo_default_height', 'auto');
163 + update_option('vdo_default_height', '360');
288 164 }
289 165 if (!get_option('vdo_default_width')) {
290 - update_option('vdo_default_width', '1280');
166 + update_option('vdo_default_width', '640');
291 167 }
292 168 $vdo_client_key = get_option('vdo_client_key');
293 169 if (!$vdo_client_key && strlen($vdo_client_key) != 64) {
294 170 vdo_show_form_client_key();
@@ -305,44 +181,16 @@
305 181 register_setting('vdo_option-group', 'vdo_client_key');
306 182 register_setting('vdo_option-group', 'vdo_default_height');
307 183 register_setting('vdo_option-group', 'vdo_default_width');
308 184 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 185 }
314 -// add the menu item and register settings (3 functions), ends
315 186
316 -// section for client key for new users
187 +/// adding a section for asking for the client key
317 188 function vdo_show_form_client_key()
318 189 {
319 190 include('include/setting_form.php');
320 191 }
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 - }
341 -}
342 -register_activation_hook(__FILE__, 'vdo_activate');
343 -
344 -// Deactivation Hook starts
192 +register_deactivation_hook(__FILE__, 'vdo_deactivate');
345 193 function vdo_deactivate()
346 194 {
347 195 delete_option('vdo_client_key');
348 196 delete_option('vdo_default_width');
@@ -347,16 +195,19 @@
347 195 delete_option('vdo_client_key');
348 196 delete_option('vdo_default_width');
349 197 delete_option('vdo_default_height');
350 198 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 199 }
356 -register_deactivation_hook(__FILE__, 'vdo_deactivate');
357 -
358 -// 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');
359 210 function vdo_admin_notice()
360 211 {
361 212 if ((!get_option('vdo_client_key') || strlen(get_option('vdo_client_key')) != 64)
362 213 && basename($_SERVER['PHP_SELF']) == "plugins.php"