if ($no_exit) {
return false;
} else {
- throw new \Friendica\Network\HTTPException\BadRequestException();
+ throw new HTTPException\BadRequestException();
}
}
} else {
if ($no_exit) {
return false;
} else {
- throw new \Friendica\Network\HTTPException\BadRequestException();
+ throw new HTTPException\BadRequestException();
}
}
if ($no_exit) {
return false;
} else {
- throw new \Friendica\Network\HTTPException\BadRequestException();
+ throw new HTTPException\BadRequestException();
}
}
if ($no_exit) {
return false;
} else {
- throw new \Friendica\Network\HTTPException\BadRequestException();
+ throw new HTTPException\BadRequestException();
}
}
if ($no_exit) {
return false;
} else {
- throw new \Friendica\Network\HTTPException\BadRequestException();
+ throw new HTTPException\BadRequestException();
}
}
if (!$base) {
Logger::notice('unable to locate salmon data in xml');
- throw new \Friendica\Network\HTTPException\BadRequestException();
+ throw new HTTPException\BadRequestException();
}
$encoding = $base->encoding;
$alg = $base->alg;
-
$signed_data = $data . '.' . Strings::base64UrlEncode($type) . '.' . Strings::base64UrlEncode($encoding) . '.' . Strings::base64UrlEncode($alg);
-
// decode the data
$data = Strings::base64UrlDecode($data);
-
if ($public) {
$inner_decrypted = $data;
} else {
$key = self::key($author);
if (!$key) {
Logger::notice('Could not retrieve author key.');
- throw new \Friendica\Network\HTTPException\BadRequestException();
+ throw new HTTPException\BadRequestException();
}
$verify = Crypto::rsaVerify($signed_data, $signature, $key);
if (!$verify) {
Logger::notice('Message did not verify. Discarding.');
- throw new \Friendica\Network\HTTPException\BadRequestException();
+ throw new HTTPException\BadRequestException();
}
Logger::info('Message verified.');
*/
public static function dispatchPublic(array $msg, int $direction)
{
- $enabled = intval(DI::config()->get('system', 'diaspora_enabled'));
- if (!$enabled) {
+ if (!DI::config()->get('system', 'diaspora_enabled')) {
Logger::notice('Diaspora is disabled');
return false;
}
*/
private static function key(WebFingerUri $uri): string
{
- Logger::info('Fetching diaspora key', ['handle' => $uri->getAddr(), 'callstack' => System::callstack(20)]);
+ Logger::info('Fetching diaspora key', ['handle' => $uri->getAddr()]);
try {
return DI::dsprContact()->getByAddr($uri)->pubKey;
} catch (HTTPException\NotFoundException | \InvalidArgumentException $e) {
{
$item = Post::selectFirst(['id'], ['uid' => $uid, 'guid' => $guid]);
if (DBA::isResult($item)) {
- Logger::notice('Message ' . $guid . ' already exists for user ' . $uid);
+ Logger::notice('Message already exists.', ['uid' => $uid, 'guid' => $guid, 'id' => $item['id']]);
return $item['id'];
}
* Checks for links to posts in a message
*
* @param array $item The item array
+ *
* @return void
*/
private static function fetchGuid(array $item)
{
$fields = [
'id', 'parent', 'body', 'wall', 'uri', 'guid', 'private', 'origin',
+ 'allow_cid', 'allow_gid', 'deny_cid', 'deny_gid',
'author-name', 'author-link', 'author-avatar', 'gravity',
'owner-name', 'owner-link', 'owner-avatar'
];
$datarray['verb'] = Activity::POST;
$datarray['gravity'] = Item::GRAVITY_COMMENT;
+ $datarray['private'] = $toplevel_parent_item['private'];
+ $datarray['allow_cid'] = $toplevel_parent_item['allow_cid'];
+ $datarray['allow_gid'] = $toplevel_parent_item['allow_gid'];
+ $datarray['deny_cid'] = $toplevel_parent_item['deny_cid'];
+ $datarray['deny_gid'] = $toplevel_parent_item['deny_gid'];
+
$datarray['thr-parent'] = $thr_parent ?: $toplevel_parent_item['uri'];
$datarray['object-type'] = Activity\ObjectType::COMMENT;
$datarray['verb'] = $verb;
$datarray['gravity'] = Item::GRAVITY_ACTIVITY;
+
+ $datarray['private'] = $toplevel_parent_item['private'];
+ $datarray['allow_cid'] = $toplevel_parent_item['allow_cid'];
+ $datarray['allow_gid'] = $toplevel_parent_item['allow_gid'];
+ $datarray['deny_cid'] = $toplevel_parent_item['deny_cid'];
+ $datarray['deny_gid'] = $toplevel_parent_item['deny_gid'];
+
$datarray['thr-parent'] = $toplevel_parent_item['uri'];
$datarray['object-type'] = Activity\ObjectType::NOTE;
*
* @param int $uriid
* @param object $photo
+ *
* @return void
*/
private static function storePhotoAsMedia(int $uriid, $photo)
{
// @TODO Need to find object type, roland@f.haeder.net
Logger::debug('photo=' . get_class($photo));
- $data = [];
- $data['uri-id'] = $uriid;
- $data['type'] = Post\Media::IMAGE;
- $data['url'] = XML::unescape($photo->remote_photo_path) . XML::unescape($photo->remote_photo_name);
- $data['height'] = (int)XML::unescape($photo->height ?? 0);
- $data['width'] = (int)XML::unescape($photo->width ?? 0);
- $data['description'] = XML::unescape($photo->text ?? '');
+ $data = [
+ 'uri-id' => $uriid,
+ 'type' => Post\Media::IMAGE,
+ 'url' => XML::unescape($photo->remote_photo_path) . XML::unescape($photo->remote_photo_name),
+ 'height' => (int)XML::unescape($photo->height ?? 0),
+ 'width' => (int)XML::unescape($photo->width ?? 0),
+ 'description' => XML::unescape($photo->text ?? ''),
+ ];
Post\Media::insert($data);
}
$raw_body = $body = Markdown::toBBCode($text);
- $datarray = [];
+ $datarray = [
+ 'guid' => $guid,
+ 'plink' => self::plink($author, $guid),
+ 'uid' => $importer['uid'],
+ 'contact-id' => $contact['id'],
+ 'network' => Protocol::DIASPORA,
+ 'author-link' => $contact['url'],
+ 'author-id' => Contact::getIdForURL($contact['url'], 0),
+ 'verb' => Activity::POST,
+ 'gravity' => Item::GRAVITY_PARENT,
+ 'protocol' => Conversation::PARCEL_DIASPORA,
+ 'source' => $xml,
+ 'body' => self::replacePeopleGuid($body, $contact['url']),
+ 'raw-body' => self::replacePeopleGuid($raw_body, $contact['url']),
+ 'private' => (($public == 'false') ? Item::PRIVATE : Item::PUBLIC),
+ // Default is note (aka. comment), later below is being checked the real type
+ 'object-type' => Activity\ObjectType::NOTE,
+ 'post-type' => Item::PT_NOTE,
+ ];
- $datarray['guid'] = $guid;
- $datarray['uri'] = $datarray['thr-parent'] = self::getUriFromGuid($guid, $author);
- $datarray['uri-id'] = ItemURI::insert(['uri' => $datarray['uri'], 'guid' => $datarray['guid']]);
+ $datarray['uri'] = $datarray['thr-parent'] = self::getUriFromGuid($guid, $author);
+ $datarray['uri-id'] = ItemURI::insert(['uri' => $datarray['uri'], 'guid' => $datarray['guid']]);
+ $datarray['owner-link'] = $datarray['author-link'];
+ $datarray['owner-id'] = $datarray['author-id'];
+
+ $datarray = self::setDirection($datarray, $direction);
// Attach embedded pictures to the body
if ($data->photo) {
$datarray['object-type'] = Activity\ObjectType::IMAGE;
$datarray['post-type'] = Item::PT_IMAGE;
} elseif ($data->poll) {
- $datarray['object-type'] = Activity\ObjectType::NOTE;
$datarray['post-type'] = Item::PT_POLL;
- } else {
- $datarray['object-type'] = Activity\ObjectType::NOTE;
- $datarray['post-type'] = Item::PT_NOTE;
}
/// @todo enable support for polls
/// @todo enable support for events
- $datarray['uid'] = $importer['uid'];
- $datarray['contact-id'] = $contact['id'];
- $datarray['network'] = Protocol::DIASPORA;
-
- $datarray['author-link'] = $contact['url'];
- $datarray['author-id'] = Contact::getIdForURL($contact['url'], 0);
-
- $datarray['owner-link'] = $datarray['author-link'];
- $datarray['owner-id'] = $datarray['author-id'];
-
- $datarray['verb'] = Activity::POST;
- $datarray['gravity'] = Item::GRAVITY_PARENT;
-
- $datarray['protocol'] = Conversation::PARCEL_DIASPORA;
- $datarray['source'] = $xml;
-
- $datarray = self::setDirection($datarray, $direction);
-
- $datarray['body'] = self::replacePeopleGuid($body, $contact['url']);
- $datarray['raw-body'] = self::replacePeopleGuid($raw_body, $contact['url']);
-
self::storeMentions($datarray['uri-id'], $text);
Tag::storeRawTagsFromBody($datarray['uri-id'], $datarray['body']);
$datarray['app'] = $provider_display_name;
}
- $datarray['plink'] = self::plink($author, $guid);
- $datarray['private'] = (($public == 'false') ? Item::PRIVATE : Item::PUBLIC);
$datarray['changed'] = $datarray['created'] = $datarray['edited'] = $created_at;
if (isset($address['address'])) {
// The "addr" field should always be filled.
// If this isn't the case, it will raise a notice some lines later.
// And in the log we will see where it came from, and we can handle it there.
- Logger::notice('Empty addr', ['contact' => $contact ?? [], 'callstack' => System::callstack(20)]);
+ Logger::notice('Empty addr', ['contact' => $contact ?? []]);
}
$envelope = self::buildMessage($msg, $owner, $contact, $owner['uprvkey'], $pubkey ?? '', $public_batch);
// If the item belongs to a user, we take this user id.
if ($item['uid'] == 0) {
// @todo Possibly use an administrator account?
- $condition = [
- 'verified' => true, 'blocked' => false,
- 'account_removed' => false, 'account_expired' => false, 'account-type' => User::ACCOUNT_TYPE_PERSON
- ];
+ $condition = ['verified' => true, 'blocked' => false, 'account_removed' => false, 'account_expired' => false, 'account-type' => User::ACCOUNT_TYPE_PERSON];
$first_user = DBA::selectFirst('user', ['uid'], $condition, ['order' => ['uid']]);
$owner = User::getOwnerDataById($first_user['uid']);
} else {
if ($item['event-id'] > 0) {
$event = self::buildEvent($item['event-id']);
if (count($event)) {
- $message['event'] = $event;
+ // Deactivated, since Diaspora seems to have problems with the processing.
+ // $message['event'] = $event;
if (
!empty($event['location']['address']) &&
*/
private static function createProfileData(int $uid): array
{
- $profile = DBA::selectFirst('owner-view', ['uid', 'addr', 'name', 'location', 'net-publish', 'dob', 'about', 'pub_keywords'], ['uid' => $uid]);
+ $profile = DBA::selectFirst('owner-view', ['uid', 'addr', 'name', 'location', 'net-publish', 'dob', 'about', 'pub_keywords', 'updated'], ['uid' => $uid]);
if (!DBA::isResult($profile)) {
return [];
$data = [
'author' => $profile['addr'],
+ 'edited_at' => DateTimeFormat::utc($profile['updated']),
+ 'full_name' => $profile['name'],
'first_name' => $split_name['first'],
'last_name' => $split_name['last'],
'image_url' => DI::baseUrl() . '/photo/custom/300/' . $profile['uid'] . '.jpg',
'image_url_medium' => DI::baseUrl() . '/photo/custom/100/' . $profile['uid'] . '.jpg',
'image_url_small' => DI::baseUrl() . '/photo/custom/50/' . $profile['uid'] . '.jpg',
- 'searchable' => ($profile['net-publish'] ? 'true' : 'false'),
+ 'bio' => null,
'birthday' => null,
- 'about' => null,
+ 'gender' => null,
'location' => null,
- 'tag_string' => null,
+ 'searchable' => ($profile['net-publish'] ? 'true' : 'false'),
+ 'public' => 'false',
'nsfw' => 'false',
+ 'tag_string' => null,
];
if ($data['searchable'] === 'true') {
$data['birthday'] = DateTimeFormat::utc($year . '-' . $month . '-' . $day, 'Y-m-d');
}
- $data['about'] = BBCode::toMarkdown($profile['about'] ?? '');
+ $data['bio'] = BBCode::toMarkdown($profile['about'] ?? '');
$data['location'] = $profile['location'];
$data['tag_string'] = '';
// @todo Split this into single worker jobs
foreach ($recipients as $recipient) {
- Logger::info('Send updated profile data for user ' . $uid . ' to contact ' . $recipient['id']);
- self::buildAndTransmit($owner, $recipient, 'profile', $message);
+ if ((empty($recipient['gsid']) || GServer::isReachableById($recipient['gsid'])) && !Contact\User::isBlocked($recipient['id'], $uid)) {
+ Logger::info('Send updated profile data for user ' . $uid . ' to contact ' . $recipient['id']);
+ self::buildAndTransmit($owner, $recipient, 'profile', $message);
+ }
}
}