+ /**
+ * @brief Check for valid DFRN data
+ *
+ * @param array $data DFRN data
+ *
+ * @return int Number of errors
+ */
+ public static function valid_dfrn($data) {
+ $errors = 0;
+ if(!isset($data['key']))
+ $errors ++;
+ if(!isset($data['dfrn-request']))
+ $errors ++;
+ if(!isset($data['dfrn-confirm']))
+ $errors ++;
+ if(!isset($data['dfrn-notify']))
+ $errors ++;
+ if(!isset($data['dfrn-poll']))
+ $errors ++;
+ return $errors;
+ }
+
+ /**
+ * @brief Fetch data from a DFRN profile page and via "noscrape"
+ *
+ * @param string $profile Link to the profile page
+ *
+ * @return array profile data
+ */
+ public static function profile($profile) {
+
+ $data = array();
+
+ logger("Check profile ".$profile, LOGGER_DEBUG);
+
+ // Fetch data via noscrape - this is faster
+ $noscrape = str_replace(array("/hcard/", "/profile/"), "/noscrape/", $profile);
+ $data = self::poll_noscrape($noscrape, $data);
+
+ if (!isset($data["notify"]) OR !isset($data["confirm"]) OR
+ !isset($data["request"]) OR !isset($data["poll"]) OR
+ !isset($data["poco"]) OR !isset($data["name"]) OR
+ !isset($data["photo"]))
+ $data = self::poll_hcard($profile, $data, true);
+
+ $prof_data = array();
+ $prof_data["addr"] = $data["addr"];
+ $prof_data["nick"] = $data["nick"];
+ $prof_data["dfrn-request"] = $data["request"];
+ $prof_data["dfrn-confirm"] = $data["confirm"];
+ $prof_data["dfrn-notify"] = $data["notify"];
+ $prof_data["dfrn-poll"] = $data["poll"];
+ $prof_data["dfrn-poco"] = $data["poco"];
+ $prof_data["photo"] = $data["photo"];
+ $prof_data["fn"] = $data["name"];
+ $prof_data["key"] = $data["pubkey"];
+
+ logger("Result for profile ".$profile.": ".print_r($prof_data, true), LOGGER_DEBUG);
+
+ return $prof_data;
+ }
+
+ /**
+ * @brief Check for DFRN contact
+ *
+ * @param array $webfinger Webfinger data
+ *
+ * @return array DFRN data
+ */