aboutsummaryrefslogtreecommitdiffstats
path: root/include/diaspora.php
diff options
context:
space:
mode:
Diffstat (limited to 'include/diaspora.php')
-rw-r--r--include/diaspora.php87
1 files changed, 52 insertions, 35 deletions
diff --git a/include/diaspora.php b/include/diaspora.php
index e089e3f04..6fe08dcd0 100644
--- a/include/diaspora.php
+++ b/include/diaspora.php
@@ -4,25 +4,11 @@ require_once('include/crypto.php');
require_once('include/items.php');
function get_diaspora_key($uri) {
- $key = '';
-
logger('Fetching diaspora key for: ' . $uri);
- $arr = lrdd($uri);
-
- if(is_array($arr)) {
- foreach($arr as $a) {
- if($a['@attributes']['rel'] === 'diaspora-public-key') {
- $key = base64_decode($a['@attributes']['href']);
- }
- }
- }
- else {
- return '';
- }
-
- if($key)
- return rsatopem($key);
+ $r = find_diaspora_person_by_handle($uri);
+ if($r)
+ return $r['pubkey'];
return '';
}
@@ -218,7 +204,7 @@ function diaspora_decode($importer,$xml) {
$encoding = $base->encoding;
$alg = $base->alg;
- // Diaspora devs: I can't even begin to tell you how sucky this is. Read the freaking spec.
+ // Diaspora devs: I can't even begin to tell you how sucky this is. Please read the spec.
$signed_data = $data . (($data[-1] != "\n") ? "\n" : '') . '.' . base64url_encode($type) . "\n" . '.' . base64url_encode($encoding) . "\n" . '.' . base64url_encode($alg) . "\n";
@@ -278,21 +264,33 @@ function diaspora_get_contact_by_handle($uid,$handle) {
return false;
}
-function find_person_by_handle($handle) {
- // we don't care about the uid, we just want to save an expensive webfinger probe
- $r = q("select * from contact where network = '%s' and addr = '%s' LIMIT 1",
- dbesc(NETWORK_DIASPORA),
- dbesc($handle)
- );
- if(count($r))
+function find_diaspora_person_by_handle($handle) {
+ $r = q("select * from fcontact where network = '%s' and addr = '%s' limit 1",
+ dbesc(NETWORK_DIASPORA),
+ dbesc($handle)
+ );
+ if(count($r)) {
+ // update record occasionally so it doesn't get stale
+ $d = strtotime($r[0]['updated'] . ' +00:00');
+ if($d < strtotime('now - 14 days')) {
+ q("delete from fcontact where id = %d limit 1",
+ intval($r[0]['id'])
+ );
+ }
+ else
return $r[0];
- $r = probe_url($handle);
- // need to cached this, perhaps in fcontact
- if(count($r))
- return ($r);
- return false;
+ }
+ require_once('include/Scrape.php');
+ $r = probe_url($handle, PROBE_DIASPORA);
+ if((count($r)) && ($r['network'] === NETWORK_DIASPORA)) {
+ add_fcontact($r);
+ return ($r);
+ }
+ return false;
}
+
+
function diaspora_request($importer,$xml) {
$sender_handle = unxmlify($xml->sender_handle);
@@ -497,7 +495,7 @@ function diaspora_comment($importer,$xml,$msg) {
$key = $msg['key'];
}
else {
- $person = find_person_by_handle($diaspora_handle);
+ $person = find_diaspora_person_by_handle($diaspora_handle);
if(is_array($person) && x($person,'pubkey'))
$key = $person['pubkey'];
@@ -512,6 +510,7 @@ function diaspora_comment($importer,$xml,$msg) {
return;
}
+
if($parent_author_signature) {
$owner_signed_data = $guid . ';' . $parent_guid . ';' . $text . ';' . $msg['author'];
@@ -578,8 +577,18 @@ function diaspora_comment($importer,$xml,$msg) {
$datarray['author-avatar'] = ((x($person,'thumb')) ? $person['thumb'] : $person['photo']);
$datarray['body'] = $body;
- item_store($datarray);
+ $message_id = item_store($datarray);
+ if(! $parent_author_signature) {
+ q("insert into sign (`iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
+ intval($message_id),
+ dbesc($author_signed_data),
+ dbesc(base64_encode($author_signature)),
+ dbesc($diaspora_handle)
+ );
+ }
+
+ // notify others
return;
}
@@ -654,7 +663,7 @@ function diaspora_like($importer,$xml,$msg) {
$key = $msg['key'];
}
else {
- $person = find_person_by_handle($diaspora_handle);
+ $person = find_diaspora_person_by_handle($diaspora_handle);
if(is_array($person) && x($person,'pubkey'))
$key = $person['pubkey'];
else {
@@ -736,12 +745,20 @@ EOT;
$arr['unseen'] = 1;
$arr['last-child'] = 0;
- $post_id = item_store($arr);
+ $message_id = item_store($arr);
+ if(! $parent_author_signature) {
+ q("insert into sign (`iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
+ intval($message_id),
+ dbesc($author_signed_data),
+ dbesc(base64_encode($author_signature)),
+ dbesc($diaspora_handle)
+ );
+ }
// FIXME send notification
-
+ return;
}
function diaspora_retraction($importer,$xml) {