From bec7d9f483d63a2330694cc34377b0f79d1afcba Mon Sep 17 00:00:00 2001 From: friendica Date: Thu, 3 Jan 2013 19:34:04 -0800 Subject: temporary feed import/export (public only for the moment) until this is integrated with remote permissions --- include/items.php | 42 ++++++++++++++++++++++++++++++++++++++++++ include/onepoll.php | 19 +++++++++++++++++++ mod/zfinger.php | 21 ++++++++++++++------- mod/zotfeed.php | 35 +++++++++++++++++++++++++++++++++++ 4 files changed, 110 insertions(+), 7 deletions(-) create mode 100644 mod/zotfeed.php diff --git a/include/items.php b/include/items.php index 432f26804..6192de108 100755 --- a/include/items.php +++ b/include/items.php @@ -4246,3 +4246,45 @@ function fetch_post_tags($items) { return $items; } + + + +function zot_feed($uid,$observer,$mindate) { + + $result = array(); + $mindate = datetime_convert('UTC','UTC',$mindate); + if(! $mindate) + $mindate = '0000-00-00 00:00:00'; + + if(! perm_is_allowed($uid,$observer,'view_stream')) { + return $result; + } + +// FIXME +// $sql_extra = item_permissions_sql($r[0]['channel_id'],$remote_contact,$groups); + + if($mindate != '0000-00-00 00:00:00') + $sql_extra .= " and created > '$mindate' "; + + $limit = 200; + + $items = q("SELECT item.* from item + WHERE uid = %d AND item_restrict = 0 + AND (item_flags & %d) + $sql_extra ORDER BY created DESC limit 0, $limit", + intval($uid), + intval(ITEM_WALL) + ); + if($items) { + xchan_query($items); + $items = fetch_post_tags($items); + } else { + $items = array(); + } + + foreach($items as $item) + $result[] = encode_item($item); + + return $result; + +} diff --git a/include/onepoll.php b/include/onepoll.php index a2b3f7a9f..e2636d84a 100644 --- a/include/onepoll.php +++ b/include/onepoll.php @@ -90,6 +90,25 @@ function onepoll_run($argv, $argc){ } + if($contact['xchan_connurl']) { + $feedurl = str_replace('/poco/','/zotfeed/',$channel['xchan_connurl']); + + $x = z_fetch_url($feedurl . '?f=$mindate=' . $last_update); + if($x['success']) { + $total = 0; + $j = json_decode($x['body'],); + if($j['success'] && $j['messages']) { + foreach($j['messages'] as $message) { + $results = process_delivery(array('hash' => $contact['xchan_hash']),$message, + array(array('hash' => $importer['xchan_hash'])), false); + $total ++; + } + logger("onepoll: $total messages processed"); + } + } + } + + // fetch some items // set last updated timestamp diff --git a/mod/zfinger.php b/mod/zfinger.php index b13af50b7..32523ecac 100644 --- a/mod/zfinger.php +++ b/mod/zfinger.php @@ -7,13 +7,15 @@ function zfinger_init(&$a) { $ret = array('success' => false); - $zhash = ((x($_REQUEST,'guid_hash')) ? $_REQUEST['guid_hash'] : ''); - $zguid = ((x($_REQUEST,'guid')) ? $_REQUEST['guid'] : ''); - $zguid_sig = ((x($_REQUEST,'guid_sig')) ? $_REQUEST['guid_sig'] : ''); - $zaddr = ((x($_REQUEST,'address')) ? $_REQUEST['address'] : ''); - $ztarget = ((x($_REQUEST,'target')) ? $_REQUEST['target'] : ''); - $zsig = ((x($_REQUEST,'target_sig')) ? $_REQUEST['target_sig'] : ''); - $zkey = ((x($_REQUEST,'key')) ? $_REQUEST['key'] : ''); + $zhash = ((x($_REQUEST,'guid_hash')) ? $_REQUEST['guid_hash'] : ''); + $zguid = ((x($_REQUEST,'guid')) ? $_REQUEST['guid'] : ''); + $zguid_sig = ((x($_REQUEST,'guid_sig')) ? $_REQUEST['guid_sig'] : ''); + $zaddr = ((x($_REQUEST,'address')) ? $_REQUEST['address'] : ''); + $ztarget = ((x($_REQUEST,'target')) ? $_REQUEST['target'] : ''); + $zsig = ((x($_REQUEST,'target_sig')) ? $_REQUEST['target_sig'] : ''); + $zkey = ((x($_REQUEST,'key')) ? $_REQUEST['key'] : ''); + $mindate = ((x($_REQUEST,'mindate')) ? $_REQUEST['mindate'] : ''); + $feed = ((x($_REQUEST,'feed')) ? intval($_REQUEST['feed']) : 0); if($ztarget) { if((! $zkey) || (! $zsig) || (! rsa_verify($ztarget,base64url_decode($zsig),$zkey))) { @@ -139,6 +141,11 @@ function zfinger_init(&$a) { if($permissions['view_profile']) $ret['profile'] = $profile; +// if($feed && $permissions['view_stream']) +// $ret['messages'] = $zot_feed($e['channel_id'],(($ztarget && $zsig) +// ? base64url_encode(hash('whirlpool',$ztarget . $zsig,true)) +// : '' ),$mindate); + // array of (verified) hubs this channel uses $ret['locations'] = array(); diff --git a/mod/zotfeed.php b/mod/zotfeed.php new file mode 100644 index 000000000..6519481d2 --- /dev/null +++ b/mod/zotfeed.php @@ -0,0 +1,35 @@ + false); + + $mindate = (($_REQUEST['mindate']) ? datetime_convert('UTC','UTC',$_REQUEST['mindate']) : ''); + if(! $mindate) + $mindate = '0000-00-00 00:00:00'; + + if(get_config('system','block_public') && (! get_account_id()) && (! remote_user())) { + $result['message'] = 'Public access denied'; + json_return_and_die($result); + } + + $channel_address = ((argc() > 1) ? argv(1) : ''); + if($channel_address) { + $r = q("select channel_id from channel where channel_address = '%s' limit 1", + dbesc(argv(1)) + ); + } + if(! $r) { + $result['message'] = 'Channel not found.'; + json_return_and_die($result); + } + + $result['messages'] = zot_feed($r[0]['channel_id'],$observer['xchan_hash'],$mindate); + $result['success'] = true; + json_return_and_die($result); + + +} -- cgit v1.2.3