]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Resolve relative URLs (assuming URI.Base==notice URL)
authorMikael Nordfeldth <mmn@hethane.se>
Fri, 26 Feb 2016 13:46:26 +0000 (14:46 +0100)
committerMikael Nordfeldth <mmn@hethane.se>
Fri, 26 Feb 2016 13:46:26 +0000 (14:46 +0100)
The real way to do this would be to get the xml:base property from
the Atom feed but it's probably not there in any posts we see today.

classes/Notice.php
lib/util.php

index 892f2be30ea0908893333c269e14de381e11ddba..2bae300115d3eece1bf24f8123276bb1a6ecbf55 100644 (file)
@@ -854,8 +854,8 @@ class Notice extends Managed_DataObject
         if (mb_strlen($content)===0 && !is_null($actobj)) {
             $content = mb_strlen($actobj->content) ? $actobj->content : $actobj->summary;
         }
-        // Strip out any bad HTML from $content
-        $stored->rendered = common_purify($content);
+        // Strip out any bad HTML from $content. URI.Base is used to sort out relative URLs.
+        $stored->rendered = common_purify($content, ['URI.Base' => $stored->url ?: null]);
         $stored->content  = common_strip_html($stored->getRendered(), true, true);
         if (trim($stored->content) === '') {
             // TRANS: Error message when the plain text content of a notice has zero length.
index f029eb429d264ab4d77eb4947c249d21b98d5097..9f9b3f66d4111aa80917f3e78e47506564dfe78f 100644 (file)
@@ -580,7 +580,7 @@ function common_canonical_email($email)
     return $email;
 }
 
-function common_purify($html)
+function common_purify($html, array $args=array())
 {
     require_once INSTALLDIR.'/extlib/HTMLPurifier/HTMLPurifier.auto.php';
 
@@ -588,6 +588,10 @@ function common_purify($html)
     $cfg->set('Attr.AllowedRel', ['bookmark', 'directory', 'enclosure', 'home', 'license', 'nofollow', 'payment', 'tag']);  // http://microformats.org/wiki/rel
     $cfg->set('HTML.ForbiddenAttributes', array('style'));  // id, on* etc. are already filtered by default
     $cfg->set('URI.AllowedSchemes', array_fill_keys(common_url_schemes(), true));
+    if (isset($args['URI.Base'])) {
+        $cfg->set('URI.Base', $args['URI.Base']);   // if null this is like unsetting it I presume
+        $cfg->set('URI.MakeAbsolute', !is_null($args['URI.Base']));   // if we have a URI base, convert relative URLs to absolute ones.
+    }
 
     // Remove more elements than what the default filter removes, default in GNU social are remotely
     // linked resources such as img, video, audio