remove reply_message_request(), implement force_refresh and minor fixes

This commit is contained in:
Mario
2021-05-27 17:42:28 +00:00
parent 2fb3d6ddf5
commit 3eb1b9d168
4 changed files with 34 additions and 108 deletions

View File

@@ -45,7 +45,7 @@ class Onepoll {
return;
}
$contact = array_shift($contacts);
$contact = $contacts[0];
$importer_uid = $contact['abook_channel'];
$r = q("SELECT * from channel left join xchan on channel_hash = xchan_hash where channel_id = %d limit 1",
@@ -106,21 +106,20 @@ class Onepoll {
return;
$fetch_feed = true;
$x = null;
// They haven't given us permission to see their stream
$can_view_stream = intval(get_abconfig($importer_uid, $contact['abook_xchan'], 'their_perms', 'view_stream'));
if (!$can_view_stream)
if (!$can_view_stream) {
$fetch_feed = false;
}
// we haven't given them permission to send us their stream
$can_send_stream = intval(get_abconfig($importer_uid, $contact['abook_xchan'], 'my_perms', 'send_stream'));
if (!$can_send_stream)
if (!$can_send_stream) {
$fetch_feed = false;
}
if ($fetch_feed) {
@@ -129,8 +128,8 @@ class Onepoll {
if (intval($max)) {
$cl = get_xconfig($contact['abook_xchan'], 'activitypub', 'collections');
if (is_array($cl) && $cl) {
$url = ((array_key_exists('outbox', $cl)) ? $cl['outbox'] : '');
if (is_array($cl) && array_key_exists('outbox', $cl)) {
$url = $cl['outbox'];
}
else {
$url = str_replace('/poco/', '/zotfeed/', $contact['xchan_connurl']);
@@ -160,8 +159,10 @@ class Onepoll {
// update the poco details for this connection
$r = q("SELECT xlink_id from xlink where xlink_xchan = '%s' and xlink_updated > %s - INTERVAL %s and xlink_static = 0 limit 1",
intval($contact['xchan_hash']),
db_utcnow(), db_quoteinterval('1 DAY')
db_utcnow(),
db_quoteinterval('1 DAY')
);
if (!$r) {
poco_load($contact['xchan_hash'], $contact['xchan_connurl']);
}

View File

@@ -4,15 +4,13 @@ namespace Zotlabs\Zot6;
interface IHandler {
function Notify($data,$hub);
function Notify($data, $hub);
function Request($data,$hub);
function Rekey($sender, $data, $hub);
function Rekey($sender,$data,$hub);
function Refresh($sender, $recipients, $hub, $force);
function Refresh($sender,$recipients,$hub);
function Purge($sender,$recipients,$hub);
function Purge($sender, $recipients, $hub);
}

View File

@@ -7,7 +7,6 @@ use Zotlabs\Lib\Crypto;
use Zotlabs\Lib\Libzot;
use Zotlabs\Web\HTTPSig;
class Receiver {
protected $data;
@@ -174,21 +173,20 @@ class Receiver {
function Dispatch() {
switch ($this->messagetype) {
case 'request':
$this->response = $this->handler->Request($this->data,$this->hub);
break;
case 'purge':
$this->response = $this->handler->Purge($this->sender,$this->recipients,$this->hub);
$this->response = $this->handler->Purge($this->sender, $this->recipients, $this->hub);
break;
case 'refresh':
$this->response = $this->handler->Refresh($this->sender,$this->recipients,$this->hub);
$this->response = $this->handler->Refresh($this->sender, $this->recipients, $this->hub, false);
break;
case 'force_refresh':
$this->response = $this->handler->Refresh($this->sender, $this->recipients, $this->hub, true);
break;
case 'rekey':
$this->response = $this->handler->Rekey($this->sender, $this->data,$this->hub);
$this->response = $this->handler->Rekey($this->sender, $this->data, $this->hub);
break;
case 'activity':
@@ -196,7 +194,7 @@ class Receiver {
case 'sync':
default:
if ($this->sender) {
$this->response = $this->handler->Notify($this->data,$this->hub);
$this->response = $this->handler->Notify($this->data, $this->hub);
}
break;

View File

@@ -7,24 +7,20 @@ use Zotlabs\Lib\Queue;
class Zot6Handler implements IHandler {
function Notify($data,$hub) {
return self::reply_notify($data,$hub);
function Notify($data, $hub) {
return self::reply_notify($data, $hub);
}
function Request($data,$hub) {
return self::reply_message_request($data,$hub);
function Rekey($sender, $data, $hub) {
return self::reply_rekey_request($sender, $data, $hub);
}
function Rekey($sender,$data,$hub) {
return self::reply_rekey_request($sender,$data,$hub);
function Refresh($sender, $recipients, $hub, $force) {
return self::reply_refresh($sender, $recipients, $hub, $force);
}
function Refresh($sender,$recipients,$hub) {
return self::reply_refresh($sender,$recipients,$hub);
}
function Purge($sender,$recipients,$hub) {
return self::reply_purge($sender,$recipients,$hub);
function Purge($sender, $recipients, $hub) {
return self::reply_purge($sender, $recipients, $hub);
}
@@ -38,7 +34,7 @@ class Zot6Handler implements IHandler {
logger('notify received from ' . $hub['hubloc_url']);
$x = Libzot::fetch($data);
$x = Libzot::fetch($data, $hub);
$ret['delivery_report'] = $x;
@@ -62,7 +58,7 @@ class Zot6Handler implements IHandler {
*
* @return array
*/
static function reply_refresh($sender, $recipients, $hub) {
static function reply_refresh($sender, $recipients, $hub, $force) {
$ret = array('success' => false);
if($recipients) {
@@ -76,86 +72,19 @@ class Zot6Handler implements IHandler {
dbesc($recip)
);
/// @FIXME $msgtype is undefined
$x = Libzot::refresh( [ 'hubloc_id_url' => $hub['hubloc_id_url'] ], $r[0], (($msgtype === 'force_refresh') ? true : false));
$x = Libzot::refresh([ 'hubloc_id_url' => $hub['hubloc_id_url']], $r[0], $force));
}
}
else {
// system wide refresh
/// @FIXME $msgtype is undefined
$x = Libzot::refresh( [ 'hubloc_id_url' => $hub['hubloc_id_url'] ], null, (($msgtype === 'force_refresh') ? true : false));
$x = Libzot::refresh(['hubloc_id_url' => $hub['hubloc_id_url']], null, $force);
}
$ret['success'] = true;
return $ret;
}
/**
* @brief Process a message request.
*
* If a site receives a comment to a post but finds they have no parent to attach it with, they
* may send a 'request' packet containing the message_id of the missing parent. This is the handler
* for that packet. We will create a message_list array of the entire conversation starting with
* the missing parent and invoke delivery to the sender of the packet.
*
* Zotlabs/Daemon/Deliver.php (for local delivery) and
* mod/post.php???? @fixme (for web delivery) detect the existence of
* this 'message_list' at the destination and split it into individual messages which are
* processed/delivered in order.
*
* @param array $data
* @param array $hub
* @return array
*/
static function reply_message_request($data, $hub) {
$ret = [ 'success' => false ];
$message_id = EMPTY_STR;
if(array_key_exists('data',$data))
$ptr = $data['data'];
if(is_array($ptr) && array_key_exists(0,$ptr)) {
$ptr = $ptr[0];
}
if(is_string($ptr)) {
$message_id = $ptr;
}
if(is_array($ptr) && array_key_exists('id',$ptr)) {
$message_id = $ptr['id'];
}
if (! $message_id) {
$ret['message'] = 'no message_id';
logger('no message_id');
return $ret;
}
$sender = $hub['hubloc_hash'];
/*
* Find the local channel in charge of this post (the first and only recipient of the request packet)
*/
$arr = $data['recipients'][0];
$c = q("select * from channel left join xchan on channel_hash = xchan_hash where channel_hash = '%s' limit 1",
dbesc($arr['portable_id'])
);
if (! $c) {
logger('recipient channel not found.');
$ret['message'] .= 'recipient not found.' . EOL;
return $ret;
}
/*
* fetch the requested conversation
*/
$messages = zot_feed($c[0]['channel_id'], $sender, [ 'message_id' => $data['message_id'], 'encoding' => 'activitystreams' ]);
return (($messages) ? : [] );
}
static function rekey_request($sender,$data,$hub) {
$ret = array('success' => false);