X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Fitems.php;h=848c21df366d405d16a00b24eaadbd0b36c58847;hb=5b96c7b3e39a4dd6516115e0fb187cc0ecc0e07d;hp=2ff7bffbe3adccbafe7511c0bbcfddd3d796694e;hpb=8cca849c2e9694ba9bab2e0a6173cd4f5aa2cbdc;p=friendica.git
diff --git a/include/items.php b/include/items.php
index 2ff7bffbe3..848c21df36 100644
--- a/include/items.php
+++ b/include/items.php
@@ -15,6 +15,9 @@ require_once('include/plaintext.php');
require_once('include/ostatus.php');
require_once('mod/share.php');
+require_once('library/defuse/php-encryption-1.2.1/Crypto.php');
+
+
function get_feed_for(&$a, $dfrn_id, $owner_nick, $last_update, $direction = 0, $forpubsub = false) {
@@ -1983,13 +1986,13 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) {
if($contact['duplex'] && $contact['issued-id'])
$idtosend = '1:' . $orig_id;
- $rino = ((function_exists('mcrypt_encrypt')) ? 1 : 0);
+
+ $rino = get_config('system','rino_encrypt');
+ $rino = intval($rino);
- $rino_enable = get_config('system','rino_encrypt');
-
- if(! $rino_enable)
- $rino = 0;
+
+
$ssl_val = intval(get_config('system','ssl_policy'));
$ssl_policy = '';
@@ -2006,7 +2009,7 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) {
break;
}
- $url = $contact['notify'] . '&dfrn_id=' . $idtosend . '&dfrn_version=' . DFRN_PROTOCOL_VERSION . (($rino) ? '&rino=1' : '');
+ $url = $contact['notify'] . '&dfrn_id=' . $idtosend . '&dfrn_version=' . DFRN_PROTOCOL_VERSION . (($rino) ? '&rino='.$rino : '');
logger('dfrn_deliver: ' . $url);
@@ -2037,7 +2040,7 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) {
$challenge = hex2bin((string) $res->challenge);
$perm = (($res->perm) ? $res->perm : null);
$dfrn_version = (float) (($res->dfrn_version) ? $res->dfrn_version : 2.0);
- $rino_allowed = ((intval($res->rino) === 1) ? 1 : 0);
+ $rino_remote_version = intval($res->rino);
$page = (($owner['page-flags'] == PAGE_COMMUNITY) ? 1 : 0);
if($owner['page-flags'] == PAGE_PRVGROUP)
@@ -2098,11 +2101,46 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) {
if($page)
$postvars['page'] = $page;
- if($rino && $rino_allowed && (! $dissolve)) {
- $key = substr(random_string(),0,16);
- $data = bin2hex(aes_encrypt($postvars['data'],$key));
- $postvars['data'] = $data;
- logger('rino: sent key = ' . $key, LOGGER_DEBUG);
+
+ if($rino>0 && $rino_remote_version>0 && (! $dissolve)) {
+ logger('rino version: '. $rino_remote_version);
+
+ switch($rino_remote_version) {
+ case 1:
+ // Deprecated rino version!
+ $key = substr(random_string(),0,16);
+ $data = aes_encrypt($postvars['data'],$key);
+ break;
+ case 2:
+ // RINO 2 based on php-encryption
+ try {
+ $key = Crypto::createNewRandomKey();
+ } catch (CryptoTestFailed $ex) {
+ logger('Cannot safely create a key');
+ return -1;
+ } catch (CannotPerformOperation $ex) {
+ logger('Cannot safely create a key');
+ return -1;
+ }
+ try {
+ $data = Crypto::encrypt($postvars['data'], $key);
+ } catch (CryptoTestFailed $ex) {
+ logger('Cannot safely perform encryption');
+ return -1;
+ } catch (CannotPerformOperation $ex) {
+ logger('Cannot safely perform encryption');
+ return -1;
+ }
+ break;
+ default:
+ logger("rino: invalid requested verision '$rino_remote_version'");
+ return -1;
+ }
+
+ $postvars['rino'] = $rino_remote_version;
+ $postvars['data'] = bin2hex($data);
+
+ #logger('rino: sent key = ' . $key, LOGGER_DEBUG);
if($dfrn_version >= 2.1) {
@@ -2129,6 +2167,7 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) {
$postvars['key'] = bin2hex($postvars['key']);
}
+
logger('dfrn_deliver: ' . "SENDING: " . print_r($postvars,true), LOGGER_DATA);
@@ -2938,9 +2977,6 @@ function item_is_remote_self($contact, &$datarray) {
$datarray['private'] = 0;
}
- //if (!isset($datarray["app"]) OR ($datarray["app"] == ""))
- // $datarray["app"] = network_to_name($contact['network']);
-
if ($contact['network'] != NETWORK_FEED) {
// Store the original post
$r = item_store($datarray2, false, false);
@@ -4120,9 +4156,12 @@ function new_follower($importer,$contact,$datarray,$item,$sharing = false) {
$name = notags(trim($datarray['author-name']));
$photo = notags(trim($datarray['author-avatar']));
- $rawtag = $item->get_item_tags(NAMESPACE_ACTIVITY,'actor');
- if($rawtag && $rawtag[0]['child'][NAMESPACE_POCO]['preferredUsername'][0]['data'])
- $nick = $rawtag[0]['child'][NAMESPACE_POCO]['preferredUsername'][0]['data'];
+ if (is_object($item)) {
+ $rawtag = $item->get_item_tags(NAMESPACE_ACTIVITY,'actor');
+ if($rawtag && $rawtag[0]['child'][NAMESPACE_POCO]['preferredUsername'][0]['data'])
+ $nick = $rawtag[0]['child'][NAMESPACE_POCO]['preferredUsername'][0]['data'];
+ } else
+ $nick = $item;
if(is_array($contact)) {
if(($contact['network'] == NETWORK_OSTATUS && $contact['rel'] == CONTACT_IS_SHARING)
@@ -4364,8 +4403,9 @@ function atom_entry($item,$type,$author,$owner,$comment = false,$cid = 0) {
$o .= atom_author('dfrn:owner',$item['owner-name'],$item['owner-link'],80,80,$item['owner-avatar']);
if(($item['parent'] != $item['id']) || ($item['parent-uri'] !== $item['uri']) || (($item['thr-parent'] !== '') && ($item['thr-parent'] !== $item['uri']))) {
+ $parent = q("SELECT `guid` FROM `item` WHERE `id` = %d", intval($item["parent"]));
$parent_item = (($item['thr-parent']) ? $item['thr-parent'] : $item['parent-uri']);
- $o .= '' . "\r\n";
+ $o .= ''."\r\n";
}
$htmlbody = $body;
@@ -4373,7 +4413,6 @@ function atom_entry($item,$type,$author,$owner,$comment = false,$cid = 0) {
if ($item['title'] != "")
$htmlbody = "[b]".$item['title']."[/b]\n\n".$htmlbody;
- //$htmlbody = bbcode(bb_remove_share_information($htmlbody), false, false, 7);
$htmlbody = bbcode($htmlbody, false, false, 7);
$o .= '' . xmlify($item['uri']) . '' . "\r\n";
@@ -4382,8 +4421,7 @@ function atom_entry($item,$type,$author,$owner,$comment = false,$cid = 0) {
$o .= '' . xmlify(datetime_convert('UTC','UTC',$item['edited'] . '+00:00',ATOM_TIME)) . '' . "\r\n";
$o .= '' . base64url_encode($body, true) . '' . "\r\n";
$o .= '' . xmlify((($type === 'html') ? $htmlbody : $body)) . '' . "\r\n";
- $o .= '' . "\r\n";
-
+ $o .= ''."\r\n";
$o .= ''."\r\n";