From 6c55e44f4cc0950144269f244fdf3baed5be4e49 Mon Sep 17 00:00:00 2001 From: zotlabs Date: Thu, 10 Aug 2017 12:49:20 -0700 Subject: when following, allow [network]follow_address syntax to connect with a specific network for multi-protocol services --- include/follow.php | 21 +++++++++++++++++---- include/network.php | 6 +++--- 2 files changed, 20 insertions(+), 7 deletions(-) (limited to 'include') diff --git a/include/follow.php b/include/follow.php index 9e2fd6a9c..130f8b06b 100644 --- a/include/follow.php +++ b/include/follow.php @@ -17,6 +17,17 @@ function new_contact($uid,$url,$channel,$interactive = false, $confirm = false) $my_perms = false; $is_zot = false; + $protocol = ''; + + + if(substr($url,0,1) === '[') { + $x = strpos($url,']'); + if($x) { + $protocol = substr($url,1,$x-1); + $url = substr($url,$x+1); + } + } + $is_http = ((strpos($url,'://') !== false) ? true : false); if($is_http && substr($url,-1,1) === '/') @@ -47,13 +58,13 @@ function new_contact($uid,$url,$channel,$interactive = false, $confirm = false) } - $arr = array('url' => $url, 'channel' => array()); + $arr = array('url' => $url, 'protocol', 'channel' => array()); call_hooks('follow_init', $arr); if($arr['channel']['success']) $ret = $arr['channel']; - elseif(! $is_http) + elseif((! $is_http) && ((! $protocol) || (strtolower($protocol) === 'zot'))) $ret = Zotlabs\Zot\Finger::run($url,$channel); if($ret && is_array($ret) && $ret['success']) { @@ -118,8 +129,10 @@ function new_contact($uid,$url,$channel,$interactive = false, $confirm = false) else { $xchan_hash = ''; + $sql_options = (($protocol) ? " and xchan_network = '" . dbesc($protocol) . "' " : ''); + - $r = q("select * from xchan where xchan_hash = '%s' or xchan_url = '%s' limit 1", + $r = q("select * from xchan where xchan_hash = '%s' or xchan_url = '%s' $sql_options limit 1", dbesc($url), dbesc($url) ); @@ -127,7 +140,7 @@ function new_contact($uid,$url,$channel,$interactive = false, $confirm = false) if(! $r) { // attempt network auto-discovery - $d = discover_by_webbie($url); + $d = discover_by_webbie($url,$protocol); if((! $d) && ($is_http)) { diff --git a/include/network.php b/include/network.php index cd6e980ff..96f4416c8 100644 --- a/include/network.php +++ b/include/network.php @@ -1137,7 +1137,7 @@ function discover_by_url($url, $arr = null) { return true; } -function discover_by_webbie($webbie) { +function discover_by_webbie($webbie,$protocol = '') { $result = []; @@ -1153,7 +1153,7 @@ function discover_by_webbie($webbie) { // If we discover zot - don't search further; grab the info and get out of // here. - if($link['rel'] === PROTOCOL_ZOT) { + if($link['rel'] === PROTOCOL_ZOT && ((! $protocol) || (strtolower($protocol) === 'zot'))) { logger('discover_by_webbie: zot found for ' . $webbie, LOGGER_DEBUG); if(array_key_exists('zot',$x) && $x['zot']['success']) { $i = import_xchan($x['zot']); @@ -1174,7 +1174,7 @@ function discover_by_webbie($webbie) { logger('webfinger: ' . print_r($x,true), LOGGER_DATA, LOG_INFO); - $arr = array('address' => $webbie, 'success' => false, 'webfinger' => $x); + $arr = array('address' => $webbie, 'protocol' => $protocol, 'success' => false, 'webfinger' => $x); call_hooks('discover_channel_webfinger', $arr); if($arr['success']) return true; -- cgit v1.2.3