]> git.mxchange.org Git - friendica.git/commitdiff
Honor preference order in webfinger links
authorHypolite Petovan <hypolite@mrpetovan.com>
Sat, 10 Nov 2018 13:23:11 +0000 (08:23 -0500)
committerHypolite Petovan <hypolite@mrpetovan.com>
Sat, 10 Nov 2018 13:23:11 +0000 (08:23 -0500)
src/Network/Probe.php

index aa770b92eeb8a3d5f01b68f6da15ce9cdd25ca6a..16ae0eff1d98fe0a7afe47294da1062760e9340d 100644 (file)
@@ -979,7 +979,9 @@ class Probe
        {
                $hcard_url = "";
                $data = [];
-               foreach ($webfinger["links"] as $link) {
+               // The array is reversed to take into account the order of preference for same-rel links
+               // See: https://tools.ietf.org/html/rfc7033#section-4.4.4
+               foreach (array_reverse($webfinger["links"]) as $link) {
                        if (($link["rel"] == NAMESPACE_DFRN) && !empty($link["href"])) {
                                $data["network"] = Protocol::DFRN;
                        } elseif (($link["rel"] == NAMESPACE_FEED) && !empty($link["href"])) {
@@ -1182,7 +1184,9 @@ class Probe
        {
                $hcard_url = "";
                $data = [];
-               foreach ($webfinger["links"] as $link) {
+               // The array is reversed to take into account the order of preference for same-rel links
+               // See: https://tools.ietf.org/html/rfc7033#section-4.4.4
+               foreach (array_reverse($webfinger["links"]) as $link) {
                        if (($link["rel"] == "http://microformats.org/profile/hcard") && !empty($link["href"])) {
                                $hcard_url = $link["href"];
                        } elseif (($link["rel"] == "http://joindiaspora.com/seed_location") && !empty($link["href"])) {
@@ -1283,7 +1287,9 @@ class Probe
 
                $pubkey = "";
                if (is_array($webfinger["links"])) {
-                       foreach ($webfinger["links"] as $link) {
+                       // The array is reversed to take into account the order of preference for same-rel links
+                       // See: https://tools.ietf.org/html/rfc7033#section-4.4.4
+                       foreach (array_reverse($webfinger["links"]) as $link) {
                                if (($link["rel"] == "http://webfinger.net/rel/profile-page")
                                        && (defaults($link, "type", "") == "text/html")
                                        && ($link["href"] != "")
@@ -1447,7 +1453,9 @@ class Probe
        private static function pumpio($webfinger, $addr)
        {
                $data = [];
-               foreach ($webfinger["links"] as $link) {
+               // The array is reversed to take into account the order of preference for same-rel links
+               // See: https://tools.ietf.org/html/rfc7033#section-4.4.4
+               foreach (array_reverse($webfinger["links"]) as $link) {
                        if (($link["rel"] == "http://webfinger.net/rel/profile-page")
                                && (defaults($link, "type", "") == "text/html")
                                && ($link["href"] != "")