Diaspora Relay: Only accept postings from anyone when the relay is configured

This commit is contained in:
Michael 2017-02-10 20:45:22 +00:00
parent 8d2c74eb3c
commit 40390cc5ec
3 changed files with 90 additions and 72 deletions

View file

@ -430,6 +430,17 @@ define('PRIORITY_LOW', 40);
define('PRIORITY_NEGLIGIBLE',50); define('PRIORITY_NEGLIGIBLE',50);
/* @}*/ /* @}*/
/**
* @name Social Relay settings
*
* See here: https://github.com/jaywink/social-relay
* and here: https://wiki.diasporafoundation.org/Relay_servers_for_public_posts
* @{
*/
define('SR_SCOPE_NONE', '');
define('SR_SCOPE_ALL', 'all');
define('SR_SCOPE_TAGS', 'tags');
/* @}*/
// Normally this constant is defined - but not if "pcntl" isn't installed // Normally this constant is defined - but not if "pcntl" isn't installed
if (!defined("SIGTERM")) if (!defined("SIGTERM"))

View file

@ -8,6 +8,8 @@
* This will change in the future. * This will change in the future.
*/ */
use \Friendica\Core\Config;
require_once("include/items.php"); require_once("include/items.php");
require_once("include/bb2diaspora.php"); require_once("include/bb2diaspora.php");
require_once("include/Scrape.php"); require_once("include/Scrape.php");
@ -309,10 +311,6 @@ class Diaspora {
return false; return false;
} }
// Use a dummy importer to import the data for the public copy
$importer = array("uid" => 0, "page-flags" => PAGE_FREELOVE);
$message_id = self::dispatch($importer,$msg);
// Now distribute it to the followers // Now distribute it to the followers
$r = q("SELECT `user`.* FROM `user` WHERE `user`.`uid` IN $r = q("SELECT `user`.* FROM `user` WHERE `user`.`uid` IN
(SELECT `contact`.`uid` FROM `contact` WHERE `contact`.`network` = '%s' AND `contact`.`addr` = '%s') (SELECT `contact`.`uid` FROM `contact` WHERE `contact`.`network` = '%s' AND `contact`.`addr` = '%s')
@ -320,7 +318,7 @@ class Diaspora {
dbesc(NETWORK_DIASPORA), dbesc(NETWORK_DIASPORA),
dbesc($msg["author"]) dbesc($msg["author"])
); );
if ($r) { if (dbm::is_result($r)) {
foreach ($r as $rr) { foreach ($r as $rr) {
logger("delivering to: ".$rr["username"]); logger("delivering to: ".$rr["username"]);
self::dispatch($rr,$msg); self::dispatch($rr,$msg);
@ -329,6 +327,14 @@ class Diaspora {
logger("No subscribers for ".$msg["author"]." ".print_r($msg, true), LOGGER_DEBUG); logger("No subscribers for ".$msg["author"]." ".print_r($msg, true), LOGGER_DEBUG);
} }
$social_relay = (bool)Config::get('system', 'relay_subscribe', false);
// Use a dummy importer to import the data for the public copy
if (dbm::is_result($r) OR $social_relay) {
$importer = array("uid" => 0, "page-flags" => PAGE_FREELOVE);
$message_id = self::dispatch($importer,$msg);
}
return $message_id; return $message_id;
} }

View file

@ -1,5 +1,7 @@
<?php <?php
/// @TODO This file has DOS line endings!
use \Friendica\Core\Config;
require_once("mod/hostxrd.php"); require_once("mod/hostxrd.php");
require_once("mod/nodeinfo.php"); require_once("mod/nodeinfo.php");
@ -23,27 +25,25 @@ function _well_known_init(App $a) {
function wk_social_relay(App $a) { function wk_social_relay(App $a) {
define('SR_SCOPE_ALL', 'all'); $subscribe = (bool)Config::get('system', 'relay_subscribe', false);
define('SR_SCOPE_TAGS', 'tags');
$subscribe = (bool)get_config('system', 'relay_subscribe'); if ($subscribe) {
$scope = Config::get('system', 'relay_scope', SR_SCOPE_ALL);
if ($subscribe) } else {
$scope = get_config('system', 'relay_scope'); $scope = SR_SCOPE_NONE;
else }
$scope = "";
$tags = array(); $tags = array();
if ($scope == SR_SCOPE_TAGS) { if ($scope == SR_SCOPE_TAGS) {
$server_tags = Config::get('system', 'relay_server_tags');
$server_tags = get_config('system', 'relay_server_tags');
$tagitems = explode(",", $server_tags); $tagitems = explode(",", $server_tags);
foreach($tagitems AS $tag) foreach($tagitems AS $tag) {
$tags[trim($tag, "# ")] = trim($tag, "# "); $tags[trim($tag, "# ")] = trim($tag, "# ");
}
if (get_config('system', 'relay_user_tags')) { if (Config::get('system', 'relay_user_tags')) {
$terms = q("SELECT DISTINCT(`term`) FROM `search`"); $terms = q("SELECT DISTINCT(`term`) FROM `search`");
foreach($terms AS $term) { foreach($terms AS $term) {
@ -54,8 +54,9 @@ function wk_social_relay(App $a) {
} }
$taglist = array(); $taglist = array();
foreach($tags AS $tag) foreach($tags AS $tag) {
$taglist[] = $tag; $taglist[] = $tag;
}
$relay = array("subscribe" => $subscribe, $relay = array("subscribe" => $subscribe,
"scope" => $scope, "scope" => $scope,