aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzotlabs <mike@macgirvin.com>2017-08-10 12:49:20 -0700
committerzotlabs <mike@macgirvin.com>2017-08-10 12:49:20 -0700
commit6c55e44f4cc0950144269f244fdf3baed5be4e49 (patch)
treeb3ba4101c16e2a1d0e084f5a662f0407ed170fa9
parent568690186961d2946543c8320faf5575758acfca (diff)
downloadvolse-hubzilla-6c55e44f4cc0950144269f244fdf3baed5be4e49.tar.gz
volse-hubzilla-6c55e44f4cc0950144269f244fdf3baed5be4e49.tar.bz2
volse-hubzilla-6c55e44f4cc0950144269f244fdf3baed5be4e49.zip
when following, allow [network]follow_address syntax to connect with a specific network for multi-protocol services
-rw-r--r--include/follow.php21
-rw-r--r--include/network.php6
2 files changed, 20 insertions, 7 deletions
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;