diff options
Diffstat (limited to 'Zotlabs/Lib/Activity.php')
-rw-r--r-- | Zotlabs/Lib/Activity.php | 161 |
1 files changed, 20 insertions, 141 deletions
diff --git a/Zotlabs/Lib/Activity.php b/Zotlabs/Lib/Activity.php index 388d74d91..cedc9adc8 100644 --- a/Zotlabs/Lib/Activity.php +++ b/Zotlabs/Lib/Activity.php @@ -87,14 +87,16 @@ class Activity { } $headers = [ - 'Accept' => 'application/activity+json, application/ld+json; profile="https://www.w3.org/ns/activitystreams"', + 'Accept' => ActivityStreams::get_accept_header_string($channel), 'Host' => $m['host'], 'Date' => datetime_convert('UTC', 'UTC', 'now', 'D, d M Y H:i:s \\G\\M\\T'), '(request-target)' => 'get ' . get_request_string($url) ]; + if (isset($token)) { $headers['Authorization'] = 'Bearer ' . $token; } + $h = HTTPSig::create_sig($headers, $channel['channel_prvkey'], channel_url($channel), false); $x = z_fetch_url($url, true, $redirects, ['headers' => $h]); } @@ -111,7 +113,6 @@ class Activity { return null; } - static function fetch_person($x) { return self::fetch_profile($x); } @@ -177,7 +178,6 @@ class Activity { } } - static function fetch_image($x) { $ret = [ 'type' => 'Image', @@ -302,7 +302,7 @@ class Activity { $m = get_iconfig($i['id'], 'activitypub', 'rawmsg'); if ($m) { if (is_string($m)) - $t = json_decode($m,true); + $t = json_decode($m, true); else $t = $m; } @@ -351,7 +351,6 @@ class Activity { return $ret; } - static function encode_item($i) { $ret = []; @@ -583,7 +582,6 @@ class Activity { return $ret; } - static function encode_taxonomy($item) { $ret = []; @@ -672,7 +670,6 @@ class Activity { return $ret; } - static function decode_attachment($item) { $ret = []; @@ -696,7 +693,6 @@ class Activity { return $ret; } - static function encode_activity($i, $recurse = false) { $ret = []; @@ -958,7 +954,6 @@ class Activity { } // Returns an array of URLS for any mention tags found in the item array $i. - static function map_mentions($i) { if (!$i['term']) { @@ -981,7 +976,6 @@ class Activity { } // Returns an array of all recipients targeted by private item array $i. - static function map_acl($i) { $ret = []; @@ -1064,6 +1058,7 @@ class Activity { if ($p['xchan_addr'] && strpos($p['xchan_addr'], '@')) $ret['preferredUsername'] = substr($p['xchan_addr'], 0, strpos($p['xchan_addr'], '@')); + $ret['name'] = $p['xchan_name']; $ret['updated'] = datetime_convert('UTC', 'UTC', $p['xchan_name_date'], ATOM_TIME); $ret['icon'] = [ @@ -1093,15 +1088,17 @@ class Activity { 'publicKeyPem' => $p['xchan_pubkey'] ]; - $arr = ['xchan' => $p, 'encoded' => $ret]; + $arr = [ + 'xchan' => $p, + 'encoded' => $ret + ]; + call_hooks('encode_person', $arr); $ret = $arr['encoded']; - return $ret; } - static function activity_mapper($verb) { if (strpos($verb, '/') === false) { @@ -1145,7 +1142,7 @@ class Activity { if (strpos($verb, ACTIVITY_POKE) !== false) return 'Activity'; - // We should return false, however this will trigger an uncaught execption and crash + // We should return false, however this will trigger an uncaught execption and crash // the delivery system if encountered by the JSON-LDSignature library logger('Unmapped activity: ' . $verb); @@ -1153,7 +1150,6 @@ class Activity { // return false; } - static function activity_decode_mapper($verb) { $acts = [ @@ -1225,7 +1221,6 @@ class Activity { return 'Note'; } - static function activity_obj_mapper($obj) { $objs = [ @@ -1272,17 +1267,16 @@ class Activity { } - static function follow($channel, $act) { $contact = null; $their_follow_id = null; /* - * - * if $act->type === 'Follow', actor is now following $channel - * if $act->type === 'Accept', actor has approved a follow request from $channel - * + * + * if $act->type === 'Follow', actor is now following $channel + * if $act->type === 'Accept', actor has approved a follow request from $channel + * */ $person_obj = $act->actor; @@ -1297,7 +1291,7 @@ class Activity { self::actor_store($person_obj['id'], $person_obj); - // Find any existing abook record + // Find any existing abook record $r = q("select * from abook left join xchan on abook_xchan = xchan_hash where abook_xchan = '%s' and abook_channel = %d limit 1", dbesc($person_obj['id']), @@ -1314,7 +1308,7 @@ class Activity { if ($contact && $contact['abook_id']) { - // A relationship of some form already exists on this site. + // A relationship of some form already exists on this site. switch ($act->type) { @@ -1469,7 +1463,6 @@ class Activity { } - static function unfollow($channel, $act) { $contact = null; @@ -1495,7 +1488,6 @@ class Activity { return; } - static function actor_store($url, $person_obj) { if (!is_array($person_obj)) @@ -1601,7 +1593,7 @@ class Activity { else { // Record exists. Cache existing records for one week at most - // then refetch to catch updated profile photos, names, etc. + // then refetch to catch updated profile photos, names, etc. $d = datetime_convert('UTC', 'UTC', 'now - 1 week'); if ($r[0]['xchan_name_date'] > $d) @@ -1663,7 +1655,6 @@ class Activity { } - static function create_action($channel, $observer_hash, $act) { if (in_array($act->obj['type'], ['Note', 'Article', 'Video'])) { @@ -1681,7 +1672,6 @@ class Activity { } - static function like_action($channel, $observer_hash, $act) { if (in_array($act->obj['type'], ['Note', 'Article', 'Video'])) { @@ -1692,7 +1682,6 @@ class Activity { } // sort function width decreasing - static function vid_sort($a, $b) { if ($a['width'] === $b['width']) return 0; @@ -1954,7 +1943,6 @@ class Activity { } - static function update_poll($item, $post) { $multi = false; $mid = $post['mid']; @@ -2047,7 +2035,6 @@ class Activity { return false; } - static function decode_note($act) { $response_activity = false; @@ -2506,9 +2493,6 @@ class Activity { $item['item_private'] = 2; }*/ - // TODO: remove - // $is_parent = (($item['parent_mid'] && $item['parent_mid'] === $item['mid']) ? true : false); - if ($item['parent_mid'] && $item['parent_mid'] !== $item['mid']) { $is_child_node = true; } @@ -2563,7 +2547,7 @@ class Activity { $allowed = true; // reject public stream comments that weren't sent by the conversation owner - if ($is_sys_channel && $pubstream && $item['owner_xchan'] !== $observer_hash && ! $fetch_parents) { // TODO: check why? This would make it impossible to fetch externals via zotfeed where $observer_hash = sys channel + if ($is_sys_channel && $pubstream && $item['owner_xchan'] !== $observer_hash && !$fetch_parents) { $allowed = false; } } @@ -2587,12 +2571,6 @@ class Activity { }*/ } - // TODO: remove - /*if ($is_parent && (!perm_is_allowed($channel['channel_id'], $observer_hash, 'send_stream') && !($is_sys_channel && $pubstream))) { - logger('no permission'); - return; - }*/ - if (tgroup_check($channel['channel_id'], $item) && (!$is_child_node)) { // for forum deliveries, make sure we keep a copy of the signed original set_iconfig($item, 'activitypub', 'rawmsg', $act->raw, 1); @@ -2642,15 +2620,6 @@ class Activity { return; } - // TODO: remove - /*if (is_array($act->obj)) { - $content = self::get_content($act->obj); - } - if (!$content) { - logger('no content'); - return; - }*/ - $item['aid'] = $channel['channel_account_id']; $item['uid'] = $channel['channel_id']; @@ -2717,54 +2686,6 @@ class Activity { $parent = null; - // TODO: remove - /*if (!$is_parent) { - $p = q("select parent_mid, id, obj_type from item where mid = '%s' and uid = %d limit 1", - dbesc($item['parent_mid']), - intval($item['uid']) - ); - if (!$p) { - $a = (($fetch_parents) ? self::fetch_and_store_parents($channel, $item) : false); - if ($a) { - $p = q("select parent_mid from item where mid = '%s' and uid = %d limit 1", - dbesc($item['parent_mid']), - intval($item['uid']) - ); - } - else { - logger('could not fetch parents'); - return; - - // @TODO we maybe could accept these is we formatted the body correctly with share_bb() - // or at least provided a link to the object - // if(in_array($act->type,[ 'Like','Dislike' ])) { - // return; - // } - - // @TODO do we actually want that? - // if no parent was fetched, turn into a top-level post - - // turn into a top level post - // $s['parent_mid'] = $s['mid']; - // $s['thr_parent'] = $s['mid']; - } - } - - if ($p[0]['obj_type'] === 'Question') { - if ($item['obj_type'] === ACTIVITY_OBJ_NOTE && $item['title'] && (!$item['content'])) { - $item['obj_type'] = 'Answer'; - } - } - - if ($p[0]['parent_mid'] !== $item['parent_mid']) { - $item['thr_parent'] = $item['parent_mid']; - } - else { - $item['thr_parent'] = $p[0]['parent_mid']; - } - $item['parent_mid'] = $p[0]['parent_mid']; - }*/ - if ($is_child_node) { $parent = q("select * from item where mid = '%s' and uid = %d limit 1", @@ -2824,24 +2745,6 @@ class Activity { $x = item_store($item); } - // TODO: remove - /*$r = q("select id, created, edited from item where mid = '%s' and uid = %d limit 1", - dbesc($item['mid']), - intval($item['uid']) - ); - if ($r) { - if ($item['edited'] > $r[0]['edited']) { - $item['id'] = $r[0]['id']; - $x = item_store_update($item); - } - else { - return; - } - } - else { - $x = item_store($item); - }*/ - if ($fetch_parents && $parent && !intval($parent[0]['item_private'])) { logger('topfetch', LOGGER_DEBUG); // if the thread owner is a connnection, we will already receive any additional comments to their posts @@ -2883,23 +2786,6 @@ class Activity { sync_an_item($channel['channel_id'], $x['item_id']); } - // TODO: remove - /*if (is_array($x) && $x['item_id']) { - if ($is_parent) { - if ($item['owner_xchan'] === $channel['channel_hash']) { - // We are the owner of this conversation, so send all received comments back downstream - Master::Summon(['Notifier', 'comment-import', $x['item_id']]); - } - $r = q("select * from item where id = %d limit 1", - intval($x['item_id']) - ); - if ($r) { - send_status_notifications($x['item_id'], $r[0]); - } - } - sync_an_item($channel['channel_id'], $x['item_id']); - }*/ - } static public function fetch_and_store_parents($channel, $observer_hash, $item, $force = false) { @@ -2963,7 +2849,7 @@ class Activity { break; } - array_unshift($p,[ $a, $item ]); + array_unshift($p, [$a, $item]); if ($item['parent_mid'] === $item['mid']) { break; @@ -3386,7 +3272,6 @@ class Activity { return; } - static function bb_attach($attach, $body) { $ret = false; @@ -3412,9 +3297,7 @@ class Activity { return $ret; } - // check for the existence of existing media link in body - static function media_not_in_body($s, $body) { if ((strpos($body, ']' . $s . '[/img]') === false) && @@ -3426,7 +3309,6 @@ class Activity { return false; } - static function bb_content($content, $field) { require_once('include/html2bbcode.php'); @@ -3455,7 +3337,6 @@ class Activity { return $ret; } - static function get_content($act) { $content = []; @@ -3511,7 +3392,6 @@ class Activity { return $content; } - static function get_textfield($act, $field) { $content = false; @@ -3528,7 +3408,6 @@ class Activity { // Find either an Authorization: Bearer token or 'token' request variable // in the current web request and return it - static function token_from_request() { foreach (['REDIRECT_REMOTE_USER', 'HTTP_AUTHORIZATION'] as $s) { |