]> git.mxchange.org Git - friendica.git/blobdiff - include/diaspora.php
I want HTML code!
[friendica.git] / include / diaspora.php
index 5be09a7acc50a74b5e2f4bd305c28d3fab60473a..80fb104046f827fae5a9b426b90239498d73e7b0 100755 (executable)
@@ -1866,21 +1866,6 @@ function diaspora_signed_retraction($importer,$xml,$msg) {
        }
        else {
 
-/*             if(strcasecmp($diaspora_handle,$msg['author']) == 0) {
-                       $person = $contact;
-                       $key = $msg['key'];
-               }
-               else {
-                       $person = find_diaspora_person_by_handle($diaspora_handle);     
-
-                       if(is_array($person) && x($person,'pubkey'))
-                               $key = $person['pubkey'];
-                       else {
-                               logger('diaspora_signed_retraction: unable to find author details');
-                               return;
-                       }
-               }*/
-
                $sig_decode = base64_decode($sig);
 
                if(! rsa_verify($signed_data,$sig_decode,$key,'sha256')) {
@@ -2020,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));
 }
@@ -2037,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));
 
@@ -2075,13 +2062,21 @@ function diaspora_send_status($item,$owner,$contact,$public_batch = false) {
                        $images[] = $detail;
                        $body = str_replace($detail['str'],$mtch[1],$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 = xmlify('**' . html_entity_decode($title) . '**' . "\n") . $body;
-
+               $body = "## ".html_entity_decode($title)."\n\n".$body;
 
        if($item['attach']) {
                $cnt = preg_match_all('/href=\"(.*?)\"(.*?)title=\"(.*?)\"/ism',$item['attach'],$matches,PREG_SET_ORDER);
@@ -2111,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);
 
@@ -2155,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);
        }
@@ -2165,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.
@@ -2218,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));
 }
@@ -2228,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
@@ -2247,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.
@@ -2287,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']),
@@ -2348,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));
 
@@ -2382,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));
 }
@@ -2442,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));