aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorMike Macgirvin <mike@macgirvin.com>2010-09-26 16:30:21 -0700
committerMike Macgirvin <mike@macgirvin.com>2010-09-26 16:30:21 -0700
commitb91494d22ec1bcf7724f36c1df90d83178f6e47f (patch)
tree689ef1382e8e9c6a6fe98b59f6d7ece26ffce341 /include
parent0ebd4aa78303792a97c111229080224ba1bcf2de (diff)
downloadvolse-hubzilla-b91494d22ec1bcf7724f36c1df90d83178f6e47f.tar.gz
volse-hubzilla-b91494d22ec1bcf7724f36c1df90d83178f6e47f.tar.bz2
volse-hubzilla-b91494d22ec1bcf7724f36c1df90d83178f6e47f.zip
preliminary network abstraction, configurable debugging.
Diffstat (limited to 'include')
-rw-r--r--include/items.php90
-rw-r--r--include/notifier.php189
-rw-r--r--include/poller.php3
3 files changed, 152 insertions, 130 deletions
diff --git a/include/items.php b/include/items.php
index 822845dee..ea95c4f1d 100644
--- a/include/items.php
+++ b/include/items.php
@@ -464,3 +464,93 @@ function item_store($arr) {
return $current_post;
}
+
+function get_item_contact($item,$contacts) {
+ if(! count($contacts) || (! is_array($item)))
+ return false;
+ foreach($contacts as $contact) {
+ if($contact['id'] == $item['contact-id']) {
+ return $contact;
+ break; // NOTREACHED
+ }
+ }
+ return false;
+}
+
+
+function dfrn_deliver($contact,$atom,$debugging = false) {
+
+
+ if((! strlen($contact['dfrn-id'])) && (! $contact['duplex']))
+ return 3;
+
+ $idtosend = $orig_id = (($contact['dfrn-id']) ? $contact['dfrn-id'] : $contact['issued-id']);
+
+ if($contact['duplex'] && $contact['dfrn-id'])
+ $idtosend = '0:' . $orig_id;
+ if($contact['duplex'] && $contact['issued-id'])
+ $idtosend = '1:' . $orig_id;
+
+ $url = $contact['notify'] . '?dfrn_id=' . $idtosend;
+
+ if($debugging)
+ echo "URL: $url";
+
+ $xml = fetch_url($url);
+
+ if($debugging)
+ echo $xml;
+
+ if(! $xml)
+ return 3;
+
+ $res = simplexml_load_string($xml);
+
+ if((intval($res->status) != 0) || (! strlen($res->challenge)) || (! strlen($res->dfrn_id)))
+ return (($res->status) ? $res->status : 3);
+
+ $postvars = array();
+ $sent_dfrn_id = hex2bin($res->dfrn_id);
+ $challenge = hex2bin($res->challenge);
+
+ $final_dfrn_id = '';
+
+ if($contact['duplex'] && strlen($contact['prvkey'])) {
+ openssl_private_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['prvkey']);
+ openssl_private_decrypt($challenge,$postvars['challenge'],$contact['prvkey']);
+ }
+ else {
+ openssl_public_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['pubkey']);
+ openssl_public_decrypt($challenge,$postvars['challenge'],$contact['pubkey']);
+ }
+
+ $final_dfrn_id = substr($final_dfrn_id, 0, strpos($final_dfrn_id, '.'));
+
+ if(strpos($final_dfrn_id,':') == 1)
+ $final_dfrn_id = substr($final_dfrn_id,2);
+
+ if($final_dfrn_id != $orig_id) {
+ // did not decode properly - cannot trust this site
+ return 3;
+ }
+
+ $postvars['dfrn_id'] = $idtosend;
+
+
+ if(($contact['rel']) && ($contact['rel'] != REL_FAN) && (! $contact['blocked']) && (! $contact['readonly'])) {
+ $postvars['data'] = $atom;
+ }
+ else {
+ $postvars['data'] = str_replace('<dfrn:comment-allow>1','<dfrn:comment-allow>0',$atom);
+ }
+
+ $xml = post_url($contact['notify'],$postvars);
+
+ if($debugging)
+ echo $xml;
+
+ $res = simplexml_load_string($xml);
+
+ return $res->status;
+
+}
diff --git a/include/notifier.php b/include/notifier.php
index 16f470f18..571677aa3 100644
--- a/include/notifier.php
+++ b/include/notifier.php
@@ -1,7 +1,5 @@
<?php
- $debugging = false;
-
require_once("boot.php");
$a = new App;
@@ -11,10 +9,14 @@
$db = new dba($db_host, $db_user, $db_pass, $db_data);
unset($db_host, $db_user, $db_pass, $db_data);
+
+ $debugging = get_config('system','debugging');
+
require_once("session.php");
require_once("datetime.php");
require_once('include/items.php');
+
if($argc < 3)
exit;
@@ -164,9 +166,8 @@
}
else {
-
if($followup) {
- foreach($items as $item) {
+ foreach($items as $item) { // there is only one item
$verb = construct_verb($item);
$actobj = construct_activity($item);
@@ -182,7 +183,7 @@
'$item_id' => xmlify($item['uri']),
'$title' => xmlify($item['title']),
'$published' => xmlify(datetime_convert('UTC', 'UTC', $item['created'] . '+00:00' , ATOM_TIME)),
- '$updated' => xmlify(datetime_convert('UTC', 'UTC', $item['edited'] . '+00:00' , ATOM_TIME)),
+ '$updated' => xmlify(datetime_convert('UTC', 'UTC', $item['edited'] . '+00:00' , ATOM_TIME)),
'$location' => xmlify($item['location']),
'$type' => 'text',
'$verb' => xmlify($verb),
@@ -203,51 +204,50 @@
));
}
else {
- foreach($contacts as $contact) {
- if($item['contact-id'] == $contact['id']) {
-
- $verb = construct_verb($item);
- $actobj = construct_activity($item);
-
- if($item['parent'] == $item['id']) {
- $atom .= replace_macros($item_template, array(
- '$name' => xmlify($contact['name']),
- '$profile_page' => xmlify($contact['url']),
- '$thumb' => xmlify($contact['thumb']),
- '$owner_name' => xmlify($item['owner-name']),
- '$owner_profile_page' => xmlify($item['owner-link']),
- '$owner_thumb' => xmlify($item['owner-avatar']),
- '$item_id' => xmlify($item['uri']),
- '$title' => xmlify($item['title']),
- '$published' => xmlify(datetime_convert('UTC', 'UTC', $item['created'] . '+00:00' , ATOM_TIME)),
- '$updated' => xmlify(datetime_convert('UTC', 'UTC', $item['edited'] . '+00:00' , ATOM_TIME)),
- '$location' => xmlify($item['location']),
- '$type' => 'text',
- '$verb' => xmlify($verb),
- '$actobj' => $actobj,
- '$content' => xmlify($item['body']),
- '$comment_allow' => (($item['last-child']) ? 1 : 0)
- ));
- }
- else {
- $atom .= replace_macros($cmnt_template, array(
- '$name' => xmlify($contact['name']),
- '$profile_page' => xmlify($contact['url']),
- '$thumb' => xmlify($contact['thumb']),
- '$item_id' => xmlify($item['uri']),
- '$title' => xmlify($item['title']),
- '$published' => xmlify(datetime_convert('UTC', 'UTC', $item['created'] . '+00:00' , ATOM_TIME)),
- '$updated' => xmlify(datetime_convert('UTC', 'UTC', $item['edited'] . '+00:00' , ATOM_TIME)),
- '$content' => xmlify($item['body']),
- '$location' => xmlify($item['location']),
- '$type' => 'text',
- '$verb' => xmlify($verb),
- '$actobj' => $actobj,
- '$parent_id' => xmlify($item['parent-uri']),
- '$comment_allow' => (($item['last-child']) ? 1 : 0)
- ));
- }
- }
+ $contact = get_item_contact($item,$contacts);
+ if(! $contact)
+ continue;
+
+ $verb = construct_verb($item);
+ $actobj = construct_activity($item);
+
+ if($item['parent'] == $item['id']) {
+ $atom .= replace_macros($item_template, array(
+ '$name' => xmlify($contact['name']),
+ '$profile_page' => xmlify($contact['url']),
+ '$thumb' => xmlify($contact['thumb']),
+ '$owner_name' => xmlify($item['owner-name']),
+ '$owner_profile_page' => xmlify($item['owner-link']),
+ '$owner_thumb' => xmlify($item['owner-avatar']),
+ '$item_id' => xmlify($item['uri']),
+ '$title' => xmlify($item['title']),
+ '$published' => xmlify(datetime_convert('UTC', 'UTC', $item['created'] . '+00:00' , ATOM_TIME)),
+ '$updated' => xmlify(datetime_convert('UTC', 'UTC', $item['edited'] . '+00:00' , ATOM_TIME)),
+ '$location' => xmlify($item['location']),
+ '$type' => 'text',
+ '$verb' => xmlify($verb),
+ '$actobj' => $actobj,
+ '$content' => xmlify($item['body']),
+ '$comment_allow' => (($item['last-child']) ? 1 : 0)
+ ));
+ }
+ else {
+ $atom .= replace_macros($cmnt_template, array(
+ '$name' => xmlify($contact['name']),
+ '$profile_page' => xmlify($contact['url']),
+ '$thumb' => xmlify($contact['thumb']),
+ '$item_id' => xmlify($item['uri']),
+ '$title' => xmlify($item['title']),
+ '$published' => xmlify(datetime_convert('UTC', 'UTC', $item['created'] . '+00:00' , ATOM_TIME)),
+ '$updated' => xmlify(datetime_convert('UTC', 'UTC', $item['edited'] . '+00:00' , ATOM_TIME)),
+ '$content' => xmlify($item['body']),
+ '$location' => xmlify($item['location']),
+ '$type' => 'text',
+ '$verb' => xmlify($verb),
+ '$actobj' => $actobj,
+ '$parent_id' => xmlify($item['parent-uri']),
+ '$comment_allow' => (($item['last-child']) ? 1 : 0)
+ ));
}
}
}
@@ -258,10 +258,6 @@
if($debugging)
echo $atom;
- // create a clone of this feed but with comments disabled to send to those who can't respond.
-
- $atom_nowrite = str_replace('<dfrn:comment-allow>1','<dfrn:comment-allow>0',$atom);
-
if($followup)
$recip_str = $parent['contact-id'];
@@ -277,86 +273,21 @@
// delivery loop
- foreach($r as $rr) {
- if($rr['self'])
- continue;
-
- if((! strlen($rr['dfrn-id'])) && (! $rr['duplex']))
+ foreach($r as $contact) {
+ if($contact['self'])
continue;
+ $deliver_status = 0;
- $idtosend = $orig_id = (($rr['dfrn-id']) ? $rr['dfrn-id'] : $rr['issued-id']);
-
- if($rr['duplex'] && $rr['dfrn-id'])
- $idtosend = '0:' . $orig_id;
- if($rr['duplex'] && $rr['issued-id'])
- $idtosend = '1:' . $orig_id;
-
- $url = $rr['notify'] . '?dfrn_id=' . $idtosend;
-
- if($debugging)
- echo "URL: $url";
-
- $xml = fetch_url($url);
-
- if($debugging)
- echo $xml;
-
- if(! $xml)
- continue;
-
- $res = simplexml_load_string($xml);
-
- if((intval($res->status) != 0) || (! strlen($res->challenge)) || (! strlen($res->dfrn_id)))
- continue;
-
- $postvars = array();
-
- $sent_dfrn_id = hex2bin($res->dfrn_id);
- $challenge = hex2bin($res->challenge);
-
- $final_dfrn_id = '';
-
- if($rr['duplex'] && strlen($rr['prvkey'])) {
- openssl_private_decrypt($sent_dfrn_id,$final_dfrn_id,$rr['prvkey']);
- openssl_private_decrypt($challenge,$postvars['challenge'],$rr['prvkey']);
- }
- else {
- openssl_public_decrypt($sent_dfrn_id,$final_dfrn_id,$rr['pubkey']);
- openssl_public_decrypt($challenge,$postvars['challenge'],$rr['pubkey']);
- }
-
- $final_dfrn_id = substr($final_dfrn_id, 0, strpos($final_dfrn_id, '.'));
-
- if(strpos($final_dfrn_id,':') == 1)
- $final_dfrn_id = substr($final_dfrn_id,2);
-
- if($final_dfrn_id != $orig_id) {
- // did not decode properly - cannot trust this site
- continue;
- }
-
- $postvars['dfrn_id'] = $idtosend;
-
- if(($rr['rel']) && ($rr['rel'] != REL_FAN) && (! $rr['blocked']) && (! $rr['readonly'])) {
- $postvars['data'] = $atom;
- }
- else {
- $postvars['data'] = $atom_nowrite;
+ switch($contact['network']) {
+ case 'dfrn':
+ $deliver_status = dfrn_deliver($contact,$atom,$debugging);
+ break;
+ default:
+ break;
}
- $xml = post_url($rr['notify'],$postvars);
-
- if($debugging)
- echo $xml;
-
- $res = simplexml_load_string($xml);
-
- // Currently there is no retry attempt for failed mail delivery.
- // We need to handle this in the UI, report the non-deliverables and try again
-
- if(($cmd == 'mail') && (intval($res->status) == 0)) {
-
+ if(($cmd == 'mail') && ($deliver_status == 0)) {
$r = q("UPDATE `mail` SET `delivered` = 1 WHERE `id` = %d LIMIT 1",
intval($item_id)
);
diff --git a/include/poller.php b/include/poller.php
index 47dae1a73..f35d1c7b0 100644
--- a/include/poller.php
+++ b/include/poller.php
@@ -1,6 +1,5 @@
<?php
- $debugging = false;
require_once('boot.php');
@@ -18,6 +17,8 @@
require_once('include/Contact.php');
+ $debugging = get_config('system','debugging');
+
$a->set_baseurl(get_config('system','url'));
$contacts = q("SELECT * FROM `contact`