aboutsummaryrefslogtreecommitdiffstats
path: root/include/oembed.php
diff options
context:
space:
mode:
Diffstat (limited to 'include/oembed.php')
-rwxr-xr-xinclude/oembed.php28
1 files changed, 24 insertions, 4 deletions
diff --git a/include/oembed.php b/include/oembed.php
index aac7d15b4..c2bf0a0ed 100755
--- a/include/oembed.php
+++ b/include/oembed.php
@@ -134,7 +134,9 @@ function oembed_fetch_url($embedurl){
$txt = null;
// we should try to cache this and avoid a lookup on each render
- $zrl = is_matrix_url($embedurl);
+ $is_matrix = is_matrix_url($embedurl);
+
+ $zrl = ((get_config('system','oembed_zrl')) ? $is_matrix : false);
$furl = ((local_channel() && $zrl) ? zid($embedurl) : $embedurl);
@@ -149,7 +151,14 @@ function oembed_fetch_url($embedurl){
if ($action !== 'block') {
// try oembed autodiscovery
$redirects = 0;
- $result = z_fetch_url($furl, false, $redirects, array('timeout' => 30, 'accept_content' => "text/*", 'novalidate' => true ));
+ $result = z_fetch_url($furl, false, $redirects,
+ [
+ 'timeout' => 30,
+ 'accept_content' => "text/*",
+ 'novalidate' => true,
+ 'session' => ((local_channel() && $zrl) ? true : false)
+ ]
+ );
if($result['success'])
$html_text = $result['body'];
@@ -200,7 +209,7 @@ function oembed_fetch_url($embedurl){
if ($txt[0]!="{") $txt='{"type":"error"}';
- //save in cache
+ // save in cache
if(! get_config('system','oembed_cache_disable'))
Zlib\Cache::set('[' . App::$videowidth . '] ' . $furl, $txt);
@@ -215,7 +224,18 @@ function oembed_fetch_url($embedurl){
if($action === 'filter') {
if($j['html']) {
$orig = $j['html'];
- $allow_position = (($zrl) ? true : false);
+ $allow_position = (($is_matrix) ? true : false);
+
+ // some sites wrap their entire embed in an iframe
+ // which we will purify away and which we provide anyway.
+ // So if we see this, grab the frame src url and use that
+ // as the embed content - which will still need to be purified.
+
+ if(preg_match('#\<iframe(.*?)src\=[\'\"](.*?)[\'\"]#',$j['html'],$matches)) {
+ $x = z_fetch_url($matches[2]);
+ $j['html'] = $x['body'];
+ }
+
$j['html'] = purify_html($j['html'],$allow_position);
if($j['html'] != $orig) {
logger('oembed html was purified. original: ' . $orig . ' purified: ' . $j['html'], LOGGER_DEBUG, LOG_INFO);