PluginProbe
VdoCipher: Secure Video Player and Hosting / 1.21
VdoCipher: Secure Video Player and Hosting v1.21
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.21, at vdocipher.php

316 lines 10.9 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: http://www.vdocipher.com
5 * Description: Secured video hosting for wordpress
6 * Version: 1.21
7 * Author: VdoCipher
8 * Author URI: http://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 vdo_send($action, $params, $posts = array())
20 {
21 $client_key = get_option('vdo_client_key');
22 if ($client_key == false || $client_key == "") {
23 return "Plugin not configured. Please set the key to embed videos.";
24 }
25
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(
30 'method' => 'POST',
31 'body' => $posts
32 ));
33 if (is_wp_error($response)) {
34 $error_message = $response->get_error_message();
35 echo "VdoCipher: Something went wrong: $error_message";
36 return "";
37 }
38 return $response['body'];
39 }
40 function vdo_shortcode($atts)
41 {
42 extract(shortcode_atts(
43 array(
44 'title' => 'TITLE_OF_VIDEO',
45 'width' => get_option('vdo_default_width') . "px",
46 'height' => get_option('vdo_default_height') . "px",
47 'id' => 'id',
48 'no_annotate'=> false,
49 'version'=> 0,
50 'player_tech'=> ''
51 ),
52 $atts
53 ));
54 if ((get_option('vdo_default_height')) == 'auto') {
55 $height = 'auto';
56 }
57 if (!$atts['id']) {
58 if (!$atts['title']) {
59 return "Required argument id for embedded video not found.";
60 }
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.";
73 }
74 $video = $video[0]->id;
75 if ($video == null) {
76 return "No video with given title found.";
77 }
78 } else {
79 $video = $id;
80 }
81
82 $params = array(
83 'video'=>$video
84 );
85 $anno = false;
86 if (!function_exists("eval_date")) {
87 function eval_date($matches)
88 {
89 return current_time($matches[1]);
90 }
91 }
92 if (get_option('vdo_annotate_code') != "") {
93 $current_user = wp_get_current_user();
94 $vdo_annotate_code = get_option('vdo_annotate_code');
95 $vdo_annotate_code = apply_filters('vdocipher_annotate_preprocess', $vdo_annotate_code);
96 if (is_user_logged_in()) {
97 $vdo_annotate_code = str_replace('{name}', $current_user->display_name, $vdo_annotate_code);
98 $vdo_annotate_code = str_replace('{email}', $current_user->user_email, $vdo_annotate_code);
99 $vdo_annotate_code = str_replace('{username}', $current_user->user_login, $vdo_annotate_code);
100 $vdo_annotate_code = str_replace('{id}', $current_user->ID, $vdo_annotate_code);
101 }
102 $vdo_annotate_code = str_replace('{ip}', $_SERVER['REMOTE_ADDR'], $vdo_annotate_code);
103 $vdo_annotate_code = preg_replace_callback('/\{date\.([^\}]+)\}/', "eval_date", $vdo_annotate_code);
104 $vdo_annotate_code = apply_filters('vdocipher_annotate_postprocess', $vdo_annotate_code);
105 if (!$no_annotate) {
106 $anno = array("annotate" => $vdo_annotate_code);
107 }
108 }
109 $OTP = vdo_send("otp", $params, $anno);
110 $OTP = json_decode($OTP);
111 if (is_null($OTP)) {
112 $output = "<span id='vdo$OTP' style='background:#555555;color:#FFFFFF'><h4>Video not found</h4></span>";
113 return $output;
114 }
115 $OTP = $OTP->otp;
116
117 $version = 0;
118 if (isset($atts['version'])) {
119 $version = $atts['version'];
120 }
121 if ((get_option('vdo_embed_version')) == false) {
122 update_option('vdo_embed_version', '1.6.4');
123 }
124 if ((get_option('vdo_player_theme')) == false) {
125 update_option('vdo_player_theme', '9ae8bbe8dd964ddc9bdb932cca1cb59a');
126 }
127 $vdo_embed_version_str = get_option('vdo_embed_version');
128 $vdo_player_theme = get_option('vdo_player_theme');
129
130 // tech override custom names start
131 switch ($player_tech) {
132 case "flash":
133 $player_tech = "*,-dash";
134 break;
135 case "nohtml5":
136 $player_tech = "*,-dash";
137 break;
138 case "noflash":
139 $player_tech = "*,-hss";
140 break;
141 case "nozen":
142 $player_tech = "*,-zen";
143 break;
144 case "noios":
145 $player_tech = "*,-hlse";
146 break;
147 default:
148 break;
149 }
150 // tech override ends
151
152 // Old Embed Code
153 if ($vdo_embed_version_str === '0.5') {
154 $output = "<div id='vdo$OTP' style='height:$height;width:$width;max-width:100%' ></div>";
155 $output .= "<script> (function(v,i,d,e,o){v[o]=v[o]||{}; v[o].add = v[o].add || function V(a){".
156 " (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;".
158 "a.src=e; m.parentNode.insertBefore(a,m);}";
159 $output .= " })(window,document,'script','//de122v0opjemw.cloudfront.net/vdo.js','vdo'); vdo.add({ ";
160 $output .= "o: '$OTP', ";
161 if ($version == 32) {
162 $output .= "version: '$version' ";
163 }
164 $output .= "}); </script>";
165 } else {
166 //New embed code
167 if ($player_tech === '') {
168 if (get_option(vdo_watermark_flash_html) === 'flash') {
169 $player_tech = "*,-dash";
170 }
171 }
172 $output .= "<div id='vdo$OTP' style='height:$height;width:$width;max-width:100%' ></div>";
173 $output .= "<script>(function(v,i,d,e,o){v[o]=v[o]||{}; v[o].add = v[o].add || function V(a){".
174 "(v[o].d=v[o].d||[]).push(a);};";
175 $output .= "if(!v[o].l) { v[o].l=1*new Date(); a=i.createElement(d), m=i.getElementsByTagName(d)[0];";
176 $output .= "a.async=1; a.src=e; m.parentNode.insertBefore(a,m);}";
177 $output .= "})(window,document,'script','https://d1z78r8i505acl.cloudfront.net/playerAssets/";
178 $output .= "$vdo_embed_version_str";
179 $output .= "/vdo.js','vdo');";
180 $output .= "vdo.add({";
181 $output .= "otp: '$OTP',";
182 $output .= "playbackInfo: btoa(JSON.stringify({";
183 $output .= "videoId: '$video'})),";
184 $output .= "theme: '$vdo_player_theme',";
185 if ($player_tech !== '') {
186 $output .= "techoverride: [" ;
187 $techarray = explode(',', $player_tech);
188 for ($i = 0; $i < sizeof($techarray); $i++) {
189 $techStr = $techarray[$i];
190 $output .= "'$techStr'";
191 if ($i !== sizeof($techarray)-1) {
192 $output .= ", ";
193 }
194 }
195 $output .= "],";
196 }
197 $output .= "container: document.querySelector('#vdo$OTP'),});";
198 $output .= "</script>";
199 }
200 return $output;
201 }
202
203 add_shortcode('vdo', 'vdo_shortcode');
204
205 /// adding the settings link
206 $plugin = plugin_basename(__FILE__);
207 add_filter("plugin_action_links_$plugin", 'vdo_settings_link');
208
209 function vdo_settings_link($links)
210 {
211 $settings_link = '<a href="options-general.php?page=vdocipher">Settings</a>';
212 array_unshift($links, $settings_link);
213 return $links;
214 }
215
216 /// add the menu item and register settings
217 if (is_admin()) { // admin actions
218 add_action('admin_menu', 'vdo_menu');
219 add_action('admin_init', 'register_vdo_settings');
220 } else {
221 // non-admin enqueues, actions, and filters
222 }
223 function vdo_menu()
224 {
225 add_menu_page(
226 'VdoCipher Options',
227 'VdoCipher',
228 'manage_options',
229 'vdocipher',
230 'vdo_options',
231 plugin_dir_url(__FILE__).'images/logo.png'
232 );
233 }
234 function vdo_options()
235 {
236 if (!get_option('vdo_default_height')) {
237 update_option('vdo_default_height', 'auto');
238 }
239 if (!get_option('vdo_default_width')) {
240 update_option('vdo_default_width', '1280');
241 }
242 $vdo_client_key = get_option('vdo_client_key');
243 if (!$vdo_client_key && strlen($vdo_client_key) != 64) {
244 vdo_show_form_client_key();
245 return "";
246 }
247 if (!current_user_can('manage_options')) {
248 wp_die(__('You do not have sufficient permissions to access this page.'));
249 }
250 include('include/options.php');
251 }
252 function register_vdo_settings()
253 {
254 // whitelist options
255 register_setting('vdo_option-group', 'vdo_client_key');
256 register_setting('vdo_option-group', 'vdo_default_height');
257 register_setting('vdo_option-group', 'vdo_default_width');
258 register_setting('vdo_option-group', 'vdo_annotate_code');
259 register_setting('vdo_option-group', 'vdo_embed_version');
260 register_setting('vdo_option-group', 'vdo_player_theme');
261 register_setting('vdo_option-group', 'vdo_watermark_flash_html');
262 }
263
264 /// adding a section for asking for the client key
265 function vdo_show_form_client_key()
266 {
267 include('include/setting_form.php');
268 }
269 register_deactivation_hook(__FILE__, 'vdo_deactivate');
270 function vdo_deactivate()
271 {
272 delete_option('vdo_client_key');
273 delete_option('vdo_default_width');
274 delete_option('vdo_default_height');
275 delete_option('vdo_annotate_code');
276 delete_option('vdo_embed_version');
277 delete_option('vdo_player_theme');
278 delete_option('vdo_watermark_flash_html');
279 }
280 function vdo_activate()
281 {
282 if ((get_option('vdo_default_height')) == false) {
283 update_option('vdo_default_height', 'auto');
284 }
285 if ((get_option('vdo_default_width')) == false) {
286 update_option('vdo_default_width', '1280');
287 }
288 //https://stackoverflow.com/a/2173318/5022684
289 if ((get_option('vdo_embed_version')) == false) {
290 update_option('vdo_embed_version', '1.6.4');
291 }
292 if ((get_option('vdo_player_theme')) == false) {
293 update_option('vdo_player_theme', '9ae8bbe8dd964ddc9bdb932cca1cb59a');
294 }
295 if ((get_option('vdo_watermark_flash_html')) == false) {
296 update_option('vdo_watermark_flash_html', 'html5');
297 }
298 }
299 register_activation_hook(__FILE__, 'vdo_activate');
300 function vdo_admin_notice()
301 {
302 if ((!get_option('vdo_client_key') || strlen(get_option('vdo_client_key')) != 64)
303 && basename($_SERVER['PHP_SELF']) == "plugins.php"
304 ) {
305 ?>
306 <div class="error">
307 <p>
308 The VdoCipher plugin is not ready.
309 <a href="options-general.php?page=vdocipher">Click here to configure</a>
310 </p>
311 </div>
312 <?php
313 }
314 }
315 add_action('admin_notices', 'vdo_admin_notice');
316