Merge pull request #6037 from annando/ap-signatures
Diaspora signatures are now stored and transmitted correctly
This commit is contained in:
commit
933f43218a
6 changed files with 29 additions and 23 deletions
|
@ -726,6 +726,11 @@ function item_post(App $a) {
|
||||||
unset($datarray['self']);
|
unset($datarray['self']);
|
||||||
unset($datarray['api_source']);
|
unset($datarray['api_source']);
|
||||||
|
|
||||||
|
$signed = Diaspora::createCommentSignature($author, $datarray);
|
||||||
|
if (!empty($signed)) {
|
||||||
|
$datarray['diaspora_signed_text'] = json_encode($signed);
|
||||||
|
}
|
||||||
|
|
||||||
$post_id = Item::insert($datarray);
|
$post_id = Item::insert($datarray);
|
||||||
|
|
||||||
if (!$post_id) {
|
if (!$post_id) {
|
||||||
|
@ -764,9 +769,6 @@ function item_post(App $a) {
|
||||||
'parent_uri' => $parent_item['uri']
|
'parent_uri' => $parent_item['uri']
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store the comment signature information in case we need to relay to Diaspora
|
|
||||||
Diaspora::storeCommentSignature($datarray, $author, ($self ? $user['prvkey'] : false), $post_id);
|
|
||||||
} else {
|
} else {
|
||||||
if (($contact_record != $author) && !count($forum_contact)) {
|
if (($contact_record != $author) && !count($forum_contact)) {
|
||||||
notification([
|
notification([
|
||||||
|
|
|
@ -3113,7 +3113,7 @@ class Item extends BaseObject
|
||||||
|
|
||||||
$signed = Diaspora::createLikeSignature($item_contact, $new_item);
|
$signed = Diaspora::createLikeSignature($item_contact, $new_item);
|
||||||
if (!empty($signed)) {
|
if (!empty($signed)) {
|
||||||
$new_item['diaspora_signed_text'] = $signed;
|
$new_item['diaspora_signed_text'] = json_encode($signed);
|
||||||
}
|
}
|
||||||
|
|
||||||
$new_item_id = self::insert($new_item);
|
$new_item_id = self::insert($new_item);
|
||||||
|
|
|
@ -144,6 +144,8 @@ class Processor
|
||||||
self::fetchMissingActivity($activity['reply-to-id'], $activity);
|
self::fetchMissingActivity($activity['reply-to-id'], $activity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$item['diaspora_signed_text'] = defaults($activity, 'diaspora:comment', '');
|
||||||
|
|
||||||
self::postItem($activity, $item);
|
self::postItem($activity, $item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -174,6 +176,8 @@ class Processor
|
||||||
$item['gravity'] = GRAVITY_ACTIVITY;
|
$item['gravity'] = GRAVITY_ACTIVITY;
|
||||||
$item['object-type'] = ACTIVITY_OBJ_NOTE;
|
$item['object-type'] = ACTIVITY_OBJ_NOTE;
|
||||||
|
|
||||||
|
$item['diaspora_signed_text'] = defaults($activity, 'diaspora:like', '');
|
||||||
|
|
||||||
self::postItem($activity, $item);
|
self::postItem($activity, $item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -260,7 +264,6 @@ class Processor
|
||||||
$item['tag'] = self::constructTagList($activity['tags'], $activity['sensitive']);
|
$item['tag'] = self::constructTagList($activity['tags'], $activity['sensitive']);
|
||||||
$item['app'] = $activity['generator'];
|
$item['app'] = $activity['generator'];
|
||||||
$item['plink'] = defaults($activity, 'alternate-url', $item['uri']);
|
$item['plink'] = defaults($activity, 'alternate-url', $item['uri']);
|
||||||
$item['diaspora_signed_text'] = defaults($activity, 'diaspora:comment', '');
|
|
||||||
|
|
||||||
$item = self::constructAttachList($activity['attachments'], $item);
|
$item = self::constructAttachList($activity['attachments'], $item);
|
||||||
|
|
||||||
|
|
|
@ -705,6 +705,7 @@ class Receiver
|
||||||
|
|
||||||
$object_data['diaspora:guid'] = JsonLD::fetchElement($object, 'diaspora:guid');
|
$object_data['diaspora:guid'] = JsonLD::fetchElement($object, 'diaspora:guid');
|
||||||
$object_data['diaspora:comment'] = JsonLD::fetchElement($object, 'diaspora:comment');
|
$object_data['diaspora:comment'] = JsonLD::fetchElement($object, 'diaspora:comment');
|
||||||
|
$object_data['diaspora:like'] = JsonLD::fetchElement($object, 'diaspora:like');
|
||||||
$object_data['actor'] = $object_data['author'] = $actor;
|
$object_data['actor'] = $object_data['author'] = $actor;
|
||||||
$object_data['context'] = JsonLD::fetchElement($object, 'as:context');
|
$object_data['context'] = JsonLD::fetchElement($object, 'as:context');
|
||||||
$object_data['conversation'] = JsonLD::fetchElement($object, 'ostatus:conversation');
|
$object_data['conversation'] = JsonLD::fetchElement($object, 'ostatus:conversation');
|
||||||
|
|
|
@ -627,6 +627,9 @@ class Transmitter
|
||||||
$data['object'] = self::createActivityFromItem($item_id, true);
|
$data['object'] = self::createActivityFromItem($item_id, true);
|
||||||
} else {
|
} else {
|
||||||
$data['diaspora:guid'] = $item['guid'];
|
$data['diaspora:guid'] = $item['guid'];
|
||||||
|
if (!empty($item['signed_text'])) {
|
||||||
|
$data['diaspora:like'] = $item['signed_text'];
|
||||||
|
}
|
||||||
$data['object'] = $item['thr-parent'];
|
$data['object'] = $item['thr-parent'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4150,23 +4150,27 @@ class Diaspora
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Stores the signature for comments that are created on our system
|
* @brief Creates the signature for Comments that are created on our system
|
||||||
*
|
*
|
||||||
* @param array $item The item array of the comment
|
* @param array $contact The contact array of the comment
|
||||||
* @param array $contact The contact array of the item owner
|
* @param array $item Item array
|
||||||
* @param string $uprvkey The private key of the sender
|
|
||||||
* @param int $message_id The message id of the comment
|
|
||||||
*
|
*
|
||||||
* @return bool Success
|
* @return array Signed content
|
||||||
*/
|
*/
|
||||||
public static function storeCommentSignature(array $item, array $contact, $uprvkey, $message_id)
|
public static function createCommentSignature(array $contact, array $item)
|
||||||
{
|
{
|
||||||
if ($uprvkey == "") {
|
// Is the contact the owner? Then fetch the private key
|
||||||
logger('No private key, so not storing comment signature', LOGGER_DEBUG);
|
if (!$contact['self'] || ($contact['uid'] == 0)) {
|
||||||
|
logger("No owner post, so not storing signature", LOGGER_DEBUG);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$contact["uprvkey"] = $uprvkey;
|
$user = DBA::selectFirst('user', ['prvkey'], ['uid' => $contact["uid"]]);
|
||||||
|
if (!DBA::isResult($user)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$contact["uprvkey"] = $user['prvkey'];
|
||||||
|
|
||||||
$message = self::constructComment($item, $contact);
|
$message = self::constructComment($item, $contact);
|
||||||
if ($message === false) {
|
if ($message === false) {
|
||||||
|
@ -4175,13 +4179,6 @@ class Diaspora
|
||||||
|
|
||||||
$message["author_signature"] = self::signature($contact, $message);
|
$message["author_signature"] = self::signature($contact, $message);
|
||||||
|
|
||||||
/*
|
return $message;
|
||||||
* Now store the signature more flexible to dynamically support new fields.
|
|
||||||
* This will break Diaspora compatibility with Friendica versions prior to 3.5.
|
|
||||||
*/
|
|
||||||
DBA::insert('sign', ['iid' => $message_id, 'signed_text' => json_encode($message)]);
|
|
||||||
|
|
||||||
logger('Stored diaspora comment signature');
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue