when following, allow [network]follow_address syntax to connect with a specific network for multi-protocol services

This commit is contained in:
zotlabs 2017-08-10 12:49:20 -07:00
parent 5686901869
commit 6c55e44f4c
2 changed files with 20 additions and 7 deletions

View file

@ -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)) {

View file

@ -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;