]> git.mxchange.org Git - friendica.git/blobdiff - include/diaspora.php
Merge pull request #351 from annando/master
[friendica.git] / include / diaspora.php
index bd38511564face94855d74062c84eda4d3ea4504..80fb104046f827fae5a9b426b90239498d73e7b0 100755 (executable)
@@ -2005,6 +2005,7 @@ function diaspora_share($me,$contact) {
        ));
 
        $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$me,$contact,$me['prvkey'],$contact['pubkey'])));
+       //$slap = 'xml=' . urlencode(diaspora_msg_build($msg,$me,$contact,$me['prvkey'],$contact['pubkey']));
 
        return(diaspora_transmit($owner,$contact,$slap, false));
 }
@@ -2022,6 +2023,7 @@ function diaspora_unshare($me,$contact) {
        ));
 
        $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$me,$contact,$me['prvkey'],$contact['pubkey'])));
+       //$slap = 'xml=' . urlencode(diaspora_msg_build($msg,$me,$contact,$me['prvkey'],$contact['pubkey']));
 
        return(diaspora_transmit($owner,$contact,$slap, false));
 
@@ -2062,11 +2064,19 @@ function diaspora_send_status($item,$owner,$contact,$public_batch = false) {
                }
        }
 */
-       if(strlen($title))
-               $body = "[b]".html_entity_decode($title)."[/b]\n\n".$body;
+       // Removal of tags
+       $body = preg_replace('/#\[url\=(\w+.*?)\](\w+.*?)\[\/url\]/i', '#$2', $body);
+
+       //if(strlen($title))
+       //      $body = "[b]".html_entity_decode($title)."[/b]\n\n".$body;
 
+       // convert to markdown
        $body = xmlify(html_entity_decode(bb2diaspora($body)));
+       //$body = bb2diaspora($body);
 
+       // Adding the title
+       if(strlen($title))
+               $body = "## ".html_entity_decode($title)."\n\n".$body;
 
        if($item['attach']) {
                $cnt = preg_match_all('/href=\"(.*?)\"(.*?)title=\"(.*?)\"/ism',$item['attach'],$matches,PREG_SET_ORDER);
@@ -2096,6 +2106,7 @@ function diaspora_send_status($item,$owner,$contact,$public_batch = false) {
        logger('diaspora_send_status: ' . $owner['username'] . ' -> ' . $contact['name'] . ' base message: ' . $msg, LOGGER_DATA);
 
        $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch)));
+       //$slap = 'xml=' . urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch));
 
        $return_code = diaspora_transmit($owner,$contact,$slap,$public_batch);
 
@@ -2140,6 +2151,7 @@ function diaspora_send_images($item,$owner,$contact,$images,$public_batch = fals
 
                logger('diaspora_send_photo: base message: ' . $msg, LOGGER_DATA);
                $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch)));
+               //$slap = 'xml=' . urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch));
 
                diaspora_transmit($owner,$contact,$slap,$public_batch);
        }
@@ -2150,7 +2162,7 @@ function diaspora_send_followup($item,$owner,$contact,$public_batch = false) {
 
        $a = get_app();
        $myaddr = $owner['nickname'] . '@' .  substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
-       $theiraddr = $contact['addr'];
+//     $theiraddr = $contact['addr'];
 
        // The first item in the `item` table with the parent id is the parent. However, MySQL doesn't always
        // return the items ordered by `item`.`id`, in which case the wrong item is chosen as the parent.
@@ -2203,6 +2215,7 @@ function diaspora_send_followup($item,$owner,$contact,$public_batch = false) {
        logger('diaspora_followup: base message: ' . $msg, LOGGER_DATA);
 
        $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch)));
+       //$slap = 'xml=' . urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch));
 
        return(diaspora_transmit($owner,$contact,$slap,$public_batch));
 }
@@ -2213,7 +2226,10 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
 
        $a = get_app();
        $myaddr = $owner['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
-       $theiraddr = $contact['addr'];
+//     $theiraddr = $contact['addr'];
+
+       $body = $item['body'];
+       $text = html_entity_decode(bb2diaspora($body));
 
 
        // The first item in the `item` table with the parent id is the parent. However, MySQL doesn't always
@@ -2232,26 +2248,30 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
        $relay_retract = false;
        $sql_sign_id = 'iid';
        if( $item['deleted']) {
-               $tpl = get_markup_template('diaspora_relayable_retraction.tpl');
                $relay_retract = true;
-               $sql_sign_id = 'retract_iid';
+
                $target_type = ( ($item['verb'] === ACTIVITY_LIKE) ? 'Like' : 'Comment');
+               $sender_signed_text = $item['guid'] . ';' . $target_type ;
+
+               $sql_sign_id = 'retract_iid';
+               $tpl = get_markup_template('diaspora_relayable_retraction.tpl');
        }
        elseif($item['verb'] === ACTIVITY_LIKE) {
-               $tpl = get_markup_template('diaspora_like_relay.tpl');
                $like = true;
+
                $target_type = 'Post';
 //             $positive = (($item['deleted']) ? 'false' : 'true');
                $positive = 'true';
+               $sender_signed_text = $item['guid'] . ';' . $target_type . ';' . $parent_guid . ';' . $positive . ';' . $myaddr;
+
+               $tpl = get_markup_template('diaspora_like_relay.tpl');
        }
-       else {
+       else { // item is a comment
+               $sender_signed_text = $item['guid'] . ';' . $parent_guid . ';' . $text . ';' . $myaddr;
+
                $tpl = get_markup_template('diaspora_comment_relay.tpl');
        }
 
-       $body = $item['body'];
-
-       $text = html_entity_decode(bb2diaspora($body));
-
 
        // fetch the original signature if the relayable was created by a Diaspora
        // or DFRN user. Relayables for other networks are not supported.
@@ -2272,51 +2292,20 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
                // function is called
                logger('diaspora_send_relay: original author signature not found, cannot send relayable');
                return;
-/*
-               $itemcontact = q("select * from contact where `id` = %d limit 1",
-                       intval($item['contact-id'])
-               );
-               if(count($itemcontact)) {
-                       if(! $itemcontact[0]['self']) {
-                               $prefix = sprintf( t('[Relayed] Comment authored by %s from network %s'),
-                                       '['. $item['author-name'] . ']' . '(' . $item['author-link'] . ')',  
-                                       network_to_name($itemcontact['network'])) . "\n";
-                               // "$body" was assigned to "$text" above. It isn't used after that, so I don't think
-                               // the following change will do anything
-                               $body = $prefix . $body;
-
-                               // I think this comment will fail upon reaching Diaspora, because "$signed_text" is not defined
-                       }
-               }
-               else {
-               // I'm confused about this "else." Since it sets "$handle = $myaddr," it seems like it should be for the case
-               // where the top-level post owner commented on his own post, i.e. "$itemcontact[0]['self']" is true. But it's
-               // positioned to be for the case where "count($itemcontact)" is 0.
-
-                       $handle = $myaddr;
-
-                       if($like)
-                               $signed_text = $item['guid'] . ';' . $target_type . ';' . $parent_guid . ';' . $positive . ';' . $handle;
-                       elseif($relay_retract)
-                               $signed_text = $item['guid'] . ';' . $target_type;
-                       else
-                               $signed_text = $item['guid'] . ';' . $parent_guid . ';' . $text . ';' . $handle;
-
-                       $authorsig = base64_encode(rsa_sign($signed_text,$owner['uprvkey'],'sha256'));
-
-                       q("insert into sign (`" . $sql_sign_id . "`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
-                               intval($item['id']),
-                               dbesc($signed_text),
-                               dbesc($authorsig),
-                               dbesc($handle)
-                       );
-               }
-*/
        }
 
-       // sign it with the top-level owner's signature
+       // Sign the relayable with the top-level owner's signature
+       //
+       // We'll use the $sender_signed_text that we just created, instead of the $signed_text
+       // stored in the database, because that provides the best chance that Diaspora will
+       // be able to reconstruct the signed text the same way we did. This is particularly a
+       // concern for the comment, whose signed text includes the text of the comment. The
+       // smallest change in the text of the comment, including removing whitespace, will
+       // make the signature verification fail. Since we translate from BB code to Diaspora's
+       // markup at the top of this function, which is AFTER we placed the original $signed_text
+       // in the database, it's hazardous to trust the original $signed_text.
 
-       $parentauthorsig = base64_encode(rsa_sign($signed_text,$owner['uprvkey'],'sha256'));
+       $parentauthorsig = base64_encode(rsa_sign($sender_signed_text,$owner['uprvkey'],'sha256'));
 
        $msg = replace_macros($tpl,array(
                '$guid' => xmlify($item['guid']),
@@ -2333,6 +2322,7 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
 
 
        $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch)));
+       //$slap = 'xml=' . urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch));
 
        return(diaspora_transmit($owner,$contact,$slap,$public_batch));
 
@@ -2367,6 +2357,7 @@ function diaspora_send_retraction($item,$owner,$contact,$public_batch = false) {
        ));
 
        $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch)));
+       //$slap = 'xml=' . urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch));
 
        return(diaspora_transmit($owner,$contact,$slap,$public_batch));
 }
@@ -2427,6 +2418,7 @@ function diaspora_send_mail($item,$owner,$contact) {
        logger('diaspora_conversation: ' . print_r($xmsg,true), LOGGER_DATA);
 
        $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($xmsg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],false)));
+       //$slap = 'xml=' . urlencode(diaspora_msg_build($xmsg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],false));
 
        return(diaspora_transmit($owner,$contact,$slap,false));