From b7f270de2846d17c2a7804c81015679a19aad54a Mon Sep 17 00:00:00 2001
From: Michael Vogel <icarus@dabo.de>
Date: Sun, 14 Jun 2015 01:52:26 +0200
Subject: [PATCH] probe_url: Better detection for non-standard installations of
 GNU Social

---
 include/Scrape.php | 26 ++++++++++++++++++--------
 1 file changed, 18 insertions(+), 8 deletions(-)

diff --git a/include/Scrape.php b/include/Scrape.php
index 1bb1998b0d..90fb1a9e3d 100644
--- a/include/Scrape.php
+++ b/include/Scrape.php
@@ -335,7 +335,7 @@ function scrape_feed($url) {
 define ( 'PROBE_NORMAL',   0);
 define ( 'PROBE_DIASPORA', 1);
 
-function probe_url($url, $mode = PROBE_NORMAL) {
+function probe_url($url, $mode = PROBE_NORMAL, $level = 1) {
 	require_once('include/email.php');
 
 	$result = array();
@@ -804,13 +804,23 @@ function probe_url($url, $mode = PROBE_NORMAL) {
 
 	logger('probe_url: ' . print_r($result,true), LOGGER_DEBUG);
 
-	// Trying if it maybe a diaspora account
-	if (($result['network'] == NETWORK_FEED) OR ($result['addr'] == "")) {
-		require_once('include/bbcode.php');
-		$address = GetProfileUsername($url, "", true);
-		$result2 = probe_url($address, $mode);
-		if ($result2['network'] != "")
-			$result = $result2;
+	if ($level == 1) {
+		// Trying if it maybe a diaspora account
+		if (($result['network'] == NETWORK_FEED) OR ($result['addr'] == "")) {
+			require_once('include/bbcode.php');
+			$address = GetProfileUsername($url, "", true);
+			$result2 = probe_url($address, $mode, ++$level);
+			if ($result2['network'] != "")
+				$result = $result2;
+		}
+
+		// Maybe it's some non standard GNU Social installation (Single user, subfolder or no uri rewrite)
+		if (($result['network'] == NETWORK_FEED) AND ($result['baseurl'] != "") AND ($result['nick'] != "")) {
+			$addr = $result['nick'].'@'.str_replace("http://", "", $result['baseurl']);
+			$result2 = probe_url($addr, $mode, ++$level);
+			if (($result2['network'] != "") AND ($result2['network'] != NETWORK_FEED))
+				$result = $result2;
+		}
 	}
 
 	Cache::set("probe_url:".$mode.":".$url,serialize($result));
-- 
2.39.5