Messages are now sent to the relay server - and the options are configurable

This commit is contained in:
Michael Vogel 2015-08-09 20:39:11 +02:00
parent 65921bf2e7
commit b24453f8da
3 changed files with 142 additions and 72 deletions

62
include/diaspora.php Executable file → Normal file
View file

@ -35,11 +35,13 @@ function diaspora_dispatch_public($msg) {
} }
} }
else { else {
logger('diaspora_public: no subscribers '.print_r($msg, true)); logger('diaspora_public: no subscribers for '.$msg["author"].' '.print_r($msg, true));
// Use a dummy importer // Use a dummy importer
$importer = array("uid" => 0, "page-flags" => PAGE_FREELOVE); $importer = array("uid" => 0, "page-flags" => PAGE_FREELOVE);
diaspora_dispatch($importer,$msg); $result = diaspora_dispatch($importer,$msg);
logger("Dispatcher reported ".$result, LOGGER_DEBUG);
} }
} }
@ -833,8 +835,10 @@ function diaspora_post($importer,$xml,$msg) {
} }
$contact = diaspora_get_contact_by_handle($importer['uid'],$diaspora_handle); $contact = diaspora_get_contact_by_handle($importer['uid'],$diaspora_handle);
if(! $contact) if(! $contact) {
return; logger('diaspora_post: A Contact for handle '.$diaspora_handle.' and user '.$importer['uid'].' was not found');
return 203;
}
if(! diaspora_post_allow($importer,$contact)) { if(! diaspora_post_allow($importer,$contact)) {
logger('diaspora_post: Ignoring this author.'); logger('diaspora_post: Ignoring this author.');
@ -849,7 +853,7 @@ function diaspora_post($importer,$xml,$msg) {
); );
if(count($r)) { if(count($r)) {
logger('diaspora_post: message exists: ' . $guid); logger('diaspora_post: message exists: ' . $guid);
return; return 208;
} }
$created = unxmlify($xml->created_at); $created = unxmlify($xml->created_at);
@ -915,7 +919,9 @@ function diaspora_post($importer,$xml,$msg) {
DiasporaFetchGuid($datarray); DiasporaFetchGuid($datarray);
$message_id = item_store($datarray); $message_id = item_store($datarray);
return; logger("Stored item with message id ".$message_id, LOGGER_DEBUG);
return 201;
} }
@ -3074,3 +3080,47 @@ function diaspora_transmit($owner,$contact,$slap,$public_batch,$queue_run=false)
return(($return_code) ? $return_code : (-1)); return(($return_code) ? $return_code : (-1));
} }
function diaspora_fetch_relay() {
$serverdata = get_config("system", "relay_server");
if ($serverdata == "")
return array();
$relay = array();
$servers = explode(",", $serverdata);
foreach($servers AS $server) {
$server = trim($server);
$batch = $server."/receive/public";
$relais = q("SELECT `batch`, `id`, `name`,`network` FROM `contact` WHERE `uid` = 0 AND `batch` = '%s' LIMIT 1", dbesc($batch));
if (!$relais) {
$addr = "relay@".str_replace("http://", "", normalise_link($server));
$r = q("INSERT INTO `contact` (`uid`, `created`, `name`, `nick`, `addr`, `url`, `nurl`, `batch`, `network`, `rel`, `blocked`, `pending`, `writable`, `name-date`, `uri-date`, `avatar-date`)
VALUES (0, '%s', '%s', 'relay', '%s', '%s', '%s', '%s', '%s', %d, 0, 0, 1, '%s', '%s', '%s')",
datetime_convert(),
dbesc($addr),
dbesc($addr),
dbesc($server),
dbesc(normalise_link($server)),
dbesc($batch),
dbesc(NETWORK_DIASPORA),
intval(CONTACT_IS_FOLLOWER),
dbesc(datetime_convert()),
dbesc(datetime_convert()),
dbesc(datetime_convert())
);
$relais = q("SELECT `batch`, `id`, `name`,`network` FROM `contact` WHERE `uid` = 0 AND `batch` = '%s' LIMIT 1", dbesc($batch));
if ($relais)
$relay[] = $relais[0];
} else
$relay[] = $relais[0];
}
return $relay;
}

View file

@ -3,6 +3,7 @@ require_once("boot.php");
require_once('include/queue_fn.php'); require_once('include/queue_fn.php');
require_once('include/html2plain.php'); require_once('include/html2plain.php');
require_once("include/Scrape.php"); require_once("include/Scrape.php");
require_once('include/diaspora.php');
/* /*
* This file was at one time responsible for doing all deliveries, but this caused * This file was at one time responsible for doing all deliveries, but this caused
@ -874,8 +875,6 @@ function notifier_run(&$argv, &$argc){
} }
break; break;
case NETWORK_DIASPORA: case NETWORK_DIASPORA:
require_once('include/diaspora.php');
if(get_config('system','dfrn_only') || (! get_config('system','diaspora_enabled'))) if(get_config('system','dfrn_only') || (! get_config('system','diaspora_enabled')))
break; break;
@ -958,6 +957,11 @@ function notifier_run(&$argv, &$argc){
if($public_message) { if($public_message) {
if (!$followup)
$r0 = diaspora_fetch_relay();
else
$r0 = array();
$r1 = q("SELECT DISTINCT(`batch`), `id`, `name`,`network` FROM `contact` WHERE `network` = '%s' $r1 = q("SELECT DISTINCT(`batch`), `id`, `name`,`network` FROM `contact` WHERE `network` = '%s'
AND `uid` = %d AND `rel` != %d group by `batch` ORDER BY rand() ", AND `uid` = %d AND `rel` != %d group by `batch` ORDER BY rand() ",
dbesc(NETWORK_DIASPORA), dbesc(NETWORK_DIASPORA),
@ -974,7 +978,7 @@ function notifier_run(&$argv, &$argc){
intval(CONTACT_IS_SHARING) intval(CONTACT_IS_SHARING)
); );
$r = array_merge($r2,$r1); $r = array_merge($r2,$r1,$r0);
if(count($r)) { if(count($r)) {
logger('pubdeliver: ' . print_r($r,true), LOGGER_DEBUG); logger('pubdeliver: ' . print_r($r,true), LOGGER_DEBUG);

View file

@ -21,24 +21,40 @@ function wk_social_relay(&$a) {
define('SR_SCOPE_ALL', 'all'); define('SR_SCOPE_ALL', 'all');
define('SR_SCOPE_TAGS', 'tags'); define('SR_SCOPE_TAGS', 'tags');
$subscribe = (bool)true; $subscribe = (bool)get_config('system', 'relay_subscribe');
$scope = SR_SCOPE_ALL;
//$scope = SR_SCOPE_TAGS; if ($subscribe)
$scope = get_config('system', 'relay_scope');
else
$scope = "";
$tags = array(); $tags = array();
if ($scope == SR_SCOPE_TAGS) { if ($scope == SR_SCOPE_TAGS) {
$server_tags = get_config('system', 'relay_server_tags');
$tagitems = explode(",", $server_tags);
foreach($tagitems AS $tag)
$tags[trim($tag, "# ")] = trim($tag, "# ");
if (get_config('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) {
$tag = trim($term["term"], "#"); $tag = trim($term["term"], "#");
$tags[] = $tag; $tags[$tag] = $tag;
}
} }
} }
$taglist = array();
foreach($tags AS $tag)
$taglist[] = $tag;
$relay = array("subscribe" => $subscribe, $relay = array("subscribe" => $subscribe,
"scope" => $scope, "scope" => $scope,
"tags" => array_unique($tags)); "tags" => $taglist);
header('Content-type: application/json; charset=utf-8'); header('Content-type: application/json; charset=utf-8');
echo json_encode($relay, true); echo json_encode($relay, true);