<?php
/**
- * @file src/Network/Probe.php
+ * @copyright Copyright (C) 2020, Friendica
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ *
*/
-namespace Friendica\Network;
-/**
- * @file src/Network/Probe.php
- * Functions for probing URL
- */
+namespace Friendica\Network;
use DOMDocument;
use DomXPath;
/**
* This class contain functions for probing URL
- *
*/
class Probe
{
private static $baseurl;
private static $istimeout;
+ /**
+ * Remove stuff from an URI that doesn't belong there
+ *
+ * @param string $URI
+ * @return string Cleaned URI
+ */
+ public static function cleanURI(string $URI)
+ {
+ // At first remove leading and trailing junk
+ $URI = trim($URI, "@#?:/ \t\n\r\0\x0B");
+
+ $parts = parse_url($URI);
+
+ if (empty($parts['scheme'])) {
+ return $URI;
+ }
+
+ // Remove the URL fragment, since these shouldn't be part of any profile URL
+ unset($parts['fragment']);
+
+ $URI = Network::unparseURL($parts);
+
+ return $URI;
+ }
+
/**
* Rearrange the array so that it always has the same order
*
private static function rearrangeData($data)
{
$fields = ["name", "nick", "guid", "url", "addr", "alias", "photo", "account-type",
- "community", "keywords", "location", "about", "gender", "hide",
+ "community", "keywords", "location", "about", "hide",
"batch", "notify", "poll", "request", "confirm", "poco",
"following", "followers", "inbox", "outbox", "sharedinbox",
"priority", "network", "pubkey", "baseurl"];
return $profile_link;
}
+ /**
+ * Get the link for the remote follow page for a given profile link
+ *
+ * @param sting $profile
+ * @return string Remote follow page link
+ */
+ public static function getRemoteFollowLink(string $profile)
+ {
+ $follow_link = '';
+
+ $links = self::lrdd($profile);
+
+ if (!empty($links) && is_array($links)) {
+ foreach ($links as $link) {
+ if ($link['@attributes']['rel'] === ActivityNamespace::OSTATUSSUB) {
+ $follow_link = $link['@attributes']['template'];
+ }
+ }
+ }
+ return $follow_link;
+ }
+
/**
* Check an URI for LRDD data
*
if (!empty($profile['description'])) {
$data['about'] = $profile['description'];
}
- if (!empty($profile['gender'])) {
- $data['gender'] = $profile['gender'];
- }
if (!empty($profile['keywords'])) {
$keywords = implode(', ', $profile['keywords']);
if (!empty($keywords)) {
if (!empty($profile['country'])) {
$loc['country-name'] = $profile['country'];
}
- if (!empty($profile['hometown'])) {
- $loc['locality'] = $profile['hometown'];
- }
$location = Profile::formatLocation($loc);
if (!empty($location)) {
$data['location'] = $location;
$data["about"] = $json["about"];
}
- if (!empty($json["gender"])) {
- $data["gender"] = $json["gender"];
- }
-
if (!empty($json["key"])) {
$data["pubkey"] = $json["key"];
}