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
vdocipher / vdocipher.php

vdocipher.php in VdoCipher: Secure Video Player and Hosting 1.23, at vdocipher.php

375 lines 12.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Plugin Name: VdoCipher
4 * Plugin URI: https://www.vdocipher.com
5 * Description: Secured video hosting for wordpress
6 * Version: 1.23
7 * Author: VdoCipher
8 * Author URI: https://www.vdocipher.com
9 * License: GPL2
10 */
11
12 if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) {
13 header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');
14 exit("<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\r\n<html><head>\r\n<title>404 Not Found</title>\r\n".
15 "</head><body>\r\n<h1>Not Found</h1>\r\n<p>The requested URL " . $_SERVER['SCRIPT_NAME'] . " was not found on ".
16 "this server.</p>\r\n</body></html>");
17 }
18
19 // Function called to retrieve id for when title given, starts
20 function vdo_retrieve_id($title) {
21 $client_key = get_option('vdo_client_key');
22 if ($client_key == false || $client_key == "") {
23 return "Plugin not configured. Please set the API key to embed videos.";
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
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(
63 'method' => 'POST',
64 'headers' => $headers,
65 'body' => $otp_post_json
66 ));
67 if (is_wp_error($response)) {
68 $error_message = $response->get_error_message();
69 echo "VdoCipher: Something went wrong: $error_message";
70 return "";
71 }
72 $OTP_Response = $response['body'];
73 return json_decode($OTP_Response);
74 }
75 // Function called to get OTP, ends
76
77 // VdoCipher Shortcode starts
78 function vdo_shortcode($atts)
79 {
80 extract(shortcode_atts(
81 array(
82 'title' => 'TITLE_OF_VIDEO',
83 'width' => get_option('vdo_default_width') . "px",
84 'height' => get_option('vdo_default_height') . "px",
85 'id' => 'id',
86 'no_annotate'=> false,
87 'version'=> 0,
88 'vdo_theme'=> false,
89 'player_tech'=> ''
90 ),
91 $atts
92 ));
93 if ((get_option('vdo_default_height')) == 'auto') {
94 $height = 'auto';
95 }
96 if (!$atts['id']) {
97 if (!$atts['title']) {
98 return "Required argument id for embedded video not found.";
99 }
100 else {
101 $video = vdo_retrieve_id($title);
102 if ($video == null) {
103 return "404. Video not found.";
104 }
105 }
106 }
107 else {
108 $video = $id;
109 }
110
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);
113 if (!function_exists("eval_date")) {
114 function eval_date($matches)
115 {
116 return current_time($matches[1]);
117 }
118 }
119 if (get_option('vdo_annotate_code') != "") {
120 $current_user = wp_get_current_user();
121 $vdo_annotate_code = get_option('vdo_annotate_code');
122 if (is_user_logged_in()) {
123 $vdo_annotate_code = str_replace('{name}', $current_user->display_name, $vdo_annotate_code);
124 $vdo_annotate_code = str_replace('{email}', $current_user->user_email, $vdo_annotate_code);
125 $vdo_annotate_code = str_replace('{username}', $current_user->user_login, $vdo_annotate_code);
126 $vdo_annotate_code = str_replace('{id}', $current_user->ID, $vdo_annotate_code);
127 }
128 $vdo_annotate_code = str_replace('{ip}', $_SERVER['REMOTE_ADDR'], $vdo_annotate_code);
129 $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
131 if (!$no_annotate) {
132 $otp_post_array["annotate"] = $vdo_annotate_code;
133 }
134 }
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
140 if (is_null($OTP)) {
141
142 $output = "<span id='vdo$OTP' style='background:#555555;color:#FFFFFF'><h4>Video not found</h4></span>";
143 return $output;
144 }
145
146 // Version, legacy, for flash only
147 $version = 0;
148 if (isset($atts['version'])) {
149 $version = $atts['version'];
150 }
151
152 // Video Embed version is updated
153 if ((get_option('vdo_embed_version')) == false) {
154 update_option('vdo_embed_version', '1.6.4');
155 }
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 }
237 return $output;
238 }
239 add_shortcode('vdo', 'vdo_shortcode');
240 // VdoCipher Shortcode ends
241
242 // adding the Settings link, starts
243 $plugin = plugin_basename(__FILE__);
244 add_filter("plugin_action_links_$plugin", 'vdo_settings_link');
245
246 function vdo_settings_link($links)
247 {
248 $settings_link = '<a href="options-general.php?page=vdocipher">Settings</a>';
249 array_unshift($links, $settings_link);
250 return $links;
251 }
252 // adding the Settings link, ends
253
254 // add the menu item and register settings (3 functions), starts
255 if (is_admin()) { // admin actions
256 add_action('admin_init', 'register_vdo_settings');
257 add_action('admin_menu', 'vdo_menu');
258 } else {
259 // non-admin enqueues, actions, and filters
260 }
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 );
278 }
279
280 function themesvdo() {
281 include('include/player_themes.php');
282 }
283
284 function vdo_options()
285 {
286 if (!get_option('vdo_default_height')) {
287 update_option('vdo_default_height', 'auto');
288 }
289 if (!get_option('vdo_default_width')) {
290 update_option('vdo_default_width', '1280');
291 }
292 $vdo_client_key = get_option('vdo_client_key');
293 if (!$vdo_client_key && strlen($vdo_client_key) != 64) {
294 vdo_show_form_client_key();
295 return "";
296 }
297 if (!current_user_can('manage_options')) {
298 wp_die(__('You do not have sufficient permissions to access this page.'));
299 }
300 include('include/options.php');
301 }
302 function register_vdo_settings()
303 {
304 // whitelist options
305 register_setting('vdo_option-group', 'vdo_client_key');
306 register_setting('vdo_option-group', 'vdo_default_height');
307 register_setting('vdo_option-group', 'vdo_default_width');
308 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 }
314 // add the menu item and register settings (3 functions), ends
315
316 // section for client key for new users
317 function vdo_show_form_client_key()
318 {
319 include('include/setting_form.php');
320 }
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
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 function vdo_admin_notice()
360 {
361 if ((!get_option('vdo_client_key') || strlen(get_option('vdo_client_key')) != 64)
362 && basename($_SERVER['PHP_SELF']) == "plugins.php"
363 ) {
364 ?>
365 <div class="error">
366 <p>
367 The VdoCipher plugin is not ready.
368 <a href="options-general.php?page=vdocipher">Click here to configure</a>
369 </p>
370 </div>
371 <?php
372 }
373 }
374 add_action('admin_notices', 'vdo_admin_notice');
375