From e891199a23eb8839f0a6baa4b5695b058793917f Mon Sep 17 00:00:00 2001 From: zotlabs Date: Sat, 15 Jul 2017 15:49:10 -0700 Subject: deal with mastodon privacy scopes - mark private and block commenting since we refuse to send private activities through the public OStatus connector. --- include/feedutils.php | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'include/feedutils.php') diff --git a/include/feedutils.php b/include/feedutils.php index b1fcce9d3..6ee53e2f6 100644 --- a/include/feedutils.php +++ b/include/feedutils.php @@ -408,8 +408,11 @@ function get_atom_elements($feed, $item, &$author) { $ostatus_protocol = (($ostatus_conversation) ? true : false); $mastodon = (($item->get_item_tags('http://mastodon.social/schema/1.0','scope')) ? true : false); - if($mastodon) + if($mastodon) { $ostatus_protocol = true; + if(($mastodon[0]['data']) && ($mastodon[0]['data'] !== 'public')) + $res['item_private'] = 1; + } $apps = $item->get_item_tags(NAMESPACE_STATUSNET, 'notice_info'); if($apps && $apps[0]['attribs']['']['source']) { @@ -1024,6 +1027,14 @@ function consume_feed($xml, $importer, &$contact, $pass = 0) { if(! $datarray['mid']) continue; + // A Mastodon privacy tag has been found. We cannot send private comments + // through the OStatus protocol, so block commenting. + + if(array_key_exists('item_private',$datarray) && intval($datarray['item_private'])) { + $datarray['public_policy'] = 'specific'; + $datarray['comment_policy'] = 'none'; + } + if($contact['xchan_network'] === 'rss') { $datarray['public_policy'] = 'specific'; $datarray['comment_policy'] = 'none'; @@ -1220,6 +1231,14 @@ function consume_feed($xml, $importer, &$contact, $pass = 0) { if(! $datarray['mid']) continue; + // A Mastodon privacy tag has been found. We cannot send private comments + // through the OStatus protocol, so block commenting. + + if(array_key_exists('item_private',$datarray) && intval($datarray['item_private'])) { + $datarray['public_policy'] = 'specific'; + $datarray['comment_policy'] = 'none'; + } + if($contact['xchan_network'] === 'rss') { $datarray['public_policy'] = 'specific'; $datarray['comment_policy'] = 'none'; -- cgit v1.2.3