mirror of
https://codeberg.org/streams/streams.git
synced 2024-09-20 06:35:15 +00:00
fix edge cases in our implementation of Mastodon's undocumented remote comment over OStatus follow.
This commit is contained in:
parent
fc5c4760f3
commit
f6fb939478
1 changed files with 45 additions and 46 deletions
|
@ -71,55 +71,54 @@ class Follow extends Controller {
|
||||||
$interactive = (($_REQUEST['interactive']) ? intval($_REQUEST['interactive']) : 1);
|
$interactive = (($_REQUEST['interactive']) ? intval($_REQUEST['interactive']) : 1);
|
||||||
$channel = App::get_channel();
|
$channel = App::get_channel();
|
||||||
|
|
||||||
|
if ((strpos($url,'http') === 0) || strpos($url,'bear:') === 0 || strpos($url,'x-zot:') === 0) {
|
||||||
|
$n = Activity::fetch($url);
|
||||||
|
if ($n && isset($n['type']) && ! ActivityStreams::is_an_actor($n['type'])) {
|
||||||
|
// set client flag to convert objects to implied activities
|
||||||
|
$a = new ActivityStreams($n,null,true);
|
||||||
|
if ($a->type === 'Announce' && is_array($a->obj)
|
||||||
|
&& array_key_exists('object',$a->obj) && array_key_exists('actor',$a->obj)) {
|
||||||
|
// This is a relayed/forwarded Activity (as opposed to a shared/boosted object)
|
||||||
|
// Reparse the encapsulated Activity and use that instead
|
||||||
|
logger('relayed activity',LOGGER_DEBUG);
|
||||||
|
$a = new ActivityStreams($a->obj,null,true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($a->is_valid()) {
|
||||||
|
|
||||||
|
if (is_array($a->actor) && array_key_exists('id',$a->actor)) {
|
||||||
|
Activity::actor_store($a->actor['id'],$a->actor);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ActivityPub sourced items are cacheable
|
||||||
|
$item = Activity::decode_note($a,true);
|
||||||
|
|
||||||
|
if ($item) {
|
||||||
|
Activity::store($channel,get_observer_hash(),$a,$item,true);
|
||||||
|
|
||||||
|
$r = q("select * from item where mid = '%s' and uid = %d",
|
||||||
|
dbesc($item['mid']),
|
||||||
|
intval($uid)
|
||||||
|
);
|
||||||
|
if ($r) {
|
||||||
|
if ($interactive) {
|
||||||
|
goaway(z_root() . '/display/' . gen_link_id($item['mid']));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$result['success'] = true;
|
||||||
|
json_return_and_die($result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
$result = Connect::connect($channel,$url);
|
$result = Connect::connect($channel,$url);
|
||||||
|
|
||||||
if ($result['success'] == false) {
|
if ($result['success'] == false) {
|
||||||
|
|
||||||
if ((strpos($url,'http') === 0) || strpos($url,'bear:') === 0 || strpos($url,'x-zot:') === 0) {
|
|
||||||
$n = Activity::fetch($url);
|
|
||||||
if ($n) {
|
|
||||||
// set client flag to convert objects to implied activities
|
|
||||||
$a = new ActivityStreams($n,null,true);
|
|
||||||
if ($a->type === 'Announce' && is_array($a->obj)
|
|
||||||
&& array_key_exists('object',$a->obj) && array_key_exists('actor',$a->obj)) {
|
|
||||||
// This is a relayed/forwarded Activity (as opposed to a shared/boosted object)
|
|
||||||
// Reparse the encapsulated Activity and use that instead
|
|
||||||
logger('relayed activity',LOGGER_DEBUG);
|
|
||||||
$a = new ActivityStreams($a->obj,null,true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($a->is_valid()) {
|
|
||||||
|
|
||||||
if (is_array($a->actor) && array_key_exists('id',$a->actor)) {
|
|
||||||
Activity::actor_store($a->actor['id'],$a->actor);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ActivityPub sourced items are cacheable
|
|
||||||
$item = Activity::decode_note($a,true);
|
|
||||||
|
|
||||||
if ($item) {
|
|
||||||
Activity::store($channel,get_observer_hash(),$a,$item,false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$r = q("select * from item where mid = '%s' and uid = %d",
|
|
||||||
dbesc($url),
|
|
||||||
intval($uid)
|
|
||||||
);
|
|
||||||
if ($r) {
|
|
||||||
if ($interactive) {
|
|
||||||
goaway(z_root() . '/display/' . gen_link_id($url));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$result['success'] = true;
|
|
||||||
json_return_and_die($result);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if ($result['message']) {
|
if ($result['message']) {
|
||||||
notice($result['message']);
|
notice($result['message']);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue