return 'https://'.substr($addr,strpos($addr,'@')+1).'/posts/'.$guid;
}
+function diaspora_repair_signature($signature, $handle = "", $level = 1) {
+ if (base64_encode(base64_decode(base64_decode($signature))) == base64_decode($signature)) {
+ $signature = base64_decode($signature);
+ logger("Repaired double encoded signature from Diaspora/Hubzilla handle ".$handle." - level ".$level, LOGGER_DEBUG);
+
+ // Do a recursive call to be able to fix even multiple levels
+ if ($level < 10)
+ $signature = diaspora_repair_signature($signature, $handle, ++$level);
+ }
+
+ return($signature);
+}
+
function diaspora_post($importer,$xml,$msg) {
$a = get_app();
logger('diaspora_comment: top-level owner verification failed.');
return;
}
- }
- else {
+ } elseif($author_signature) {
// If there's no parent_author_signature, then we've received the comment
// from the comment creator. In that case, the person is commenting on
// our post, so he/she must be a contact of ours and his/her public key
}
}
+ if (!$parent_author_signature AND !$author_signature) {
+ logger("No signature in comment. Comment will be rejected.");
+ return;
+ }
+
// Phew! Everything checks out. Now create an item.
// Find the original comment author information.
//);
//}
- if(($parent_item['origin']) && (! $parent_author_signature)) {
+ // If we are the origin of the parent we store the original signature and notify our followers
+ if($parent_item['origin']) {
+ $author_signature_base64 = base64_encode($author_signature);
+ $author_signature_base64 = diaspora_repair_signature($author_signature_base64, $diaspora_handle);
+
q("insert into sign (`iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
intval($message_id),
dbesc($signed_data),
- dbesc(base64_encode($author_signature)),
+ dbesc($author_signature_base64),
dbesc($diaspora_handle)
);
- // if the message isn't already being relayed, notify others
- // the existence of parent_author_signature means the parent_author or owner
- // is already relaying.
-
+ // notify others
proc_run('php','include/notifier.php','comment-import',$message_id);
}
logger('diaspora_like: top-level owner verification failed.');
return;
}
- } else {
+ } elseif($author_signature) {
// If there's no parent_author_signature, then we've received the like
// from the like creator. In that case, the person is "like"ing
// our post, so he/she must be a contact of ours and his/her public key
}
}
+ if (!$parent_author_signature AND !$author_signature) {
+ logger("No signature in like. Like will be rejected.");
+ return;
+ }
+
// Phew! Everything checks out. Now create an item.
// Find the original comment author information.
// );
//}
- if(! $parent_author_signature) {
+ // If we are the origin of the parent we store the original signature and notify our followers
+ if($parent_item['origin']) {
+ $author_signature_base64 = base64_encode($author_signature);
+ $author_signature_base64 = diaspora_repair_signature($author_signature_base64, $diaspora_handle);
+
q("insert into sign (`iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
intval($message_id),
dbesc($signed_data),
- dbesc(base64_encode($author_signature)),
+ dbesc($author_signature_base64),
dbesc($diaspora_handle)
);
- }
- // if the message isn't already being relayed, notify others
- // the existence of parent_author_signature means the parent_author or owner
- // is already relaying. The parent_item['origin'] indicates the message was created on our system
-
- if(($parent_item['origin']) && (! $parent_author_signature))
+ // notify others
proc_run('php','include/notifier.php','comment-import',$message_id);
+ }
return;
}
return;
}
- }
- else {
+ } else {
$sig_decode = base64_decode($sig);
intval($r[0]['parent'])
);
if(count($p)) {
- if(($p[0]['origin']) && (! $parent_author_signature)) {
+ if($p[0]['origin']) {
q("insert into sign (`retract_iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
$r[0]['id'],
dbesc($signed_data),
'$handle' => xmlify($handle)
));
- logger('diaspora_send_relay: base message: ' . $msg, LOGGER_DATA);
+ logger('diaspora_send_relay: base message: ' . $msg, LOGGER_DEBUG);
logger('send guid '.$item['guid'], LOGGER_DEBUG);
$slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch)));