aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--addon/facebook/facebook.php2
-rw-r--r--addon/piwik/piwik.php7
-rw-r--r--boot.php4
-rw-r--r--database.sql1
-rw-r--r--include/Scrape.php2
-rw-r--r--include/diaspora.php262
-rw-r--r--include/items.php2
-rw-r--r--include/network.php22
-rw-r--r--include/notifier.php28
-rw-r--r--include/security.php2
-rw-r--r--include/text.php2
-rw-r--r--mod/contacts.php4
-rw-r--r--mod/dfrn_confirm.php15
-rw-r--r--mod/dfrn_request.php30
-rw-r--r--mod/follow.php5
-rw-r--r--mod/receive.php2
-rw-r--r--update.php5
-rw-r--r--view/theme/darkzero/style.css4
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>";
}
}
diff --git a/boot.php b/boot.php
index 38ebd1f67..821e74672 100644
--- a/boot.php
+++ b/boot.php
@@ -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;
+}