diff options
-rw-r--r-- | include/zot.php | 76 | ||||
-rw-r--r-- | mod/_well_known.php | 2 | ||||
-rw-r--r-- | mod/post.php | 12 |
3 files changed, 40 insertions, 50 deletions
diff --git a/include/zot.php b/include/zot.php index 1b8b8713a..90b91ff6e 100644 --- a/include/zot.php +++ b/include/zot.php @@ -59,15 +59,18 @@ function zot_verify(&$item,$identity) { -function zot_notify($channel,$url,$type = 'notify') { +function zot_notify($channel,$url,$type = 'notify',$recipients = null) { $x = z_post_url($url, array( 'type' => $type, - 'guid' => $channel['channel_guid'], - 'guid_sig' => base64url_encode($guid,$channel['prvkey']), - 'hub' => z_root(), - 'hub_sig' => base64url_encode(z_root,$channel['prvkey']), - 'callback' => '/post', - 'spec' => ZOT_REVISION) + 'sender' => json_encode(array( + 'guid' => $channel['channel_guid'], + 'guid_sig' => base64url_encode($guid,$channel['prvkey']), + 'hub' => z_root(), + 'hub_sig' => base64url_encode(z_root,$channel['prvkey']) + )), + 'recipients' => json_encode($recipients), + 'callback' => '/post', + 'version' => ZOT_REVISION) ); return($x); } @@ -100,7 +103,7 @@ function zot_finger($webbie,$channel) { $url = 'https://' . $host; } - $rhs = '/.well-known/zot-guid'; + $rhs = '/.well-known/zot-info'; if($channel) { $postvars = array( @@ -146,7 +149,7 @@ function zot_refresh($them,$channel) { if(! $guid_hash) return; - $rhs = '/.well-known/zot-guid'; + $rhs = '/.well-known/zot-info'; $postvars = array( 'guid_hash' => $guid_hash, @@ -206,17 +209,16 @@ function zot_refresh($them,$channel) { } -function zot_gethub($arr) { - - if((x($arr,'guid')) && (x($arr,'guid_sig')) && (x($arr,'hub')) && (x($arr,'hub_sig'))) { +function zot_gethub($jarr) { + if($jarr->guid && $jarr->guid_sig && $jarr->hub && $jarr->hub_sig) { $r = q("select * from hubloc where hubloc_guid = '%s' and hubloc_guid_sig = '%s' and hubloc_url = '%s' and hubloc_url_sig = '%s' limit 1", - dbesc($arr['guid']), - dbesc($arr['guid_sig']), - dbesc($arr['hub']), - dbesc($arr['hub_sig']) + dbesc($jarr->guid), + dbesc($jarr->guid_sig), + dbesc($jarr->hub), + dbesc($jarr->hub_sig) ); if($r && count($r)) return $r[0]; @@ -225,39 +227,23 @@ function zot_gethub($arr) { } function zot_register_hub($arr) { - $total = 0; - if((x($arr,'hub')) && (x($arr,'guid'))) { - $x = z_fetch_url($arr['hub'] . '/.well-known/zot-guid/' . $arr['guid']); + + $result = array('success' => false); + + if($arr->hub && $arr->hub_sig && $arr->guid && $arr->guid_sig) { + + $guid_hash = base64url_encode(hash('whirlpool',$arr->guid . $arr->guid_sig, true)); + + $x = z_fetch_url($arr->hub . '/.well-known/zot-info/?f=&hash=' . $guid_hash); + if($x['success']) { $record = json_decode($x['body']); - if($record->hub && count($record->hub)) { - foreach($record->hub as $h) { - // store any hubs we don't know about - if( ! zot_gethub( - array('guid' => $arr['guid'], - 'guid_sig' => $arr['guid_sig'], - 'hub' => $h->url, - 'hub_sig' => $h->url_sig))) { - $r = q("insert into hubloc (hubloc_guid, hubloc_guid_sig, hubloc_flags, hubloc_url, - hubloc_url_sig, hubloc_callback, hubloc_sitekey, hubloc_key) - values ( '%s', '%s', %d, '%s', '%s', '%s', '%s', '%s' )", - dbesc($arr['guid']), - dbesc($arr['guid_sig']), - intval((($h->primary) ? HUBLOC_FLAGS_PRIMARY : 0) | HUBLOC_FLAGS_UNVERIFIED ), - dbesc($h->url), - dbesc($h->url_sig), - dbesc($h->callback), - dbesc($h->sitekey), - dbesc($record->key) - ); - if($r) - $total ++; - } - } - } + $c = import_xchan_from_json($record); + if($c['success']) + $result['success'] = true; } } - return $total; + return $result; } diff --git a/mod/_well_known.php b/mod/_well_known.php index ac4eb6076..5c5f6585f 100644 --- a/mod/_well_known.php +++ b/mod/_well_known.php @@ -9,7 +9,7 @@ function _well_known_init(&$a){ hostxrd_init($a);
break;
- case 'zot-guid':
+ case 'zot-info':
$a->argc -= 1;
array_shift($a->argv);
$a->argv[0] = 'zfinger';
diff --git a/mod/post.php b/mod/post.php index ef94c9b5d..fb8885b93 100644 --- a/mod/post.php +++ b/mod/post.php @@ -11,12 +11,16 @@ function post_post(&$a) { $ret = array('result' => false, 'message' => ''); - $msgtype = ((x($_REQUEST,'type')) ? $_REQUEST['type'] : ''); + $msgtype = ((array_key_exists('type',$_REQUEST)) ? $_REQUEST['type'] : ''); - $hub = zot_gethub($_REQUEST); + if(array_key_exists('sender',$_REQUEST)) { + $j_sender = json_decode($_REQUEST['sender']); + } + + $hub = zot_gethub($j_sender); if(! $hub) { - $result = zot_register_hub($_REQUEST); - if((! $result) || (! zot_gethub($_REQUEST))) { + $result = zot_register_hub($j_sender); + if((! $result['success']) || (! zot_gethub($j_sender))) { $ret['message'] = 'Hub not available.'; json_return_and_die($ret); } |