]> git.mxchange.org Git - friendica.git/commitdiff
AP: Create a GUID out of an URL
authorMichael <heluecht@pirati.ca>
Sun, 19 Jan 2020 14:33:16 +0000 (14:33 +0000)
committerMichael <heluecht@pirati.ca>
Sun, 19 Jan 2020 14:33:16 +0000 (14:33 +0000)
src/Protocol/ActivityPub/Processor.php

index 89abac6c94b6e6e2f77518105739da81d1ecd371..cc5c90d3b8a05ba4d6aade8e1d8034c9ab7aec0c 100644 (file)
@@ -389,6 +389,26 @@ class Processor
                return $item;
        }
 
+       /**
+        * Generate a GUID out of an URL
+        *
+        * @param string $url message URL
+        * @return string with GUID
+        */
+       private static function getGUIDByURL(string $url)
+       {
+               $parsed = parse_url($url);
+
+               $host_hash = hash('crc32', $parsed['host']);
+
+               unset($parsed["scheme"]);
+               unset($parsed["host"]);
+
+               $path = implode("/", $parsed);
+
+               return $host_hash . '-'. hash('fnv164', $path) . '-'. hash('joaat', $path);
+       }
+
        /**
         * Creates an item post
         *
@@ -431,7 +451,7 @@ class Processor
 
                $item['created'] = DateTimeFormat::utc($activity['published']);
                $item['edited'] = DateTimeFormat::utc($activity['updated']);
-               $item['guid'] = $activity['diaspora:guid'];
+               $item['guid'] = $activity['diaspora:guid'] ?: self::getGUIDByURL($item['uri']);
 
                $item = self::processContent($activity, $item);
                if (empty($item)) {