Merge pull request #10574 from annando/diaspora-signature

Create the Diaspora signature for the correct user
This commit is contained in:
Hypolite Petovan 2021-08-05 10:54:50 -04:00 committed by GitHub
commit c31cb54e9f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 52 additions and 6 deletions

View file

@ -717,7 +717,7 @@ function conversation_add_children(array $parents, $block_authors, $order, $uid)
$max_comments = DI::config()->get('system', 'max_display_comments', 1000);
}
$params = ['order' => ['uri-id' => true]];
$params = ['order' => ['uri-id' => true, 'uid' => true]];
$activities = [];
$uriids = [];

View file

@ -1061,7 +1061,7 @@ class Item
// Create Diaspora signature
if ($item['origin'] && empty($item['diaspora_signed_text']) && ($item['gravity'] != GRAVITY_PARENT)) {
$signed = Diaspora::createCommentSignature($uid, $item);
$signed = Diaspora::createCommentSignature($item);
if (!empty($signed)) {
$item['diaspora_signed_text'] = json_encode($signed);
}

View file

@ -157,8 +157,8 @@ class User
$system['net-publish'] = false;
// Ensure that the user contains data
$user = DBA::selectFirst('user', ['prvkey'], ['uid' => 0]);
if (empty($user['prvkey'])) {
$user = DBA::selectFirst('user', ['prvkey', 'guid'], ['uid' => 0]);
if (empty($user['prvkey']) || empty($user['guid'])) {
$fields = [
'username' => $system['name'],
'nickname' => $system['nick'],
@ -167,12 +167,17 @@ class User
'prvkey' => $system['prvkey'],
'spubkey' => $system['spubkey'],
'sprvkey' => $system['sprvkey'],
'guid' => System::createUUID(),
'verified' => true,
'page-flags' => User::PAGE_FLAGS_SOAPBOX,
'account-type' => User::ACCOUNT_TYPE_RELAY,
];
DBA::update('user', $fields, ['uid' => 0]);
$system['guid'] = $fields['guid'];
} else {
$system['guid'] = $user['guid'];
}
return $system;

View file

@ -130,6 +130,25 @@ class Xrd extends BaseModule
'rel' => 'http://ostatus.org/schema/1.0/subscribe',
'template' => DI::baseUrl()->get() . '/follow?url={uri}',
],
[
'rel' => ActivityNamespace::FEED,
'type' => 'application/atom+xml',
'href' => $owner['poll'] ?? DI::baseUrl()->get(),
],
[
'rel' => 'salmon',
'href' => DI::baseUrl()->get() . '/salmon/' . $owner['nickname'],
],
[
'rel' => 'http://microformats.org/profile/hcard',
'type' => 'text/html',
'href' => DI::baseUrl()->get() . '/hcard/' . $owner['nickname'],
],
[
'rel' => 'http://joindiaspora.com/seed_location',
'type' => 'text/html',
'href' => DI::baseUrl()->get(),
],
]
];
header('Access-Control-Allow-Origin: *');

View file

@ -1412,6 +1412,8 @@ class Probe
$data["guid"] = $link["href"];
} elseif (($link["rel"] == "http://webfinger.net/rel/profile-page") && (($link["type"] ?? "") == "text/html") && !empty($link["href"])) {
$data["url"] = $link["href"];
} elseif (($link["rel"] == "http://webfinger.net/rel/profile-page") && empty($link["type"]) && !empty($link["href"])) {
$profile_url = $link["href"];
} elseif (($link["rel"] == ActivityNamespace::FEED) && !empty($link["href"])) {
$data["poll"] = $link["href"];
} elseif (($link["rel"] == ActivityNamespace::POCO) && !empty($link["href"])) {
@ -1428,6 +1430,10 @@ class Probe
}
}
if (empty($data["url"]) && !empty($profile_url)) {
$data["url"] = $profile_url;
}
if (empty($data["url"]) || empty($hcard_url)) {
return [];
}

View file

@ -4044,14 +4044,30 @@ class Diaspora
/**
* Creates the signature for Comments that are created on our system
*
* @param integer $uid The user of that comment
* @param array $item Item array
*
* @return array Signed content
* @throws \Exception
*/
public static function createCommentSignature($uid, array $item)
public static function createCommentSignature(array $item)
{
if (!empty($item['author-link'])) {
$url = $item['author-link'];
} else {
$contact = Contact::getById($item['author-id'], ['url']);
if (empty($contact['url'])) {
Logger::warning('Author Contact not found', ['author-id' => $item['author-id']]);
return false;
}
$url = $contact['url'];
}
$uid = User::getIdForURL($url);
if (empty($uid)) {
Logger::info('No owner post, so not storing signature', ['url' => $contact['url']]);
return false;
}
$owner = User::getOwnerDataById($uid);
if (empty($owner)) {
Logger::info('No owner post, so not storing signature');