From 0dc33900b6799681683fd02f597e95acbd58e960 Mon Sep 17 00:00:00 2001 From: friendica Date: Sun, 14 Sep 2014 22:19:19 -0700 Subject: provide a way to sync locations and get rid of bogus hublocs, now implemented --- include/diaspora.php | 6 ++++++ include/hubloc.php | 41 +++++++++++++++++++++++++++++------------ include/notifier.php | 27 +++++++++++++++++++++++++++ include/poller.php | 3 +++ include/zot.php | 10 ++++++++-- 5 files changed, 73 insertions(+), 14 deletions(-) diff --git a/include/diaspora.php b/include/diaspora.php index 33404da74..ea3c78bfe 100755 --- a/include/diaspora.php +++ b/include/diaspora.php @@ -142,6 +142,7 @@ function diaspora_process_outbound($arr) { 'cmd' => $cmd, 'expire' => $expire, 'mail' => $mail, + 'location' => $location, 'fsuggest' => $fsuggest, 'normal_mode' => $normal_mode, 'packet_type' => $packet_type, @@ -150,6 +151,10 @@ function diaspora_process_outbound($arr) { */ + if($arr['location']) + return; + + $target_item = $arr['target_item']; if($target_item && array_key_exists('item_flags',$target_item) && ($target_item['item_flags'] & ITEM_OBSCURED)) { @@ -161,6 +166,7 @@ function diaspora_process_outbound($arr) { } + if($arr['env_recips']) { $hashes = array(); diff --git a/include/hubloc.php b/include/hubloc.php index d51e38eae..cdc9de4af 100644 --- a/include/hubloc.php +++ b/include/hubloc.php @@ -46,6 +46,8 @@ function prune_hub_reinstalls() { function remove_obsolete_hublocs() { + logger('remove_obsolete_hublocs',LOGGER_DEBUG); + // Get rid of any hublocs which are ours but aren't valid anymore - // e.g. they point to a different and perhaps transient URL that we aren't using. @@ -66,7 +68,9 @@ function remove_obsolete_hublocs() { if((! $r) || (! count($r))) return; - // Good. We have at least one valid hubloc. + $channels = array(); + + // Good. We have at least one *valid* hubloc. // Do we have any invalid ones? @@ -74,25 +78,38 @@ function remove_obsolete_hublocs() { dbesc(get_config('system','pubkey')), dbesc(z_root()) ); + $p = q("select hubloc_id from hubloc where hubloc_sitekey != '%s' and hubloc_url = '%s'", + dbesc(get_config('system','pubkey')), + dbesc(z_root()) + ); + if(is_array($r) && is_array($p)) + $r = array_merge($r,$p); + if(! $r) return; - logger('remove_obsolete_hublocs: removing ' . count($r) . ' hublocs.'); - // We've got invalid hublocs. Get rid of them. - $r = q("delete from hubloc where hubloc_sitekey = '%s' and hubloc_url != '%s'", - dbesc(get_config('system','pubkey')), - dbesc(z_root()) - ); + logger('remove_obsolete_hublocs: removing ' . count($r) . ' hublocs.'); - // We should probably tell everybody... But we don't have an easy way to do this - // for the entire site. We'd have to do a channel at a time. - // They will find out anyway - it just might take a little while. + $interval = ((get_config('system','delivery_interval') !== false) + ? intval(get_config('system','delivery_interval')) : 2 ); - // FIXME we probably also need to check that the sys channel has a valid hubloc - // and re-create it if it doesn't. + foreach($r as $rr) { + q("update hubloc set hubloc_flags = (hubloc_flags | %d) where hubloc_id = %d limit 1", + intval(HUBLOC_FLAGS_DELETED), + intval($rr['hubloc_id']) + ); + $x = q("select channel_id from channel where channel_hash = '%s' limit 1", + dbesc($rr['hubloc_hash']) + ); + if($x) { +// proc_run('php','include/notifier.php','location',$x[0]['channel_id']); +// if($interval) +// @time_sleep_until(microtime(true) + (float) $interval); + } + } } diff --git a/include/notifier.php b/include/notifier.php index 0b5744b29..ae781bcf8 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -57,6 +57,7 @@ require_once('include/html2plain.php'); * purge_all channel_id * expire channel_id * relay item_id (item was relayed to owner, we will deliver it as owner) + * location channel_id * */ @@ -144,6 +145,7 @@ function notifier_run($argv, $argc){ $mail = false; $fsuggest = false; $top_level = false; + $location = false; $recipients = array(); $url_recipients = array(); $normal_mode = true; @@ -230,6 +232,30 @@ function notifier_run($argv, $argc){ $private = false; $packet_type = 'refresh'; } + elseif($cmd === 'location') { + logger('notifier: location: ' . $item_id); + $s = q("select * from channel where channel_id = %d limit 1", + intval($item_id) + ); + if($s) + $channel = $s[0]; + $uid = $item_id; + $recipients = array(); + $r = q("select abook_xchan from abook where abook_channel = %d", + intval($item_id) + ); + if($r) { + foreach($r as $rr) { + $recipients[] = $rr['abook_xchan']; + } + } + + $encoded_item = array('locations' => zot_encode_locations($channel),'type' => 'location', 'encoding' => 'zot'); + $target_item = array('aid' => $channel['channel_account_id'],'uid' => $channel['channel_id']); + $private = false; + $packet_type = 'location'; + $location = true; + } elseif($cmd === 'purge_all') { logger('notifier: purge_all: ' . $item_id); $s = q("select * from channel where channel_id = %d limit 1", @@ -516,6 +542,7 @@ function notifier_run($argv, $argc){ 'cmd' => $cmd, 'expire' => $expire, 'mail' => $mail, + 'location' => $location, 'fsuggest' => $fsuggest, 'normal_mode' => $normal_mode, 'packet_type' => $packet_type, diff --git a/include/poller.php b/include/poller.php index c90e48d6b..f689059b9 100644 --- a/include/poller.php +++ b/include/poller.php @@ -171,6 +171,9 @@ function poller_run($argv, $argc){ proc_run('php','include/expire.php'); proc_run('php','include/cli_suggest.php'); + require_once('include/hubloc.php'); + remove_obsolete_hublocs(); + /** * End Cron Daily */ diff --git a/include/zot.php b/include/zot.php index c204375e1..f6732037a 100644 --- a/include/zot.php +++ b/include/zot.php @@ -1121,6 +1121,11 @@ function zot_import($arr, $sender_url) { $deliveries = allowed_public_recips($i); + if($i['message'] && array_key_exists('type',$i['message']) && $i['message']['type'] === 'location') { + $sys = get_sys_channel(); + $deliveries = array(array('hash' => $sys['xchan_hash'])); + } + // if the scope is anything but 'public' we're going to store it as private regardless // of the private flag on the post. @@ -1206,7 +1211,7 @@ function zot_import($arr, $sender_url) { $arr = $i['message']; logger('Location message received: ' . print_r($arr,true), LOGGER_DATA); - logger('Location messaeg recipients: ' . print_r($deliveries,true), LOGGER_DATA); + logger('Location message recipients: ' . print_r($deliveries,true), LOGGER_DATA); $result = process_location_delivery($i['notify']['sender'],$arr,$deliveries); } @@ -1665,7 +1670,8 @@ function process_location_delivery($sender,$arr,$deliveries) { if($r) $sender['key'] = $r[0]['xchan_pubkey']; - sync_locations($sender,$arr,true); + $x = sync_locations($sender,$arr,true); + logger('process_location_delivery: results: ' . print_r($x,true), LOGGER_DATA); } // We need to merge this code with that in the import_xchan function so as to make it -- cgit v1.2.3