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 {
// Once we have the author URI, go to the web and try to find their public key
// (first this will look it up locally if it is in the diaspora-contact cache)
// This will also convert diaspora public key from pkcs#1 to pkcs#8
- Logger::notice('Fetching key for ' . $author);
+ Logger::info('Fetching key for ' . $author);
$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::notice('Message verified.');
+ Logger::info('Message verified.');
return [
'message' => $inner_decrypted,
*/
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;
}
{
$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)
{
// Check for Diaspora (and Friendica) typical paths
if (!preg_match('=(https?://.+)/(?:posts|display|objects)/([a-zA-Z0-9-_@.:%]+[a-zA-Z0-9])=i', $url, $matches)) {
- Logger::info('Invalid url', ['url' => $url]);
+ Logger::notice('Invalid url', ['url' => $url]);
return false;
}
Logger::info('Found', ['id' => $item['id']]);
return $item['id'];
} else {
- Logger::info('Not found', ['guid' => $guid, 'uid' => $uid]);
+ Logger::notice('Not found', ['guid' => $guid, 'uid' => $uid]);
return false;
}
}
Logger::notice('Parent item not found: parent: ' . $guid . ' - user: ' . $uid);
return false;
} else {
- Logger::notice('Parent item found: parent: ' . $guid . ' - user: ' . $uid);
+ Logger::info('Parent item found: parent: ' . $guid . ' - user: ' . $uid);
return $item;
}
}
return false;
}
- Logger::notice('Got migration for ' . $old_author . ', to ' . $new_author . ' with user ' . $importer['uid']);
+ Logger::info('Got migration for ' . $old_author . ', to ' . $new_author . ' with user ' . $importer['uid']);
// Check signature
$signed_text = 'AccountMigration:' . $old_author . ':' . $new_author;
Contact::update($fields, ['addr' => $old_author->getAddr()]);
- Logger::notice('Contacts are updated.');
+ Logger::info('Contacts are updated.');
return true;
}
}
DBA::close($contacts);
- Logger::notice('Removed contacts for ' . $author_handle);
+ Logger::info('Removed contacts for ' . $author_handle);
return true;
}
}
/**
- * Processes poll participations - unssupported
+ * Processes poll participations - unsupported
*
* @param array $importer Array of the importer user
* @param object $data The message object
$author = WebFingerUri::fromString($author_handle);
// the current protocol version doesn't know these fields
- // That means that we will assume their existance
+ // That means that we will assume their existence
if (isset($data->following)) {
$following = (XML::unescape($data->following) == 'true');
} else {
} elseif (!$following && $sharing) {
Logger::info("Author " . $author . " wants to share with us.");
} elseif ($following && $sharing) {
- Logger::info("Author " . $author . " wants to have a bidirectional conection.");
+ Logger::info("Author " . $author . " wants to have a bidirectional connection.");
} elseif ($following && !$sharing) {
Logger::info("Author " . $author . " wants to listen to us.");
}
*
* @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'])) {
* ************************************************************************************** */
/**
- * returnes the handle of a contact
+ * returns the handle of a contact
*
* @param array $contact contact array
*
}
// Normally we should have a filled "addr" field - but in the past this wasn't the case
- // So - just in case - we build the the address here.
+ // So - just in case - we build the address here.
if ($contact['nickname'] != '') {
$nick = $contact['nickname'];
} else {
public static function buildMagicEnvelope(string $msg, array $user): string
{
$b64url_data = Strings::base64UrlEncode($msg);
- $data = str_replace(["\n", "\r", " ", "\t"], ['', '', '', ''], $b64url_data);
+ $data = str_replace(["\n", "\r", ' ', "\t"], ['', '', '', ''], $b64url_data);
$key_id = Strings::base64UrlEncode(self::myHandle($user));
$type = 'application/xml';
$xmldata = [
'me:env' => [
- 'me:data' => $data,
- '@attributes' => ['type' => $type],
- 'me:encoding' => $encoding,
- 'me:alg' => $alg,
- 'me:sig' => $sig,
+ 'me:data' => $data,
+ '@attributes' => ['type' => $type],
+ 'me:encoding' => $encoding,
+ 'me:alg' => $alg,
+ 'me:sig' => $sig,
'@attributes2' => ['key_id' => $key_id]
]
];
return 0;
}
- Logger::notice('transmit: ' . $logid . '-' . $guid . ' ' . $dest_url);
+ Logger::info('transmit: ' . $logid . '-' . $guid . ' ' . $dest_url);
if (!intval(DI::config()->get('system', 'diaspora_test'))) {
$content_type = (($public_batch) ? 'application/magic-envelope+xml' : 'application/json');
GServer::setReachableById($contact['gsid'], Protocol::DIASPORA);
}
- Logger::notice('transmit: ' . $logid . '-' . $guid . ' to ' . $dest_url . ' returns: ' . $return_code);
+ Logger::info('transmit: ' . $logid . '-' . $guid . ' to ' . $dest_url . ' returns: ' . $return_code);
return $return_code ? $return_code : -1;
}
return false;
}
- if (!self::parentSupportDiaspora($item['thr-parent-id'])) {
+ if (!self::parentSupportDiaspora($item['thr-parent-id'], $uid)) {
Logger::info('One of the parents does not support Diaspora. A signature will not be created.', ['uri-id' => $item['uri-id'], 'guid' => $item['guid']]);
return false;
}
* Check if the parent and their parents support Diaspora
*
* @param integer $parent_id
+ * @param integer $uid
* @return boolean
* @throws InternalServerErrorException
* @throws \ImagickException
*/
- private static function parentSupportDiaspora(int $parent_id): bool
+ private static function parentSupportDiaspora(int $parent_id, int $uid): bool
{
- $parent_post = Post::selectFirstPost(['gravity', 'signed_text', 'author-link', 'thr-parent-id'], ['uri-id' => $parent_id]);
+ $parent_post = Post::selectFirst(['gravity', 'signed_text', 'author-link', 'thr-parent-id', 'protocol'], ['uri-id' => $parent_id, 'uid' => [0, $uid]]);
if (empty($parent_post['thr-parent-id'])) {
Logger::warning('Parent post does not exist.', ['parent-id' => $parent_id]);
return false;
return false;
}
- if (($parent_post['gravity'] == Item::GRAVITY_COMMENT) && empty($parent_post['signed_text'])) {
+ if (($parent_post['protocol'] != Conversation::PARCEL_DIASPORA) && ($parent_post['gravity'] == Item::GRAVITY_COMMENT) && empty($parent_post['signed_text'])) {
Logger::info('Parent comment has got no Diaspora signature.', ['parent-id' => $parent_id]);
return false;
}
if ($parent_post['gravity'] == Item::GRAVITY_COMMENT) {
- return self::parentSupportDiaspora($parent_post['thr-parent-id']);
+ return self::parentSupportDiaspora($parent_post['thr-parent-id'], $uid);
}
return true;