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

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

297 lines 10.4 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.20
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.5.0');
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 }
166 //New embed code
167 else {
168 $output .= "<div id='vdo$OTP' style='height:$height;width:$width;max-width:100%' ></div>";
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);};";
170 $output .= "if(!v[o].l) { v[o].l=1*new Date(); a=i.createElement(d), m=i.getElementsByTagName(d)[0];";
171 $output .= "a.async=1; a.src=e; m.parentNode.insertBefore(a,m);}";
172 $output .= "})(window,document,'script','https://d1z78r8i505acl.cloudfront.net/playerAssets/";
173 $output .= "$vdo_embed_version_str";
174 $output .= "/vdo.js','vdo');";
175 $output .= "vdo.add({";
176 $output .= "otp: '$OTP',";
177 $output .= "playbackInfo: btoa(JSON.stringify({";
178 $output .= "videoId: '$video'})),";
179 $output .= "theme: '$vdo_player_theme',";
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 .= "],";
189 }
190 $output .= "container: document.querySelector('#vdo$OTP'),});";
191 $output .= "</script>";
192 }
193 return $output;
194 }
195
196 add_shortcode('vdo', 'vdo_shortcode');
197
198 /// adding the settings link
199 $plugin = plugin_basename(__FILE__);
200 add_filter("plugin_action_links_$plugin", 'vdo_settings_link');
201
202 function vdo_settings_link($links)
203 {
204 $settings_link = '<a href="options-general.php?page=vdocipher">Settings</a>';
205 array_unshift($links, $settings_link);
206 return $links;
207 }
208
209 /// add the menu item and register settings
210 if (is_admin()) { // admin actions
211 add_action('admin_menu', 'vdo_menu');
212 add_action('admin_init', 'register_vdo_settings');
213 } else {
214 // non-admin enqueues, actions, and filters
215 }
216 function vdo_menu()
217 {
218 add_menu_page('VdoCipher Options', 'VdoCipher', 'manage_options', 'vdocipher', 'vdo_options', plugin_dir_url(__FILE__).'images/logo.png');
219 }
220 function vdo_options()
221 {
222 if (!get_option('vdo_default_height')) {
223 update_option('vdo_default_height', 'auto');
224 }
225 if (!get_option('vdo_default_width')) {
226 update_option('vdo_default_width', '1280');
227 }
228 $vdo_client_key = get_option('vdo_client_key');
229 if (!$vdo_client_key && strlen($vdo_client_key) != 64) {
230 vdo_show_form_client_key();
231 return "";
232 }
233 if (!current_user_can('manage_options')) {
234 wp_die(__('You do not have sufficient permissions to access this page.'));
235 }
236 include('include/options.php');
237 }
238 function register_vdo_settings()
239 {
240 // whitelist options
241 register_setting('vdo_option-group', 'vdo_client_key');
242 register_setting('vdo_option-group', 'vdo_default_height');
243 register_setting('vdo_option-group', 'vdo_default_width');
244 register_setting('vdo_option-group', 'vdo_annotate_code');
245 register_setting('vdo_option-group', 'vdo_embed_version');
246 register_setting('vdo_option-group', 'vdo_player_theme');
247 }
248
249 /// adding a section for asking for the client key
250 function vdo_show_form_client_key()
251 {
252 include('include/setting_form.php');
253 }
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 }
264 function vdo_activate()
265 {
266 if ((get_option('vdo_default_height')) == false) {
267 update_option('vdo_default_height', 'auto');
268 }
269 if ((get_option('vdo_default_width')) == false) {
270 update_option('vdo_default_width', '1280');
271 }
272 //https://stackoverflow.com/a/2173318/5022684
273 if ((get_option('vdo_embed_version')) == false) {
274 update_option('vdo_embed_version', '1.5.0');
275 }
276 if ((get_option('vdo_player_theme')) == false) {
277 update_option('vdo_player_theme','9ae8bbe8dd964ddc9bdb932cca1cb59a');
278 }
279 }
280 register_activation_hook(__FILE__, 'vdo_activate');
281 function vdo_admin_notice()
282 {
283 if ((!get_option('vdo_client_key') || strlen(get_option('vdo_client_key')) != 64)
284 && basename($_SERVER['PHP_SELF']) == "plugins.php"
285 ) {
286 ?>
287 <div class="error">
288 <p>
289 The VdoCipher plugin is not ready.
290 <a href="options-general.php?page=vdocipher">Click here to configure</a>
291 </p>
292 </div>
293 <?php
294 }
295 }
296 add_action('admin_notices', 'vdo_admin_notice');
297