aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriendika <info@friendika.com>2011-02-08 18:44:30 -0800
committerFriendika <info@friendika.com>2011-02-08 18:44:30 -0800
commitf70a0b028288fa13c64f1ffaa310765a95347dac (patch)
tree89507dc18fd29a50c999c2b60cc89b6ef2406078
parent766c4778cb0a678ef7f55e56cbd11497a73ae6cb (diff)
downloadvolse-hubzilla-f70a0b028288fa13c64f1ffaa310765a95347dac.tar.gz
volse-hubzilla-f70a0b028288fa13c64f1ffaa310765a95347dac.tar.bz2
volse-hubzilla-f70a0b028288fa13c64f1ffaa310765a95347dac.zip
more graceful handling of some statusnet followups
-rw-r--r--boot.php24
-rw-r--r--database.sql2
-rw-r--r--include/items.php6
-rw-r--r--mod/follow.php27
-rw-r--r--mod/item.php12
-rw-r--r--mod/salmon.php2
-rw-r--r--update.php7
7 files changed, 65 insertions, 15 deletions
diff --git a/boot.php b/boot.php
index 7fbd2a6fb..8492b8be0 100644
--- a/boot.php
+++ b/boot.php
@@ -2,7 +2,7 @@
set_time_limit(0);
-define ( 'BUILD_ID', 1037 );
+define ( 'BUILD_ID', 1038 );
define ( 'FRIENDIKA_VERSION', '2.10.0905' );
define ( 'DFRN_PROTOCOL_VERSION', '2.1' );
@@ -1378,10 +1378,12 @@ function webfinger($s) {
logger('webfinger: lrdd template: ' . $tpl);
if(strlen($tpl)) {
$pxrd = str_replace('{uri}', urlencode('acct:'.$s), $tpl);
+ logger('webfinger: pxrd: ' . $pxrd);
$links = fetch_xrd_links($pxrd);
if(! count($links)) {
// try with double slashes
$pxrd = str_replace('{uri}', urlencode('acct://'.$s), $tpl);
+ logger('webfinger: pxrd: ' . $pxrd);
$links = fetch_xrd_links($pxrd);
}
return $links;
@@ -1453,6 +1455,7 @@ function fetch_lrdd_template($host) {
$tpl = '';
$url = 'http://' . $host . '/.well-known/host-meta' ;
$links = fetch_xrd_links($url);
+logger('template: ' . print_r($links,true));
if(count($links)) {
foreach($links as $link)
if($link['@attributes']['rel'] && $link['@attributes']['rel'] === 'lrdd')
@@ -1479,15 +1482,30 @@ function fetch_xrd_links($url) {
$h = simplexml_load_string($xml);
$arr = convert_xml_element_to_array($h);
+ $links = array();
+
if(isset($arr['xrd']['link'])) {
$link = $arr['xrd']['link'];
if(! isset($link[0]))
$links = array($link);
else
$links = $link;
- return $links;
}
- return array();
+ if(isset($arr['xrd']['alias'])) {
+ $alias = $arr['xrd']['alias'];
+ if(! isset($alias[0]))
+ $aliases = array($alias);
+ else
+ $aliases = $alias;
+ foreach($aliases as $alias) {
+ $links[]['@attributes'] = array('rel' => 'alias' , 'href' => $alias);
+ }
+ }
+
+ logger('fetch_xrd_links: ' . print_r($links,true), LOGGER_DATA);
+
+ return $links;
+
}}
// Convert an ACL array to a storable string
diff --git a/database.sql b/database.sql
index 83e0e4b6f..34b807979 100644
--- a/database.sql
+++ b/database.sql
@@ -64,7 +64,7 @@ CREATE TABLE IF NOT EXISTS `contact` (
`issued-id` char(255) NOT NULL,
`dfrn-id` char(255) NOT NULL,
`url` char(255) NOT NULL,
- `lrdd` char(255) NOT NULL,
+ `alias` char(255) NOT NULL,
`pubkey` text NOT NULL,
`prvkey` text NOT NULL,
`request` text NOT NULL,
diff --git a/include/items.php b/include/items.php
index cffd13a01..b5bdd7833 100644
--- a/include/items.php
+++ b/include/items.php
@@ -1128,15 +1128,16 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0) {
}
if(($is_reply) && is_array($contact)) {
-
+
// Have we seen it? If not, import it.
$item_id = $item->get_id();
-
+
$r = q("SELECT `uid`, `last-child`, `edited` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
dbesc($item_id),
intval($importer['uid'])
);
+
// FIXME update content if 'updated' changes
if(count($r)) {
$allow = $item->get_item_tags( NAMESPACE_DFRN, 'comment-allow');
@@ -1155,6 +1156,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0) {
}
continue;
}
+
$datarray = get_atom_elements($feed,$item);
$force_parent = false;
if($contact['network'] === 'stat') {
diff --git a/mod/follow.php b/mod/follow.php
index 8c1dc348f..eaee7d5ac 100644
--- a/mod/follow.php
+++ b/mod/follow.php
@@ -15,7 +15,7 @@ function follow_post(&$a) {
$email_conversant = false;
if($url) {
- $links = lrdd($url);
+ $links = @lrdd($url);
if(count($links)) {
foreach($links as $link) {
if($link['@attributes']['rel'] === NAMESPACE_DFRN)
@@ -30,6 +30,26 @@ function follow_post(&$a) {
$profile = $link['@attributes']['href'];
}
+
+ // Status.Net can have more than one profile URL. We need to match the profile URL
+ // to a contact on incoming messages to prevent spam, and we won't know which one
+ // to match. So in case of two, one of them is stored as an alias. Only store URL's
+ // and not webfinger user@host aliases. If they've got more than two non-email style
+ // aliases, let's hope we're lucky and get one that matches the feed author-uri because
+ // otherwise we're screwed.
+
+ foreach($links as $link) {
+ if($link['@attributes']['rel'] === 'alias') {
+ if(strpos($link['@attributes']['href'],'@') === false) {
+ if(isset($profile)) {
+ if($link['@attributes']['href'] !== $profile)
+ $alias = $link['@attributes']['href'];
+ }
+ else
+ $profile = $link['@attributes']['href'];
+ }
+ }
+ }
}
else {
if((strpos($orig_url,'@')) && validate_email($orig_url)) {
@@ -165,12 +185,13 @@ function follow_post(&$a) {
}
else {
// create contact record
- $r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `notify`, `poll`, `name`, `nick`, `photo`, `network`, `rel`, `priority`,
+ $r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `alias`, `notify`, `poll`, `name`, `nick`, `photo`, `network`, `rel`, `priority`,
`blocked`, `readonly`, `pending` )
- VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, 0, 0, 0 ) ",
+ VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, 0, 0, 0 ) ",
intval(local_user()),
dbesc(datetime_convert()),
dbesc($profile),
+ dbesc($alias),
dbesc($notify),
dbesc($poll),
dbesc($vcard['fn']),
diff --git a/mod/item.php b/mod/item.php
index 2264ea5b9..737fe8341 100644
--- a/mod/item.php
+++ b/mod/item.php
@@ -246,18 +246,20 @@ function item_post(&$a) {
);
}
if(count($r)) {
- if($r[0]['network'] === 'stat')
- $stat = true;
$profile = $r[0]['url'];
- $newname = $r[0]['name'];
+ if($r[0]['network'] === 'stat') {
+ $newname = $r[0]['nick'];
+ $stat = true;
+ }
+ else
+ $newname = $r[0]['name'];
if(strlen($inform))
$inform .= ',';
$inform .= 'cid:' . $r[0]['id'];
}
}
if($profile) {
- if(! $stat)
- $body = str_replace('@' . $name, '@' . '[url=' . $profile . ']' . $newname . '[/url]', $body);
+ $body = str_replace('@' . $name, '@' . '[url=' . $profile . ']' . $newname . '[/url]', $body);
$profile = str_replace(',','%2c',$profile);
if(strlen($str_tags))
$str_tags .= ',';
diff --git a/mod/salmon.php b/mod/salmon.php
index 8c7d921c8..885ba470c 100644
--- a/mod/salmon.php
+++ b/mod/salmon.php
@@ -177,7 +177,7 @@ function salmon_post(&$a) {
*
*/
- $r = q("SELECT * FROM `contact` WHERE `network` = 'stat' AND ( `url` = '%s' OR `lrdd` = '%s')
+ $r = q("SELECT * FROM `contact` WHERE `network` = 'stat' AND ( `url` = '%s' OR `alias` = '%s')
AND `uid` = %d LIMIT 1",
dbesc($author_link),
dbesc($author_link),
diff --git a/update.php b/update.php
index e51e8ac33..84eaebe18 100644
--- a/update.php
+++ b/update.php
@@ -363,3 +363,10 @@ function update_1036() {
}
}
}
+
+function update_1037() {
+
+ q("ALTER TABLE `contact` CHANGE `lrdd` `alias` CHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ");
+
+}
+