aboutsummaryrefslogtreecommitdiffstats
path: root/mod
diff options
context:
space:
mode:
Diffstat (limited to 'mod')
-rw-r--r--mod/follow.php27
-rw-r--r--mod/item.php12
-rw-r--r--mod/salmon.php2
3 files changed, 32 insertions, 9 deletions
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),