]> git.mxchange.org Git - friendica.git/blobdiff - src/Network/Probe.php
Add Contact Object
[friendica.git] / src / Network / Probe.php
index d27ce18512847eedc337c6e18b04da1b241f4084..b758956123826cbca02dbd7b1c07af196017044f 100644 (file)
@@ -10,13 +10,13 @@ namespace Friendica\Network;
 
 use Friendica\App;
 use Friendica\Core\System;
+use Friendica\Core\Cache;
 use Friendica\Core\Config;
+use Friendica\Database\DBM;
+use Friendica\Object\Profile;
+use Friendica\Util\XML;
 
 use dba;
-use dbm;
-use Cache;
-use xml;
-
 use DomXPath;
 use DOMDocument;
 
@@ -124,7 +124,7 @@ class Probe {
                        return array();
                }
 
-               $links = xml::element_to_array($xrd);
+               $links = XML::element_to_array($xrd);
                if (!isset($links["xrd"]["link"])) {
                        logger("No xrd data found for ".$host, LOGGER_DEBUG);
                        return array();
@@ -309,7 +309,7 @@ class Probe {
        public static function uri($uri, $network = "", $uid = -1, $cache = true) {
 
                if ($cache) {
-                       $result = Cache::get("probe_url:".$network.":".$uri);
+                       $result = Cache::get("Probe::uri:".$network.":".$uri);
                        if (!is_null($result)) {
                                return $result;
                        }
@@ -361,7 +361,7 @@ class Probe {
 
                // Only store into the cache if the value seems to be valid
                if (!in_array($data['network'], array(NETWORK_PHANTOM, NETWORK_MAIL))) {
-                       Cache::set("probe_url:".$network.":".$uri, $data, CACHE_DAY);
+                       Cache::set("Probe::uri:".$network.":".$uri, $data, CACHE_DAY);
 
                        /// @todo temporary fix - we need a real contact update function that updates only changing fields
                        /// The biggest problem is the avatar picture that could have a reduced image size.
@@ -397,7 +397,7 @@ class Probe {
                                        }
                                }
 
-                               $fields['updated'] = dbm::date();
+                               $fields['updated'] = DBM::date();
 
                                $condition = array('nurl' => normalise_link($data["url"]));
 
@@ -420,7 +420,7 @@ class Probe {
                                                'confirm' => $data['confirm'],
                                                'poco' => $data['poco'],
                                                'network' => $data['network'],
-                                               'success_update' => dbm::date());
+                                               'success_update' => DBM::date());
 
                                $fieldnames = array();
 
@@ -706,7 +706,7 @@ class Probe {
                        return false;
                }
 
-               $xrd_arr = xml::element_to_array($xrd);
+               $xrd_arr = XML::element_to_array($xrd);
                if (!isset($xrd_arr["xrd"]["link"])) {
                        logger("No XML webfinger links for ".$url, LOGGER_DEBUG);
                        return false;
@@ -778,6 +778,10 @@ class Probe {
                        $data["nick"] = $json["nick"];
                }
 
+               if (!empty($json["guid"])) {
+                       $data["guid"] = $json["guid"];
+               }
+
                if (!empty($json["comm"])) {
                        $data["community"] = $json["comm"];
                }
@@ -905,7 +909,6 @@ class Probe {
         * @return array DFRN data
         */
        private static function dfrn($webfinger) {
-
                $hcard_url = "";
                $data = array();
                foreach ($webfinger["links"] as $link) {
@@ -937,7 +940,9 @@ class Probe {
 
                if (is_array($webfinger["aliases"])) {
                        foreach ($webfinger["aliases"] as $alias) {
-                               if (substr($alias, 0, 5) == 'acct:') {
+                               if (normalise_link($alias) != normalise_link($data["url"]) && ! strstr($alias, "@")) {
+                                       $data["alias"] = $alias;
+                               } elseif (substr($alias, 0, 5) == 'acct:') {
                                        $data["addr"] = substr($alias, 5);
                                }
                        }
@@ -1093,7 +1098,6 @@ class Probe {
         * @return array Diaspora data
         */
        private static function diaspora($webfinger) {
-
                $hcard_url = "";
                $data = array();
                foreach ($webfinger["links"] as $link) {
@@ -1129,10 +1133,16 @@ class Probe {
                        foreach ($webfinger["aliases"] as $alias) {
                                if (normalise_link($alias) != normalise_link($data["url"]) && ! strstr($alias, "@")) {
                                        $data["alias"] = $alias;
+                               } elseif (substr($alias, 0, 5) == 'acct:') {
+                                       $data["addr"] = substr($alias, 5);
                                }
                        }
                }
 
+               if (!empty($webfinger["subject"]) && (substr($webfinger["subject"], 0, 5) == 'acct:')) {
+                       $data["addr"] = substr($webfinger["subject"], 5);
+               }
+
                // Fetch further information from the hcard
                $data = self::pollHcard($hcard_url, $data);
 
@@ -1171,17 +1181,20 @@ class Probe {
         */
        private static function ostatus($webfinger, $short = false) {
                $data = array();
+
                if (is_array($webfinger["aliases"])) {
                        foreach ($webfinger["aliases"] as $alias) {
-                               if (strstr($alias, "@")) {
+                               if (strstr($alias, "@") && !strstr(normalise_link($alias), "http://")) {
                                        $data["addr"] = str_replace('acct:', '', $alias);
                                }
                        }
                }
 
-               if (is_string($webfinger["subject"]) && strstr($webfinger["subject"], "@")) {
+               if (is_string($webfinger["subject"]) && strstr($webfinger["subject"], "@") &&
+                       !strstr(normalise_link($webfinger["subject"]), "http://")) {
                        $data["addr"] = str_replace('acct:', '', $webfinger["subject"]);
                }
+
                $pubkey = "";
                if (is_array($webfinger["links"])) {
                        foreach ($webfinger["links"] as $link) {
@@ -1488,7 +1501,7 @@ class Probe {
 
                        $r = q("SELECT * FROM `mailacct` WHERE `uid` = %d AND `server` != '' LIMIT 1", intval($uid));
 
-                       if (dbm::is_result($x) && dbm::is_result($r)) {
+                       if (DBM::is_result($x) && DBM::is_result($r)) {
                                $mailbox = construct_mailbox_name($r[0]);
                                $password = '';
                                openssl_private_decrypt(hex2bin($r[0]['pass']), $password, $x[0]['prvkey']);