X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FUtil%2FJsonLD.php;h=fa169c00468c7c3c0d55b5e3b1b365159b65f5a5;hb=87db6dc48928d5ab7e3b5f901bc608aef008278e;hp=7692cefc2f38080dfef20bde809cd0224225663a;hpb=6f2fcd2859fe57446f39b44ad5ccac76839be57a;p=friendica.git diff --git a/src/Util/JsonLD.php b/src/Util/JsonLD.php index 7692cefc2f..fa169c0046 100644 --- a/src/Util/JsonLD.php +++ b/src/Util/JsonLD.php @@ -24,7 +24,6 @@ namespace Friendica\Util; use Friendica\Core\Cache\Duration; use Friendica\Core\Logger; use Exception; -use Friendica\Core\System; use Friendica\DI; /** @@ -42,6 +41,21 @@ class JsonLD */ public static function documentLoader($url) { + switch ($url) { + case 'https://w3id.org/security/v1': + $url = DI::baseUrl() . '/static/security-v1.jsonld'; + break; + case 'https://w3id.org/identity/v1': + $url = DI::baseUrl() . '/static/identity-v1.jsonld'; + break; + case 'https://www.w3.org/ns/activitystreams': + $url = DI::baseUrl() . '/static/activitystreams.jsonld'; + break; + default: + Logger::info('Got url', ['url' =>$url]); + break; + } + $recursion = 0; $x = debug_backtrace(); @@ -68,54 +82,6 @@ class JsonLD return $data; } - public static function removeSecurityLink(array $json) - { - if (!is_array($json['@context'])) { - return $json; - } - - if (($key = array_search('https://w3id.org/security/v1', $json['@context'])) !== false) { - unset($json['@context'][$key]); - $json['@context'] = array_values(array_filter($json['@context'])); - } - - return $json; - } - - public static function fixContext(array $json) - { - // Preparation for adding possibly missing content to the context - if (!empty($json['@context']) && is_string($json['@context'])) { - $json['@context'] = [$json['@context']]; - } - - if (($key = array_search('https://w3id.org/security/v1', $json['@context'])) !== false) { - unset($json['@context'][$key]); - $json['@context'] = array_values(array_filter($json['@context'])); - } - - $last_entry = count($json['@context']) - 1; - - $additional = [ - 'w3id' => 'https://w3id.org/security#', - 'signature' => 'w3id:signature', - 'RsaSignature2017' => 'w3id:RsaSignature2017', - 'created' => 'w3id:created', - 'creator' => 'w3id:creator', - 'nonce' => 'w3id:nonce', - 'signatureValue' => 'w3id:signatureValue', - 'publicKey' => 'w3id:publicKey', - 'publicKeyPem' => 'w3id:publicKeyPem']; - - if (is_array($json['@context'][$last_entry])) { - $json['@context'][$last_entry] = array_merge($json['@context'][$last_entry], $additional); - } else { - $json['@context'][] = $additional; - } - - return $json; - } - /** * Normalises a given JSON array * @@ -126,8 +92,6 @@ class JsonLD */ public static function normalize($json) { - $json = self::removeSecurityLink($json); - jsonld_set_document_loader('Friendica\Util\JsonLD::documentLoader'); $jsonobj = json_decode(json_encode($json, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)); @@ -162,12 +126,10 @@ class JsonLD */ public static function compact($json) { - $json = self::fixContext($json); - jsonld_set_document_loader('Friendica\Util\JsonLD::documentLoader'); $context = (object)['as' => 'https://www.w3.org/ns/activitystreams#', - 'w3id' => (object)['@id' => 'https://w3id.org/security#', '@type' => '@id'], + 'w3id' => 'https://w3id.org/security#', 'ldp' => (object)['@id' => 'http://www.w3.org/ns/ldp#', '@type' => '@id'], 'vcard' => (object)['@id' => 'http://www.w3.org/2006/vcard/ns#', '@type' => '@id'], 'dfrn' => (object)['@id' => 'http://purl.org/macgirvin/dfrn/1.0/', '@type' => '@id'], @@ -179,6 +141,17 @@ class JsonLD 'sc' => (object)['@id' => 'http://schema.org#', '@type' => '@id'], 'pt' => (object)['@id' => 'https://joinpeertube.org/ns#', '@type' => '@id']]; + // Preparation for adding possibly missing content to the context + if (!empty($json['@context']) && is_string($json['@context'])) { + $json['@context'] = [$json['@context']]; + } + + // Workaround for servers with missing context + // See issue https://github.com/nextcloud/social/issues/330 + if (!empty($json['@context']) && is_array($json['@context'])) { + $json['@context'][] = 'https://w3id.org/security/v1'; + } + // Trying to avoid memory problems with large content fields if (!empty($json['object']['source']['content'])) { $content = $json['object']['source']['content']; @@ -192,9 +165,7 @@ class JsonLD } catch (Exception $e) { $compacted = false; - Logger::error('compacting error', ['callstack' => System::callstack(20)]); - // Sooner or later we should log some details as well - but currently this leads to memory issues - // Logger::log('compacting error:' . substr(print_r($e, true), 0, 10000), Logger::DEBUG); + Logger::error('compacting error', ['line' => $e->getLine(), 'message' => $e->getMessage()]); } $json = json_decode(json_encode($compacted, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE), true);