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

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

377 lines 13.0 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.24
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 $vdo_annotate_code = apply_filters('vdocipher_annotate_preprocess', $vdo_annotate_code);
123 if (is_user_logged_in()) {
124 $vdo_annotate_code = str_replace('{name}', $current_user->display_name, $vdo_annotate_code);
125 $vdo_annotate_code = str_replace('{email}', $current_user->user_email, $vdo_annotate_code);
126 $vdo_annotate_code = str_replace('{username}', $current_user->user_login, $vdo_annotate_code);
127 $vdo_annotate_code = str_replace('{id}', $current_user->ID, $vdo_annotate_code);
128 }
129 $vdo_annotate_code = str_replace('{ip}', $_SERVER['REMOTE_ADDR'], $vdo_annotate_code);
130 $vdo_annotate_code = preg_replace_callback('/\{date\.([^\}]+)\}/', "eval_date", $vdo_annotate_code);
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
133 if (!$no_annotate) {
134 $otp_post_array["annotate"] = $vdo_annotate_code;
135 }
136 }
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
142 if (is_null($OTP)) {
143
144 $output = "<span id='vdo$OTP' style='background:#555555;color:#FFFFFF'><h4>Video not found</h4></span>";
145 return $output;
146 }
147
148 // Version, legacy, for flash only
149 $version = 0;
150 if (isset($atts['version'])) {
151 $version = $atts['version'];
152 }
153
154 // Video Embed version is updated
155 if ((get_option('vdo_embed_version')) == false) {
156 update_option('vdo_embed_version', '1.6.4');
157 }
158 $vdo_embed_version_str = get_option('vdo_embed_version');
159
160 // Video Player theme, update and as shortcode attribute
161 if ((get_option('vdo_player_theme')) == false) {
162 update_option('vdo_player_theme', '9ae8bbe8dd964ddc9bdb932cca1cb59a');
163 }
164 if(!$vdo_theme){
165 $vdo_player_theme = get_option('vdo_player_theme');
166 }
167 else {
168 $vdo_player_theme = $vdo_theme;
169 }
170
171 // tech override custom names
172 switch ($player_tech) {
173 case "flash":
174 $player_tech = "*,-dash";
175 break;
176 case "nohtml5":
177 $player_tech = "*,-dash";
178 break;
179 case "noflash":
180 $player_tech = "*,-hss";
181 break;
182 case "nozen":
183 $player_tech = "*,-zen";
184 break;
185 case "noios":
186 $player_tech = "*,-hlse";
187 break;
188 default:
189 break;
190 }
191
192 // Old Embed Code
193 if ($vdo_embed_version_str === '0.5') {
194 $output = "<div id='vdo$OTP' style='height:$height;width:$width;max-width:100%' ></div>";
195 $output .= "<script> (function(v,i,d,e,o){v[o]=v[o]||{}; v[o].add = v[o].add || function V(a){".
196 " (v[o].d=v[o].d||[]).push(a);};";
197 $output .= "if(!v[o].l) { v[o].l=1*new Date();a=i.createElement(d),m=i.getElementsByTagName(d)[0];a.async=1;".
198 "a.src=e; m.parentNode.insertBefore(a,m);}";
199 $output .= " })(window,document,'script','//de122v0opjemw.cloudfront.net/vdo.js','vdo'); vdo.add({ ";
200 $output .= "o: '$OTP', ";
201 if ($version == 32) {
202 $output .= "version: '$version' ";
203 }
204 $output .= "}); </script>";
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 }
212 $output .= "<div id='vdo$OTP' style='height:$height;width:$width;max-width:100%' ></div>";
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);};";
215 $output .= "if(!v[o].l) { v[o].l=1*new Date(); a=i.createElement(d), m=i.getElementsByTagName(d)[0];";
216 $output .= "a.async=1; a.src=e; m.parentNode.insertBefore(a,m);}";
217 $output .= "})(window,document,'script','https://d1z78r8i505acl.cloudfront.net/playerAssets/";
218 $output .= "$vdo_embed_version_str";
219 $output .= "/vdo.js','vdo');";
220 $output .= "vdo.add({";
221 $output .= "otp: '$OTP',";
222 $output .= "playbackInfo: '$playbackInfo',";
223 $output .= "theme: '$vdo_player_theme',";
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 .= "],";
235 }
236 $output .= "container: document.querySelector('#vdo$OTP'),});";
237 $output .= "</script>";
238 }
239 return $output;
240 }
241 add_shortcode('vdo', 'vdo_shortcode');
242 // VdoCipher Shortcode ends
243
244 // adding the Settings link, starts
245 $plugin = plugin_basename(__FILE__);
246 add_filter("plugin_action_links_$plugin", 'vdo_settings_link');
247
248 function vdo_settings_link($links)
249 {
250 $settings_link = '<a href="options-general.php?page=vdocipher">Settings</a>';
251 array_unshift($links, $settings_link);
252 return $links;
253 }
254 // adding the Settings link, ends
255
256 // add the menu item and register settings (3 functions), starts
257 if (is_admin()) { // admin actions
258 add_action('admin_init', 'register_vdo_settings');
259 add_action('admin_menu', 'vdo_menu');
260 } else {
261 // non-admin enqueues, actions, and filters
262 }
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 );
280 }
281
282 function themesvdo() {
283 include('include/player_themes.php');
284 }
285
286 function vdo_options()
287 {
288 if (!get_option('vdo_default_height')) {
289 update_option('vdo_default_height', 'auto');
290 }
291 if (!get_option('vdo_default_width')) {
292 update_option('vdo_default_width', '1280');
293 }
294 $vdo_client_key = get_option('vdo_client_key');
295 if (!$vdo_client_key && strlen($vdo_client_key) != 64) {
296 vdo_show_form_client_key();
297 return "";
298 }
299 if (!current_user_can('manage_options')) {
300 wp_die(__('You do not have sufficient permissions to access this page.'));
301 }
302 include('include/options.php');
303 }
304 function register_vdo_settings()
305 {
306 // whitelist options
307 register_setting('vdo_option-group', 'vdo_client_key');
308 register_setting('vdo_option-group', 'vdo_default_height');
309 register_setting('vdo_option-group', 'vdo_default_width');
310 register_setting('vdo_option-group', 'vdo_annotate_code');
311 register_setting('vdo_option-group', 'vdo_embed_version');
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');
315 }
316 // add the menu item and register settings (3 functions), ends
317
318 // section for client key for new users
319 function vdo_show_form_client_key()
320 {
321 include('include/setting_form.php');
322 }
323
324 // Activation Hook starts
325 function vdo_activate()
326 {
327 if ((get_option('vdo_default_height')) == false) {
328 update_option('vdo_default_height', 'auto');
329 }
330 if ((get_option('vdo_default_width')) == false) {
331 update_option('vdo_default_width', '1280');
332 }
333 //https://stackoverflow.com/a/2173318/5022684
334 if ((get_option('vdo_embed_version')) == false) {
335 update_option('vdo_embed_version', '1.6.4');
336 }
337 if ((get_option('vdo_player_theme')) == false) {
338 update_option('vdo_player_theme', '9ae8bbe8dd964ddc9bdb932cca1cb59a');
339 }
340 if ((get_option('vdo_watermark_flash_html')) == false) {
341 update_option('vdo_watermark_flash_html', 'html5');
342 }
343 }
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
361 function vdo_admin_notice()
362 {
363 if ((!get_option('vdo_client_key') || strlen(get_option('vdo_client_key')) != 64)
364 && basename($_SERVER['PHP_SELF']) == "plugins.php"
365 ) {
366 ?>
367 <div class="error">
368 <p>
369 The VdoCipher plugin is not ready.
370 <a href="options-general.php?page=vdocipher">Click here to configure</a>
371 </p>
372 </div>
373 <?php
374 }
375 }
376 add_action('admin_notices', 'vdo_admin_notice');
377