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