aboutsummaryrefslogtreecommitdiffstats
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
parent0ebd4aa78303792a97c111229080224ba1bcf2de (diff)
downloadvolse-hubzilla-b91494d22ec1bcf7724f36c1df90d83178f6e47f.tar.gz
volse-hubzilla-b91494d22ec1bcf7724f36c1df90d83178f6e47f.tar.bz2
volse-hubzilla-b91494d22ec1bcf7724f36c1df90d83178f6e47f.zip
preliminary network abstraction, configurable debugging.
-rw-r--r--boot.php4
-rw-r--r--include/items.php90
-rw-r--r--include/notifier.php189
-rw-r--r--include/poller.php3
-rw-r--r--mod/dfrn_notify.php4
-rw-r--r--mod/item.php7
-rw-r--r--mod/like.php6
-rw-r--r--mod/message.php8
-rw-r--r--mod/photos.php7
-rw-r--r--mod/profile.php3
10 files changed, 178 insertions, 143 deletions
diff --git a/boot.php b/boot.php
index 83828a0df..8dd7c7440 100644
--- a/boot.php
+++ b/boot.php
@@ -605,10 +605,12 @@ if(! function_exists('get_config')) {
function get_config($family, $key, $instore = false) {
global $a;
+
if(! $instore) {
if(isset($a->config[$family][$key])) {
- if($a->config[$family][$key] == '!<unset>!')
+ if($a->config[$family][$key] === '!<unset>!') {
return false;
+ }
return $a->config[$family][$key];
}
}
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`
diff --git a/mod/dfrn_notify.php b/mod/dfrn_notify.php
index f2fadee8c..d82f80df8 100644
--- a/mod/dfrn_notify.php
+++ b/mod/dfrn_notify.php
@@ -234,8 +234,10 @@ function dfrn_notify_post(&$a) {
if($datarray['type'] == 'remote-comment') {
$php_path = ((strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
+ $proc_debug = get_config('system','proc_debug');
- proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"comment-import\" \"$posted_id\" &",
+
+ proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"comment-import\" \"$posted_id\" $proc_debug &",
array(),$foo));
if(($importer['notify-flags'] & NOTIFY_COMMENT) && (! $importer['self'])) {
diff --git a/mod/item.php b/mod/item.php
index c98d77331..922a407ef 100644
--- a/mod/item.php
+++ b/mod/item.php
@@ -226,8 +226,9 @@ function item_post(&$a) {
}
$php_path = ((strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
+ $proc_debug = get_config('system','proc_debug');
- proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"$notify_type\" \"$post_id\" &",
+ proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"$notify_type\" \"$post_id\" $proc_debug &",
array(),$foo));
goaway($a->get_baseurl() . "/" . $_POST['return'] );
@@ -314,10 +315,12 @@ function item_content(&$a) {
}
$drop_id = intval($item['id']);
$php_path = ((strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
+ $proc_debug = get_config('system','proc_debug');
+
// send the notification upstream/downstream as the case may be
- proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"drop\" \"$drop_id\" &",
+ proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"drop\" \"$drop_id\" $proc_debug &",
array(), $foo));
goaway($a->get_baseurl() . '/' . $_SESSION['return_url']);
diff --git a/mod/like.php b/mod/like.php
index 2ee887241..10a466b50 100644
--- a/mod/like.php
+++ b/mod/like.php
@@ -96,8 +96,9 @@ function like_content(&$a) {
);
$php_path = ((strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
+ $proc_debug = get_config('system','proc_debug');
- proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"like\" \"$post_id\" &",
+ proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"like\" \"$post_id\" $proc_debug &",
array(),$foo));
return;
}
@@ -163,8 +164,9 @@ EOT;
$php_path = ((strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
+ $proc_debug = get_config('system','proc_debug');
- proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"like\" \"$post_id\" &",
+ proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"like\" \"$post_id\" $proc_debug &",
array(),$foo));
return; // NOTREACHED
diff --git a/mod/message.php b/mod/message.php
index 7406ef178..a16b0d8cf 100644
--- a/mod/message.php
+++ b/mod/message.php
@@ -68,9 +68,11 @@ function message_post(&$a) {
$post_id = $r[0]['id'];
$php_path = ((strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
+ $proc_debug = get_config('system','proc_debug');
+notice("\"$php_path\" \"include/notifier.php\" \"mail\" \"$post_id\" $proc_debug &");
if($post_id) {
- proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"mail\" \"$post_id\" &",
+ proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"mail\" \"$post_id\" $proc_debug &",
array(),$foo));
notice( t('Message sent.') . EOL );
}
@@ -136,8 +138,10 @@ function message_content(&$a) {
if(($a->argc > 2) && ($a->argv[1] == 'redeliver') && intval($a->argv[2])) {
$post_id = intval($a->argv[2]);
$php_path = ((strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
+ $proc_debug = get_config('system','proc_debug');
- proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"mail\" \"$post_id\" &",
+
+ proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"mail\" \"$post_id\" $proc_debug & ",
array(),$foo));
goaway($a->get_baseurl() . '/message' );
}
diff --git a/mod/photos.php b/mod/photos.php
index a807c926c..705c76200 100644
--- a/mod/photos.php
+++ b/mod/photos.php
@@ -125,11 +125,12 @@ function photos_post(&$a) {
$drop_id = intval($rr['id']);
$php_path = ((strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
+ $proc_debug = get_config('system','proc_debug');
// send the notification upstream/downstream as the case may be
if($rr['visible'])
- proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"drop\" \"$drop_id\" & ",
+ proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"drop\" \"$drop_id\" $proc_debug & ",
array(),$foo));
}
@@ -165,10 +166,12 @@ function photos_post(&$a) {
$drop_id = intval($i[0]['id']);
$php_path = ((strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
+ $proc_debug = get_config('system','proc_debug']);
+
// send the notification upstream/downstream as the case may be
if($i[0]['visible'])
- proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"drop\" \"$drop_id\" & ",
+ proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"drop\" \"$drop_id\" $proc_debug & ",
array(),$foo));
}
}
diff --git a/mod/profile.php b/mod/profile.php
index 7abc0e166..8c23b6c57 100644
--- a/mod/profile.php
+++ b/mod/profile.php
@@ -77,9 +77,6 @@ function profile_init(&$a) {
function profile_content(&$a, $update = 0) {
- file_put_contents('uid.log',"{$_SERVER['QUERY_STRING']} ". session_id() . "\n", FILE_APPEND);
-
-
require_once("include/bbcode.php");
require_once('include/security.php');