diff options
-rw-r--r-- | addon/facebook/facebook.php | 2 | ||||
-rw-r--r-- | addon/piwik/piwik.php | 7 | ||||
-rw-r--r-- | boot.php | 4 | ||||
-rw-r--r-- | database.sql | 1 | ||||
-rw-r--r-- | include/Scrape.php | 2 | ||||
-rw-r--r-- | include/diaspora.php | 262 | ||||
-rw-r--r-- | include/items.php | 2 | ||||
-rw-r--r-- | include/network.php | 22 | ||||
-rw-r--r-- | include/notifier.php | 28 | ||||
-rw-r--r-- | include/security.php | 2 | ||||
-rw-r--r-- | include/text.php | 2 | ||||
-rw-r--r-- | mod/contacts.php | 4 | ||||
-rw-r--r-- | mod/dfrn_confirm.php | 15 | ||||
-rw-r--r-- | mod/dfrn_request.php | 30 | ||||
-rw-r--r-- | mod/follow.php | 5 | ||||
-rw-r--r-- | mod/receive.php | 2 | ||||
-rw-r--r-- | update.php | 5 | ||||
-rw-r--r-- | view/theme/darkzero/style.css | 4 |
18 files changed, 305 insertions, 94 deletions
diff --git a/addon/facebook/facebook.php b/addon/facebook/facebook.php index 47e7691e4..ed59daff6 100644 --- a/addon/facebook/facebook.php +++ b/addon/facebook/facebook.php @@ -395,6 +395,8 @@ function facebook_cron($a,$b) { $r = q("SELECT * FROM `pconfig` WHERE `cat` = 'facebook' AND `k` = 'post' AND `v` = '1' ORDER BY RAND() "); if(count($r)) { foreach($r as $rr) { + if(get_pconfig($rr['uid'],'facebook','no_linking')) + continue; // check for new friends once a day $last_friend_check = get_pconfig($rr['uid'],'facebook','friend_check'); if($last_friend_check) diff --git a/addon/piwik/piwik.php b/addon/piwik/piwik.php index 8389416e9..890309d4f 100644 --- a/addon/piwik/piwik.php +++ b/addon/piwik/piwik.php @@ -66,7 +66,12 @@ function piwik_analytics($a,&$b) { * otherwise just include the above code into the page. */ if ($optout) { - $b .= "<div id='piwik-optout-link'>This website is tracked using the <a href='http://www.piwik.org'>Piwik</a> analytics tool. If you do not want that your visits are logged this way you <a href='http://". $baseurl ."index.php?module=CoreAdminHome&action=optOut'>can set a cookie to prevent Piwik from tracking further visits of the site</a> (opt-out).</div>"; + $b .= "<div id='piwik-optout-link'>"; + $b .= t("This website is tracked using the <a href='http://www.piwik.org'>Piwik</a> analytics tool."); + $b .= " "; + $the_url = "http://".$baseurl ."index.php?module=CoreAdminHome&action=optOut"; + $b .= sprintf(t("If you do not want that your visits are logged this way you <a href='%s'>can set a cookie to prevent Piwik from tracking further visits of the site</a> (opt-out)."), $the_url); + $b .= "</div>"; } } @@ -7,9 +7,9 @@ require_once('include/text.php'); require_once("include/pgettext.php"); -define ( 'FRIENDIKA_VERSION', '2.2.1075' ); +define ( 'FRIENDIKA_VERSION', '2.2.1076' ); define ( 'DFRN_PROTOCOL_VERSION', '2.21' ); -define ( 'DB_UPDATE_VERSION', 1080 ); +define ( 'DB_UPDATE_VERSION', 1081 ); define ( 'EOL', "<br />\r\n" ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); diff --git a/database.sql b/database.sql index ae036fc74..605433e6e 100644 --- a/database.sql +++ b/database.sql @@ -531,6 +531,7 @@ CREATE TABLE IF NOT EXISTS `fcontact` ( `network` CHAR( 32 ) NOT NULL , `alias` CHAR( 255 ) NOT NULL , `pubkey` TEXT NOT NULL , +`updated` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', INDEX ( `addr` ), INDEX ( `network` ) ) ENGINE = MYISAM DEFAULT CHARSET=utf8; diff --git a/include/Scrape.php b/include/Scrape.php index 1c9fe7d45..cc46af644 100644 --- a/include/Scrape.php +++ b/include/Scrape.php @@ -485,7 +485,7 @@ function probe_url($url, $mode = PROBE_NORMAL) { if($diaspora && $diaspora_base && $diaspora_guid) { if($mode == PROBE_DIASPORA || ! $notify) - $notify = $diaspora_base . 'receive/post/' . $diaspora_guid; + $notify = $diaspora_base . 'receive/users/' . $diaspora_guid; if(strpos($url,'@')) $addr = str_replace('acct:', '', $url); } diff --git a/include/diaspora.php b/include/diaspora.php index 9987c2139..b14c38f1d 100644 --- a/include/diaspora.php +++ b/include/diaspora.php @@ -4,25 +4,11 @@ require_once('include/crypto.php'); require_once('include/items.php'); function get_diaspora_key($uri) { - $key = ''; - logger('Fetching diaspora key for: ' . $uri); - $arr = lrdd($uri); - - if(is_array($arr)) { - foreach($arr as $a) { - if($a['@attributes']['rel'] === 'diaspora-public-key') { - $key = base64_decode($a['@attributes']['href']); - } - } - } - else { - return ''; - } - - if($key) - return rsatopem($key); + $r = find_diaspora_person_by_handle($uri); + if($r) + return $r['pubkey']; return ''; } @@ -40,6 +26,8 @@ function diaspora_base_message($type,$data) { function diaspora_msg_build($msg,$user,$contact,$prvkey,$pubkey) { $a = get_app(); + logger('diaspora_msg_build: ' . $msg, LOGGER_DATA); + $inner_aes_key = random_string(32); $b_inner_aes_key = base64_encode($inner_aes_key); $inner_iv = random_string(32); @@ -110,6 +98,7 @@ $magic_env = <<< EOT </entry> EOT; + logger('diaspora_msg_build: magic_env: ' . $magic_env, LOGGER_DATA); return $magic_env; } @@ -218,7 +207,7 @@ function diaspora_decode($importer,$xml) { $encoding = $base->encoding; $alg = $base->alg; - // Diaspora devs: I can't even begin to tell you how sucky this is. Read the freaking spec. + // Diaspora devs: I can't even begin to tell you how sucky this is. Please read the spec. $signed_data = $data . (($data[-1] != "\n") ? "\n" : '') . '.' . base64url_encode($type) . "\n" . '.' . base64url_encode($encoding) . "\n" . '.' . base64url_encode($alg) . "\n"; @@ -278,28 +267,33 @@ function diaspora_get_contact_by_handle($uid,$handle) { return false; } -function find_person_by_handle($handle) { - $r = q("select * from fcontact where network = '%s' and addr = '%s' limit 1", - dbesc(NETWORK_DIASPORA), - dbesc($handle) - ); - if(count($r)) - return $r[0]; - - // we don't care about the uid, we just want to save an expensive webfinger probe - $r = q("select * from contact where network = '%s' and addr = '%s' LIMIT 1", - dbesc(NETWORK_DIASPORA), - dbesc($handle) - ); - if(count($r)) +function find_diaspora_person_by_handle($handle) { + $r = q("select * from fcontact where network = '%s' and addr = '%s' limit 1", + dbesc(NETWORK_DIASPORA), + dbesc($handle) + ); + if(count($r)) { + // update record occasionally so it doesn't get stale + $d = strtotime($r[0]['updated'] . ' +00:00'); + if($d < strtotime('now - 14 days')) { + q("delete from fcontact where id = %d limit 1", + intval($r[0]['id']) + ); + } + else return $r[0]; - $r = probe_url($handle); - // need to cached this, perhaps in fcontact - if(count($r)) - return ($r); - return false; + } + require_once('include/Scrape.php'); + $r = probe_url($handle, PROBE_DIASPORA); + if((count($r)) && ($r['network'] === NETWORK_DIASPORA)) { + add_fcontact($r); + return ($r); + } + return false; } + + function diaspora_request($importer,$xml) { $sender_handle = unxmlify($xml->sender_handle); @@ -317,7 +311,7 @@ function diaspora_request($importer,$xml) { // That makes us friends. if($contact['rel'] == CONTACT_IS_FOLLOWER) { - q("UPDATE `contact` SET `rel` = %d WHERE `id` = %d AND `uid` = %d LIMIT 1", + q("UPDATE `contact` SET `rel` = %d, `writable` = 1 WHERE `id` = %d AND `uid` = %d LIMIT 1", intval(CONTACT_IS_FRIEND), intval($contact['id']), intval($importer['uid']) @@ -327,8 +321,8 @@ function diaspora_request($importer,$xml) { return; } - require_once('include/Scrape.php'); - $ret = probe_url($sender_handle); + $ret = find_diaspora_person_by_handle($sender_handle); + if((! count($ret)) || ($ret['network'] != NETWORK_DIASPORA)) { logger('diaspora_request: Cannot resolve diaspora handle ' . $sender_handle . ' for ' . $recipient_handle); @@ -359,11 +353,12 @@ function diaspora_request($importer,$xml) { $hash = random_string() . (string) time(); // Generate a confirm_key if($contact_record) { - $ret = q("INSERT INTO `intro` ( `uid`, `contact-id`, `blocked`, `knowyou`, `note`, `hash`, `datetime`,`blocked`) - VALUES ( %d, %d, 1, %d, '%s', '%s', '%s', 0 )", + $ret = q("INSERT INTO `intro` ( `uid`, `contact-id`, `blocked`, `knowyou`, `note`, `hash`, `datetime` ) + VALUES ( %d, %d, %d, %d, '%s', '%s', '%s' )", intval($importer['uid']), intval($contact_record['id']), 0, + 0, dbesc( t('Sharing notification from Diaspora network')), dbesc($hash), dbesc(datetime_convert()) @@ -490,7 +485,7 @@ function diaspora_comment($importer,$xml,$msg) { dbesc($parent_guid) ); if(! count($r)) { - logger('diaspora_comment: parent item not found: ' . $guid); + logger('diaspora_comment: parent item not found: parent: ' . $parent_guid . ' item: ' . $guid); return; } $parent_item = $r[0]; @@ -504,7 +499,7 @@ function diaspora_comment($importer,$xml,$msg) { $key = $msg['key']; } else { - $person = find_person_by_handle($diaspora_handle); + $person = find_diaspora_person_by_handle($diaspora_handle); if(is_array($person) && x($person,'pubkey')) $key = $person['pubkey']; @@ -519,6 +514,7 @@ function diaspora_comment($importer,$xml,$msg) { return; } + if($parent_author_signature) { $owner_signed_data = $guid . ';' . $parent_guid . ';' . $text . ';' . $msg['author']; @@ -585,8 +581,18 @@ function diaspora_comment($importer,$xml,$msg) { $datarray['author-avatar'] = ((x($person,'thumb')) ? $person['thumb'] : $person['photo']); $datarray['body'] = $body; - item_store($datarray); + $message_id = item_store($datarray); + if(! $parent_author_signature) { + q("insert into sign (`iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ", + intval($message_id), + dbesc($author_signed_data), + dbesc(base64_encode($author_signature)), + dbesc($diaspora_handle) + ); + } + + // notify others return; } @@ -661,7 +667,7 @@ function diaspora_like($importer,$xml,$msg) { $key = $msg['key']; } else { - $person = find_person_by_handle($diaspora_handle); + $person = find_diaspora_person_by_handle($diaspora_handle); if(is_array($person) && x($person,'pubkey')) $key = $person['pubkey']; else { @@ -743,12 +749,20 @@ EOT; $arr['unseen'] = 1; $arr['last-child'] = 0; - $post_id = item_store($arr); + $message_id = item_store($arr); + if(! $parent_author_signature) { + q("insert into sign (`iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ", + intval($message_id), + dbesc($author_signed_data), + dbesc(base64_encode($author_signature)), + dbesc($diaspora_handle) + ); + } // FIXME send notification - + return; } function diaspora_retraction($importer,$xml) { @@ -775,13 +789,14 @@ function diaspora_share($me,$contact) { $myaddr = $me['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3); $theiraddr = $contact['addr']; +logger('diaspora_share: contact: ' . print_r($contact,true), LOGGER_DATA); $tpl = get_markup_template('diaspora_share.tpl'); $msg = replace_macros($tpl, array( - '$sender' => myaddr, + '$sender' => $myaddr, '$recipient' => $theiraddr )); - $slap = 'xml=' . urlencode(diaspora_msg_build($msg,$me,$contact,$me['prvkey'],$contact['pubkey'])); + $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$me,$contact,$me['prvkey'],$contact['pubkey']))); post_url($contact['notify'],$slap); $return_code = $a->get_curl_code(); @@ -791,7 +806,7 @@ function diaspora_share($me,$contact) { function diaspora_send_status($item,$owner,$contact) { $a = get_app(); - $myaddr = $owner['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3); + $myaddr = $owner['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3); $theiraddr = $contact['addr']; require_once('include/bbcode.php'); @@ -812,7 +827,7 @@ function diaspora_send_status($item,$owner,$contact) { logger('diaspora_send_status: base message: ' . $msg, LOGGER_DATA); - $slap = 'xml=' . urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'])); + $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey']))); post_url($contact['notify'],$slap); $return_code = $a->get_curl_code(); @@ -820,3 +835,146 @@ function diaspora_send_status($item,$owner,$contact) { return $return_code; } + +function diaspora_send_followup($item,$owner,$contact) { + + $a = get_app(); + $myaddr = $owner['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3); + $theiraddr = $contact['addr']; + + $p = q("select guid from item where parent = %d limit 1", + $item['parent'] + ); + if(count($p)) + $parent_guid = $p[0]['guid']; + else + return; + + if($item['verb'] === ACTIVITY_LIKE) { + $tpl = get_markup_template('diaspora_like.tpl'); + $like = true; + $target_type = 'Post'; + $positive = (($item['deleted']) ? 'false' : 'true'); + } + else { + $tpl = get_markup_template('diaspora_comment.tpl'); + $like = false; + } + + $text = bbcode($item['body']); + + // sign it + + if($like) + $signed_text = $item['guid'] . ';' . $target_type . ';' . $positive . ';' . $myaddr; + else + $signed_text = $item['guid'] . ';' . $parent_guid . ';' . $text . ';' . $myaddr; + + $authorsig = base64_encode(rsa_sign($signed_text,$owner['uprvkey'])); + + $msg = replace_macros($tpl,array( + '$guid' => xmlify($item['guid']), + '$parent_guid' => xmlify($parent_guid), + '$target_type' =>xmlify($target_type), + '$authorsig' => xmlify($authorsig), + '$body' => xmlify($text), + '$positive' => xmlify($positive), + '$handle' => xmlify($myaddr) + )); + + logger('diaspora_followup: base message: ' . $msg, LOGGER_DATA); + + $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey']))); + + post_url($contact['notify'],$slap); + $return_code = $a->get_curl_code(); + logger('diaspora_send_status: returns: ' . $return_code); + return $return_code; + +} + + +function diaspora_send_relay($item,$owner,$contact) { + + + $a = get_app(); + $myaddr = $owner['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3); + $theiraddr = $contact['addr']; + + + $p = q("select guid from item where parent = %d limit 1", + $item['parent'] + ); + if(count($p)) + $parent_guid = $p[0]['guid']; + else + return; + + // fetch the original signature + $r = q("select * from sign where iid = %d limit 1", + intval($item['id']) + ); + if(! count($r)) + return; + $orig_sign = $r[0]; + + if($item['verb'] === ACTIVITY_LIKE) { + $tpl = get_markup_template('diaspora_like_relay.tpl'); + $like = true; + $target_type = 'Post'; + $positive = (($item['deleted']) ? 'false' : 'true'); + } + else { + $tpl = get_markup_template('diaspora_comment_relay.tpl'); + $like = false; + } + + $text = bbcode($item['body']); + + // sign it + + if($like) + $parent_signed_text = $orig_sign['signed_text']; + else + $parent_signed_text = $orig_sign['signed_text']; + + $parentauthorsig = base64_encode(rsa_sign($signed_text,$owner['uprvkey'])); + + $msg = replace_macros($tpl,array( + '$guid' => xmlify($item['guid']), + '$parent_guid' => xmlify($parent_guid), + '$target_type' =>xmlify($target_type), + '$authorsig' => xmlify($orig_sign['signature']), + '$parentsig' => xmlify($parentauthorsig), + '$text' => xmlify($text), + '$positive' => xmlify($positive), + '$diaspora_handle' => xmlify($myaddr) + )); + + // fetch the original signature + $r = q("select * from sign where iid = %d limit 1", + intval($item['id']) + ); + if(! count($r)) + return; + + logger('diaspora_relay_comment: base message: ' . $msg, LOGGER_DATA); + + $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey']))); + + post_url($contact['notify'],$slap); + $return_code = $a->get_curl_code(); + logger('diaspora_send_status: returns: ' . $return_code); + return $return_code; + +} + + + +function diaspora_send_retraction($item,$owner,$contact) { + + + + + +}
\ No newline at end of file diff --git a/include/items.php b/include/items.php index ec519ad9b..39a61c4ad 100644 --- a/include/items.php +++ b/include/items.php @@ -1635,7 +1635,7 @@ function atom_entry($item,$type,$author,$owner,$comment = false) { $o .= '<published>' . xmlify(datetime_convert('UTC','UTC',$item['created'] . '+00:00',ATOM_TIME)) . '</published>' . "\r\n"; $o .= '<updated>' . xmlify(datetime_convert('UTC','UTC',$item['edited'] . '+00:00',ATOM_TIME)) . '</updated>' . "\r\n"; $o .= '<dfrn:env>' . base64url_encode($body, true) . '</dfrn:env>' . "\r\n"; - $o .= '<content type="' . $type . '" >' . xmlify(($type === 'html') ? bbcode($body) : $body) . '</content>' . "\r\n"; + $o .= '<content type="' . $type . '" >' . xmlify((($type === 'html') ? bbcode($body) : $body)) . '</content>' . "\r\n"; $o .= '<link rel="alternate" type="text/html" href="' . xmlify($a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id']) . '" />' . "\r\n"; if($comment) $o .= '<dfrn:comment-allow>' . intval($item['last-child']) . '</dfrn:comment-allow>' . "\r\n"; diff --git a/include/network.php b/include/network.php index bbf1d6a63..10e3648a1 100644 --- a/include/network.php +++ b/include/network.php @@ -693,3 +693,25 @@ function parse_xml_string($s,$strict = true) { } return $x; }} + +function add_fcontact($arr) { + + $r = q("insert into fcontact ( `url`,`name`,`photo`,`request`,`nick`,`addr`, + `notify`,`poll`,`confirm`,`network`,`alias`,`pubkey`,`updated` ) + values('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')", + dbesc($arr['url']), + dbesc($arr['name']), + dbesc($arr['photo']), + dbesc($arr['request']), + dbesc($arr['nick']), + dbesc($arr['addr']), + dbesc($arr['notify']), + dbesc($arr['poll']), + dbesc($arr['confirm']), + dbesc($arr['network']), + dbesc($arr['alias']), + dbesc($arr['pubkey']), + dbesc(datetime_convert()) + ); + return $r; +} diff --git a/include/notifier.php b/include/notifier.php index 15fb38534..cf8871fb9 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -502,22 +502,27 @@ function notifier_run($argv, $argc){ } break; case NETWORK_DIASPORA: - if(get_config('system','dfrn_only') || (! get_config('diaspora_enabled')) || (! $normal_mode)) + require_once('include/diaspora.php'); + if(get_config('system','dfrn_only') || (! get_config('system','diaspora_enabled')) || (! $normal_mode)) break; - - if($target_item['deleted']) { - // diaspora delete, (check for like) - + + if($target_item['verb'] === ACTIVITY_DISLIKE) { + // unsupported + break; + } + elseif($target_item['deleted'] && (! $parent_item['verb'] === ACTIVITY_LIKE)) { + // diaspora delete, + diaspora_send_retraction($target_item,$owner,$contact); break; } elseif($followup) { - // send to owner to relay - + // send comments, likes and retractions of likes to owner to relay + diaspora_send_followup($target_item,$owner,$contact); break; } elseif($target_item['parent'] != $target_item['id']) { - // we are the relay - + // we are the relay - send comments, likes and unlikes to our conversants + diaspora_send_relay($target_item,$owner,$contact); break; } elseif($top_level) { @@ -571,7 +576,7 @@ function notifier_run($argv, $argc){ /** * - * If you have less than 150 dfrn friends and it's a public message, + * If you have less than 999 dfrn friends and it's a public message, * we'll just go ahead and push them out securely with dfrn/rino. * If you've got more than that, you'll have to rely on PuSH delivery. * @@ -587,8 +592,9 @@ function notifier_run($argv, $argc){ */ $r = q("SELECT `id`, `name` FROM `contact` - WHERE `network` = NETWORK_DFRN AND `uid` = %d AND `blocked` = 0 AND `pending` = 0 + WHERE `network` = '%s' AND `uid` = %d AND `blocked` = 0 AND `pending` = 0 AND `rel` != %d ", + dbesc(NETWORK_DFRN), intval($owner['uid']), intval(CONTACT_IS_SHARING) ); diff --git a/include/security.php b/include/security.php index 6fbdd697f..684a88a51 100644 --- a/include/security.php +++ b/include/security.php @@ -28,7 +28,7 @@ function can_write_wall(&$a,$owner) { AND `user`.`blockwall` = 0 AND `readonly` = 0 AND ( `contact`.`rel` IN ( %d , %d ) OR `user`.`page-flags` = %d ) LIMIT 1", intval($owner), intval(remote_user()), - intval(CONTACT_IS_FOLLOWER), + intval(CONTACT_IS_SHARING), intval(CONTACT_IS_FRIEND), intval(PAGE_COMMUNITY) ); diff --git a/include/text.php b/include/text.php index 803bf0e51..b13cf980f 100644 --- a/include/text.php +++ b/include/text.php @@ -147,7 +147,7 @@ if(! function_exists('xmlify')) { function xmlify($str) { $buffer = ''; - for($x = 0; $x < strlen($str); $x ++) { + for($x = 0; $x < mb_strlen($str); $x ++) { $char = $str[$x]; switch( $char ) { diff --git a/mod/contacts.php b/mod/contacts.php index f130b74c0..efb0dc75b 100644 --- a/mod/contacts.php +++ b/mod/contacts.php @@ -141,7 +141,7 @@ function contacts_content(&$a) { $cmd = $a->argv[2]; - $orig_record = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1", + $orig_record = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d AND `self` = 0 LIMIT 1", intval($contact_id), intval(local_user()) ); @@ -222,7 +222,7 @@ function contacts_content(&$a) { } - contact_remove($contact_id); + contact_remove($orig_record[0]['id']); info( t('Contact has been removed.') . EOL ); goaway($a->get_baseurl() . '/contacts'); return; // NOTREACHED diff --git a/mod/dfrn_confirm.php b/mod/dfrn_confirm.php index 4088178c0..4dacb5d81 100644 --- a/mod/dfrn_confirm.php +++ b/mod/dfrn_confirm.php @@ -360,8 +360,14 @@ function dfrn_confirm_post(&$a,$handsfree = null) { } $new_relation = $contact['rel']; - if($network === NETWORK_DIASPORA && $duplex) - $new_relation = CONTACT_IS_FRIEND; + $writable = $contact['writable']; + + if($network === NETWORK_DIASPORA) { + if($duplex) + $new_relation = CONTACT_IS_FRIEND; + if($new_relation != CONTACT_IS_FOLLOWER) + $writable = 1; + } $r = q("DELETE FROM `intro` WHERE `id` = %d AND `uid` = %d LIMIT 1", intval($intro_id), @@ -380,6 +386,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) { `blocked` = 0, `pending` = 0, `network` = '%s', + `writable` = %d, `rel` = %d WHERE `id` = %d LIMIT 1 ", @@ -392,6 +399,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) { dbesc($notify), dbesc($poll), dbesc($network), + intval($writable), intval($new_relation), intval($contact_id) ); @@ -640,7 +648,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) { `blocked` = 0, `pending` = 0, `duplex` = %d, - `network` = 'dfrn' WHERE `id` = %d LIMIT 1 + `network` = '%s' WHERE `id` = %d LIMIT 1 ", dbesc($photos[0]), dbesc($photos[1]), @@ -650,6 +658,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) { dbesc(datetime_convert()), dbesc(datetime_convert()), intval($duplex), + dbesc(NETWORK_DFRN), intval($dfrn_record) ); if($r === false) { // indicates schema is messed up or total db failure diff --git a/mod/dfrn_request.php b/mod/dfrn_request.php index 79070604b..98901e9f5 100644 --- a/mod/dfrn_request.php +++ b/mod/dfrn_request.php @@ -12,10 +12,6 @@ if(! function_exists('dfrn_request_init')) { function dfrn_request_init(&$a) { - if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) { - return; - } - if($a->argc > 1) $which = $a->argv[1]; @@ -147,8 +143,8 @@ function dfrn_request_post(&$a) { */ $r = q("INSERT INTO `contact` ( `uid`, `created`,`url`, `name`, `nick`, `photo`, `site-pubkey`, - `request`, `confirm`, `notify`, `poll`, `aes_allow`) - VALUES ( %d, '%s', '%s', '%s' , '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d)", + `request`, `confirm`, `notify`, `poll`, `network`, `aes_allow`) + VALUES ( %d, '%s', '%s', '%s' , '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d)", intval(local_user()), datetime_convert(), dbesc($dfrn_url), @@ -160,6 +156,7 @@ function dfrn_request_post(&$a) { $parms['dfrn-confirm'], $parms['dfrn-notify'], $parms['dfrn-poll'], + dbesc(NETWORK_DFRN), intval($aes_allow) ); } @@ -298,7 +295,7 @@ function dfrn_request_post(&$a) { } - if($network === 'dfrn') { + if($network === NETWORK_DFRN) { $ret = q("SELECT * FROM `contact` WHERE `uid` = %d AND `url` = '%s' AND `self` = 0 LIMIT 1", intval($uid), dbesc($url) @@ -373,8 +370,8 @@ function dfrn_request_post(&$a) { dbesc_array($parms); $r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `name`, `nick`, `issued-id`, `photo`, `site-pubkey`, - `request`, `confirm`, `notify`, `poll` ) - VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' )", + `request`, `confirm`, `notify`, `poll`, `network` ) + VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' )", intval($uid), datetime_convert(), $parms['url'], @@ -386,7 +383,8 @@ function dfrn_request_post(&$a) { $parms['dfrn-request'], $parms['dfrn-confirm'], $parms['dfrn-notify'], - $parms['dfrn-poll'] + $parms['dfrn-poll'], + dbesc(NETWORK_DFRN) ); // find the contact record we just created @@ -437,15 +435,16 @@ function dfrn_request_post(&$a) { . (($aes_allow) ? "&aes_allow=1" : "") ); // NOTREACHED - // END $network === 'dfrn' + // END $network === NETWORK_DFRN } - elseif($network === 'stat') { + elseif($network === NETWORK_OSTATUS) { /** * * OStatus network * Check contact existence - * Try and scrape together enough information to create a contact record, with us as CONTACT_IS_FOLLOWER + * Try and scrape together enough information to create a contact record, + * with us as CONTACT_IS_FOLLOWER * Substitute our user's feed URL into $url template * Send the subscriber home to subscribe * @@ -454,7 +453,7 @@ function dfrn_request_post(&$a) { $url = str_replace('{uri}', $a->get_baseurl() . '/dfrn_poll/' . $nickname, $url); goaway($url); // NOTREACHED - // END $network === 'stat' + // END $network === NETWORK_OSTATUS } } return; @@ -466,8 +465,6 @@ function dfrn_request_post(&$a) { if(! function_exists('dfrn_request_content')) { function dfrn_request_content(&$a) { - - if(($a->argc != 2) || (! count($a->profile))) return ""; @@ -578,6 +575,7 @@ function dfrn_request_content(&$a) { ); } } + killme(); return; // NOTREACHED } diff --git a/mod/follow.php b/mod/follow.php index 14b2ea46c..009fe4e9a 100644 --- a/mod/follow.php +++ b/mod/follow.php @@ -190,11 +190,12 @@ function follow_post(&$a) { } if($contact['network'] == NETWORK_DIASPORA) { require_once('include/diaspora.php'); - $ret = diaspora_share($a->user,$r[0]); + $ret = diaspora_share($a->user,$contact); logger('mod_follow: diaspora_share returns: ' . $ret); } } - goaway($_SESSION['return_url']); + goaway($a->get_baseurl() . '/contacts/' . $contact_id); +// goaway($_SESSION['return_url']); // NOTREACHED } diff --git a/mod/receive.php b/mod/receive.php index 19c163967..c3738c143 100644 --- a/mod/receive.php +++ b/mod/receive.php @@ -15,6 +15,8 @@ function receive_post(&$a) { if($a->argc != 3 || $a->argv[1] !== 'users') http_status_exit(500); + logger('receive: raw input: ' . file_get_contents('php://input'), LOGGER_DATA); + $guid = $a->argv[2]; $r = q("SELECT * FROM `user` WHERE `guid` = '%s' LIMIT 1", diff --git a/update.php b/update.php index 3586aa5fd..adfb5fe02 100644 --- a/update.php +++ b/update.php @@ -1,6 +1,6 @@ <?php -define( 'UPDATE_VERSION' , 1080 ); +define( 'UPDATE_VERSION' , 1081 ); /** * @@ -671,3 +671,6 @@ function update_1079() { } +function update_1080() { + q("ALTER TABLE `fcontact` ADD `updated` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00'"); +}
\ No newline at end of file diff --git a/view/theme/darkzero/style.css b/view/theme/darkzero/style.css index 3459e7409..b85a9aada 100644 --- a/view/theme/darkzero/style.css +++ b/view/theme/darkzero/style.css @@ -62,3 +62,7 @@ footer { } +input#dfrn-url { + background-color: #222222; + color: #FFFFFF !important; +} |