From e529635952c9a10f56d3bc90a666eccd9c5b9842 Mon Sep 17 00:00:00 2001 From: nobody Date: Wed, 30 Sep 2020 17:05:36 -0700 Subject: delete fixes --- Zotlabs/Lib/Libzot.php | 9 +++++++-- include/network.php | 20 ++++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/Zotlabs/Lib/Libzot.php b/Zotlabs/Lib/Libzot.php index a6db9e431..9b4b05878 100644 --- a/Zotlabs/Lib/Libzot.php +++ b/Zotlabs/Lib/Libzot.php @@ -2116,6 +2116,11 @@ class Libzot { $item_found = false; $post_id = 0; + $m = parse_url($item['mid']); + unset($m['fragment']); + $normalised = unparse_url($m); + + // reactions such as like and dislike could have an mid with /activity/ in it. // Check for both forms in order to prevent duplicates. @@ -2124,8 +2129,8 @@ class Libzot { dbesc($sender), dbesc($sender), dbesc($sender), - dbesc($item['mid']), - dbesc(str_replace('/activity/', '/item/', $item['mid'])), + dbesc($normalised), + dbesc(str_replace('/activity/', '/item/', $normalised)), intval($uid) ); diff --git a/include/network.php b/include/network.php index d9d534cd7..750d56ac3 100644 --- a/include/network.php +++ b/include/network.php @@ -2061,3 +2061,23 @@ function get_request_string($url) { return '/' . ((count($a) > 3) ? $a[3] : EMPTY_STR); } + + +/* + * + * Takes the output of parse_url and builds a URL from it + * + */ + +function unparse_url($parsed_url) { + $scheme = isset($parsed_url['scheme']) ? $parsed_url['scheme'] . '://' : ''; + $host = isset($parsed_url['host']) ? $parsed_url['host'] : ''; + $port = isset($parsed_url['port']) ? ':' . $parsed_url['port'] : ''; + $user = isset($parsed_url['user']) ? $parsed_url['user'] : ''; + $pass = isset($parsed_url['pass']) ? ':' . $parsed_url['pass'] : ''; + $pass = ($user || $pass) ? "$pass@" : ''; + $path = isset($parsed_url['path']) ? $parsed_url['path'] : ''; + $query = isset($parsed_url['query']) ? '?' . $parsed_url['query'] : ''; + $fragment = isset($parsed_url['fragment']) ? '#' . $parsed_url['fragment'] : ''; + return "$scheme$user$pass$host$port$path$query$fragment"; +} -- cgit v1.2.3 From 8605aee53378075956753f6b06487d8d8129df3e Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 1 Oct 2020 06:34:27 +0000 Subject: use object url --- Zotlabs/Lib/Activity.php | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/Zotlabs/Lib/Activity.php b/Zotlabs/Lib/Activity.php index 7ad6c91ae..ae52fa216 100644 --- a/Zotlabs/Lib/Activity.php +++ b/Zotlabs/Lib/Activity.php @@ -652,24 +652,7 @@ class Activity { else return []; - if ($i['obj']) { - if (! is_array($i['obj'])) { - $i['obj'] = json_decode($i['obj'],true); - } - $obj = self::encode_object($i['obj']); - if ($obj) - $ret['object'] = $obj; - else - return []; - } - else { - $obj = self::encode_item($i,$activitypub); - if ($obj) - $ret['object'] = $obj; - else - return []; - } - + $ret['object'] = str_replace('/item/','/activity/',$i['mid']); $ret['to'] = [ ACTIVITY_PUBLIC_INBOX ]; return $ret; } -- cgit v1.2.3 From 1d705b9805457b7c5f1b55023b7348712cc52604 Mon Sep 17 00:00:00 2001 From: nobody Date: Wed, 30 Sep 2020 23:38:05 -0700 Subject: deleting like/dislike/accept/reject/etc. activities should be Undo rather than Delete per the spec --- Zotlabs/Lib/Activity.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Zotlabs/Lib/Activity.php b/Zotlabs/Lib/Activity.php index 7ad6c91ae..b084b1da8 100644 --- a/Zotlabs/Lib/Activity.php +++ b/Zotlabs/Lib/Activity.php @@ -644,7 +644,12 @@ class Activity { } if (intval($i['item_deleted'])) { - $ret['type'] = 'Delete'; + if (in_array($ret['type'], [ 'Like', 'Dislike', 'Accept', 'Reject', 'TentativeAccept', 'TentativeReject' ])) { + $ret['type'] = 'Undo'; + } + else { + $ret['type'] = 'Delete'; + } $ret['id'] = str_replace('/item/','/activity/',$i['mid']) . '#delete'; $actor = self::encode_person($i['author'],false); if ($actor) @@ -2087,12 +2092,10 @@ class Activity { $s['edited'] = datetime_convert(); } - if($act->type === 'Tombstone' || $act->type === 'Delete' || ($act->type === 'Create' && $act->obj['type'] === 'Tombstone')) { + if(in_array($act->type, [ 'Delete', 'Undo', 'Tombstone' ]) || ($act->type === 'Create' && $act->obj['type'] === 'Tombstone')) { $s['item_deleted'] = 1; } - - $s['obj_type'] = self::activity_obj_decode_mapper($act->obj['type']); if($s['obj_type'] === ACTIVITY_OBJ_NOTE && $s['mid'] !== $s['parent_mid']) { $s['obj_type'] = ACTIVITY_OBJ_COMMENT; -- cgit v1.2.3 From 96c4c72ee36ebb19252be724ddb485a05337cb23 Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 1 Oct 2020 11:16:03 +0000 Subject: minor issue --- Zotlabs/Lib/Activity.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Zotlabs/Lib/Activity.php b/Zotlabs/Lib/Activity.php index 3f4875e93..6fac0c717 100644 --- a/Zotlabs/Lib/Activity.php +++ b/Zotlabs/Lib/Activity.php @@ -643,6 +643,8 @@ class Activity { $ret['obj'] = []; } + $ret['type'] = self::activity_mapper($i['verb']); + if (intval($i['item_deleted'])) { if (in_array($ret['type'], [ 'Like', 'Dislike', 'Accept', 'Reject', 'TentativeAccept', 'TentativeReject' ])) { $ret['type'] = 'Undo'; @@ -662,8 +664,6 @@ class Activity { return $ret; } - $ret['type'] = self::activity_mapper($i['verb']); - if($ret['type'] === 'emojiReaction') { // There may not be an object for these items for legacy reasons - it should be the conversation parent. $p = q("select * from item where mid = '%s' and uid = %d", @@ -1058,6 +1058,8 @@ class Activity { 'http://purl.org/zot/activity/attendno' => 'Reject', 'http://purl.org/zot/activity/attendmaybe' => 'TentativeAccept', 'Invite' => 'Invite', + 'Delete' => 'Delete', + 'Undo' => 'Undo' ]; call_hooks('activity_mapper',$acts); @@ -1105,6 +1107,8 @@ class Activity { 'http://purl.org/zot/activity/attendno' => 'Reject', 'http://purl.org/zot/activity/attendmaybe' => 'TentativeAccept', 'Invite' => 'Invite', + 'Delete' => 'Delete', + 'Undo' => 'Undo' ]; call_hooks('activity_decode_mapper',$acts); -- cgit v1.2.3 From 86117c88595cf97a6173fabcb9e3b0d5ec6b1d09 Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 1 Oct 2020 11:51:20 +0000 Subject: more delete fixes --- Zotlabs/Lib/Activity.php | 23 ++++++++++++++++++++++- Zotlabs/Lib/Libzot.php | 9 ++------- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/Zotlabs/Lib/Activity.php b/Zotlabs/Lib/Activity.php index 6fac0c717..7cc77f124 100644 --- a/Zotlabs/Lib/Activity.php +++ b/Zotlabs/Lib/Activity.php @@ -645,9 +645,13 @@ class Activity { $ret['type'] = self::activity_mapper($i['verb']); + + if (intval($i['item_deleted'])) { + $is_response = false; if (in_array($ret['type'], [ 'Like', 'Dislike', 'Accept', 'Reject', 'TentativeAccept', 'TentativeReject' ])) { $ret['type'] = 'Undo'; + $is_response = true; } else { $ret['type'] = 'Delete'; @@ -659,7 +663,24 @@ class Activity { else return []; - $ret['object'] = str_replace('/item/','/activity/',$i['mid']); + if ($i['obj'] && !$is_response) { + if (! is_array($i['obj'])) { + $i['obj'] = json_decode($i['obj'],true); + } + $obj = self::encode_object($i['obj']); + if ($obj) + $ret['object'] = $obj; + else + return []; + } + else { + $obj = self::encode_item($i); + if ($obj) + $ret['object'] = $obj; + else + return []; + } + $ret['to'] = [ ACTIVITY_PUBLIC_INBOX ]; return $ret; } diff --git a/Zotlabs/Lib/Libzot.php b/Zotlabs/Lib/Libzot.php index 9b4b05878..87da5ff7a 100644 --- a/Zotlabs/Lib/Libzot.php +++ b/Zotlabs/Lib/Libzot.php @@ -2116,11 +2116,6 @@ class Libzot { $item_found = false; $post_id = 0; - $m = parse_url($item['mid']); - unset($m['fragment']); - $normalised = unparse_url($m); - - // reactions such as like and dislike could have an mid with /activity/ in it. // Check for both forms in order to prevent duplicates. @@ -2129,8 +2124,8 @@ class Libzot { dbesc($sender), dbesc($sender), dbesc($sender), - dbesc($normalised), - dbesc(str_replace('/activity/', '/item/', $normalised)), + dbesc(str_replace('/activity/', '/item/', $item['mid'])), + dbesc(str_replace('/item/', '/activity/', $item['mid'])), intval($uid) ); -- cgit v1.2.3