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
← All changes | vdocipher.php +277 -152 1.51.21 View file →
@@ -2,189 +2,314 @@
2 2 /**
3 3 * Plugin Name: VdoCipher
4 4 * Plugin URI: http://www.vdocipher.com
5 5 * Description: Secured video hosting for wordpress
6 - * Version: 1.5
6 + * Version: 1.21
7 7 * Author: VdoCipher
8 8 * Author URI: http://www.vdocipher.com
9 9 * License: GPL2
10 10 */
11 11
12 -
13 12 if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) {
14 13 header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');
15 - exit("<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\r\n<html><head>\r\n<title>404 Not Found</title>\r\n</head><body>\r\n<h1>Not Found</h1>\r\n<p>The requested URL " . $_SERVER['SCRIPT_NAME'] . " was not found on this server.</p>\r\n</body></html>");
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>");
16 17 }
17 18
18 -function vdo_send($action, $params, $posts = false){
19 - $client_key = get_option('vdo_client_key');
20 - if ($client_key == false || $client_key == "") {
21 - return "Plugin not configured. Please set the key to embed videos.";
22 - }
23 - $curl = curl_init();
24 - curl_setopt($curl, CURLOPT_FAILONERROR, true);
25 - curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
26 - curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
27 - curl_setopt($curl, CURLOPT_VERBOSE, true);
28 - curl_setopt($curl, CURLOPT_FAILONERROR, false);
29 - //curl_setopt($curl, CURLOPT_PROXY, "xxxxxxxxxxxxxxxxx:xxxx");
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 + }
30 25
31 - $getData = http_build_query($params);
32 - curl_setopt($curl, CURLOPT_POST, true);
33 - $postData = "clientSecretKey=$client_key";
34 - if ($posts) {
35 - $postData .= "&". $posts;
36 - }
37 - curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
38 - $url = "http://api.vdocipher.com/v2/$action/?$getData";
39 - curl_setopt($curl, CURLOPT_URL,$url);
40 - $html = curl_exec($curl);
41 - if (!$html) {
42 - echo curl_error($curl);
43 - }
44 - curl_close($curl);
45 - return $html;
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'];
46 39 }
47 -function vdo_shortcode( $atts ) {
48 - extract( shortcode_atts(
49 - array(
50 - 'title' => 'TITLE_OF_VIDEO',
51 - 'width' => get_option('vdo_default_width'),
52 - 'height' => get_option('vdo_default_height'),
53 - 'id' => 'id',
54 - 'no_annotate'=> false
55 - ), $atts )
56 - );
57 - if(!$atts['id']){
58 - if(!$atts['title'])
59 - return "Required argument id for embedded video not found.";
60 - $params = array(
61 - 'search'=>array(
62 - 'title'=>$title
63 - ),
64 - 'page'=>1,
65 - 'limit'=>30,
66 - 'type'=>'json'
67 - );
68 - $video = vdo_send("videos", $params);
69 - $video = json_decode($video);
70 - if($video == null)
71 - return "404. Video not found.";
72 - $video = $video[0]->id;
73 - if ($video == null) {
74 - return "No video with given title found.";
75 - }
76 - }
77 - else
78 - $video = $id;
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 + }
79 81
80 - $params = array(
81 - 'video'=>$video
82 - );
83 - $anno = false;
84 - if (!function_exists("eval_date")) {
85 - function eval_date($matches){
86 - return date($matches[1]);
87 - }
88 - }
89 - if (get_option('vdo_annotate_code') != "") {
90 - $current_user = wp_get_current_user();
91 - $vdo_annotate_code = get_option('vdo_annotate_code');
92 - if (is_user_logged_in()) {
93 - $vdo_annotate_code = str_replace('{name}', $current_user->display_name , $vdo_annotate_code);
94 - $vdo_annotate_code = str_replace('{email}', $current_user->user_email , $vdo_annotate_code);
95 - $vdo_annotate_code = str_replace('{username}', $current_user->user_login , $vdo_annotate_code);
96 - $vdo_annotate_code = str_replace('{id}', $current_user->ID , $vdo_annotate_code);
97 - }
98 - $vdo_annotate_code = str_replace('{ip}', $_SERVER['REMOTE_ADDR'] , $vdo_annotate_code);
99 - $vdo_annotate_code = preg_replace_callback('/\{date\.([^\}]+)\}/', "eval_date" , $vdo_annotate_code);
100 - if(!$no_annotate)
101 - $anno = "annotate=". urlencode($vdo_annotate_code);
102 - }
103 - $OTP = vdo_send("otp", $params, $anno);
104 - $OTP = json_decode($OTP);
105 - if(is_null($OTP)){
106 - $output = "<span id='vdo$OTP' style='background:#555555;color:#FFFFFF'><h4>Video not found</h4></span>";
107 - return $output;
108 - }
109 - $OTP = $OTP->otp;
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;
110 116
111 - $output = "<span id='vdo$OTP'></span>";
112 - $output .= "<script src='https://de122v0opjemw.cloudfront.net/utils/playerInit.php?otp=$OTP&height=$height&width=$width&'></script>";
113 - return $output;
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;
114 201 }
115 202
116 -add_shortcode( 'vdo', 'vdo_shortcode' );
203 +add_shortcode('vdo', 'vdo_shortcode');
117 204
118 -
119 205 /// adding the settings link
120 -$plugin = plugin_basename(__FILE__);
121 -add_filter("plugin_action_links_$plugin", 'vdo_settings_link' );
206 +$plugin = plugin_basename(__FILE__);
207 +add_filter("plugin_action_links_$plugin", 'vdo_settings_link');
122 208
123 -function vdo_settings_link($links) {
124 - $settings_link = '<a href="options-general.php?page=vdocipher.php">Settings</a>';
125 - array_unshift($links, $settings_link);
126 - return $links;
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;
127 214 }
128 215
129 -
130 216 /// add the menu item and register settings
131 -if ( is_admin() ){ // admin actions
132 - add_action( 'admin_menu', 'vdo_menu' );
133 - add_action( 'admin_init', 'register_vdo_settings' );
217 +if (is_admin()) { // admin actions
218 + add_action('admin_menu', 'vdo_menu');
219 + add_action('admin_init', 'register_vdo_settings');
134 220 } else {
135 - // non-admin enqueues, actions, and filters
221 + // non-admin enqueues, actions, and filters
136 222 }
137 -function vdo_menu(){
138 - add_options_page( 'VdoCipher Options', 'VdoCipher', 'manage_options', 'vdocipher', 'vdo_options' );
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 + );
139 233 }
140 -function vdo_options(){
141 - if (!get_option('vdo_default_height'))
142 - update_option('vdo_default_height', '360');
143 - if (!get_option('vdo_default_width'))
144 - update_option('vdo_default_width', '640');
145 - $vdo_client_key = get_option('vdo_client_key');
146 - if (!$vdo_client_key && strlen($vdo_client_key) != 64) {
147 - vdo_show_form_client_key();
148 - return "";
149 - }
150 - if ( !current_user_can( 'manage_options' ) ) {
151 - wp_die( __( 'You do not have sufficient permissions to access this page.' ) );
152 - }
153 - include('include/options.php');
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');
154 251 }
155 -function register_vdo_settings() { // whitelist options
156 - register_setting( 'vdo_option-group', 'vdo_client_key' );
157 - register_setting( 'vdo_option-group', 'vdo_default_height' );
158 - register_setting( 'vdo_option-group', 'vdo_default_width' );
159 - register_setting( 'vdo_option-group', 'vdo_annotate_code' );
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');
160 262 }
161 263
162 264 /// adding a section for asking for the client key
163 -function vdo_show_form_client_key(){
164 - include('include/setting_form.php');
265 +function vdo_show_form_client_key()
266 +{
267 + include('include/setting_form.php');
165 268 }
166 269 register_deactivation_hook(__FILE__, 'vdo_deactivate');
167 -function vdo_deactivate(){
168 - delete_option( 'vdo_client_key' );
169 - delete_option('vdo_default_width');
170 - delete_option('vdo_default_height');
171 - delete_option('vdo_annotate_code');
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');
172 279 }
173 -function vdo_activate() {
174 - if (!get_option('vdo_default_height'))
175 - update_option('vdo_default_height', '400');
176 - if (!get_option('vdo_default_width'))
177 - update_option('vdo_default_width', '640');
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 + }
178 298 }
179 -register_activation_hook( __FILE__, 'vdo_activate' );
180 -function vdo_admin_notice() {
181 - if((!get_option('vdo_client_key') || strlen(get_option('vdo_client_key')) != 64) && basename($_SERVER['PHP_SELF']) == "plugins.php" ){
182 - ?>
183 - <div class="error">
184 - <p>The VdoCipher plugin is not ready. <a href="options-general.php?page=vdocipher">Click here to configure</a>
185 - </p>
186 - </div>
187 - <?php
188 - }
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 + }
189 314 }
190 -add_action( 'admin_notices', 'vdo_admin_notice' );
315 +add_action('admin_notices', 'vdo_admin_notice');