more graceful handling of some statusnet followups
This commit is contained in:
parent
766c4778cb
commit
f70a0b0282
7 changed files with 65 additions and 15 deletions
24
boot.php
24
boot.php
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
set_time_limit(0);
|
set_time_limit(0);
|
||||||
|
|
||||||
define ( 'BUILD_ID', 1037 );
|
define ( 'BUILD_ID', 1038 );
|
||||||
define ( 'FRIENDIKA_VERSION', '2.10.0905' );
|
define ( 'FRIENDIKA_VERSION', '2.10.0905' );
|
||||||
define ( 'DFRN_PROTOCOL_VERSION', '2.1' );
|
define ( 'DFRN_PROTOCOL_VERSION', '2.1' );
|
||||||
|
|
||||||
|
@ -1378,10 +1378,12 @@ function webfinger($s) {
|
||||||
logger('webfinger: lrdd template: ' . $tpl);
|
logger('webfinger: lrdd template: ' . $tpl);
|
||||||
if(strlen($tpl)) {
|
if(strlen($tpl)) {
|
||||||
$pxrd = str_replace('{uri}', urlencode('acct:'.$s), $tpl);
|
$pxrd = str_replace('{uri}', urlencode('acct:'.$s), $tpl);
|
||||||
|
logger('webfinger: pxrd: ' . $pxrd);
|
||||||
$links = fetch_xrd_links($pxrd);
|
$links = fetch_xrd_links($pxrd);
|
||||||
if(! count($links)) {
|
if(! count($links)) {
|
||||||
// try with double slashes
|
// try with double slashes
|
||||||
$pxrd = str_replace('{uri}', urlencode('acct://'.$s), $tpl);
|
$pxrd = str_replace('{uri}', urlencode('acct://'.$s), $tpl);
|
||||||
|
logger('webfinger: pxrd: ' . $pxrd);
|
||||||
$links = fetch_xrd_links($pxrd);
|
$links = fetch_xrd_links($pxrd);
|
||||||
}
|
}
|
||||||
return $links;
|
return $links;
|
||||||
|
@ -1453,6 +1455,7 @@ function fetch_lrdd_template($host) {
|
||||||
$tpl = '';
|
$tpl = '';
|
||||||
$url = 'http://' . $host . '/.well-known/host-meta' ;
|
$url = 'http://' . $host . '/.well-known/host-meta' ;
|
||||||
$links = fetch_xrd_links($url);
|
$links = fetch_xrd_links($url);
|
||||||
|
logger('template: ' . print_r($links,true));
|
||||||
if(count($links)) {
|
if(count($links)) {
|
||||||
foreach($links as $link)
|
foreach($links as $link)
|
||||||
if($link['@attributes']['rel'] && $link['@attributes']['rel'] === 'lrdd')
|
if($link['@attributes']['rel'] && $link['@attributes']['rel'] === 'lrdd')
|
||||||
|
@ -1479,15 +1482,30 @@ function fetch_xrd_links($url) {
|
||||||
$h = simplexml_load_string($xml);
|
$h = simplexml_load_string($xml);
|
||||||
$arr = convert_xml_element_to_array($h);
|
$arr = convert_xml_element_to_array($h);
|
||||||
|
|
||||||
|
$links = array();
|
||||||
|
|
||||||
if(isset($arr['xrd']['link'])) {
|
if(isset($arr['xrd']['link'])) {
|
||||||
$link = $arr['xrd']['link'];
|
$link = $arr['xrd']['link'];
|
||||||
if(! isset($link[0]))
|
if(! isset($link[0]))
|
||||||
$links = array($link);
|
$links = array($link);
|
||||||
else
|
else
|
||||||
$links = $link;
|
$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
|
// Convert an ACL array to a storable string
|
||||||
|
|
|
@ -64,7 +64,7 @@ CREATE TABLE IF NOT EXISTS `contact` (
|
||||||
`issued-id` char(255) NOT NULL,
|
`issued-id` char(255) NOT NULL,
|
||||||
`dfrn-id` char(255) NOT NULL,
|
`dfrn-id` char(255) NOT NULL,
|
||||||
`url` char(255) NOT NULL,
|
`url` char(255) NOT NULL,
|
||||||
`lrdd` char(255) NOT NULL,
|
`alias` char(255) NOT NULL,
|
||||||
`pubkey` text NOT NULL,
|
`pubkey` text NOT NULL,
|
||||||
`prvkey` text NOT NULL,
|
`prvkey` text NOT NULL,
|
||||||
`request` text NOT NULL,
|
`request` text NOT NULL,
|
||||||
|
|
|
@ -1128,15 +1128,16 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(($is_reply) && is_array($contact)) {
|
if(($is_reply) && is_array($contact)) {
|
||||||
|
|
||||||
// Have we seen it? If not, import it.
|
// Have we seen it? If not, import it.
|
||||||
|
|
||||||
$item_id = $item->get_id();
|
$item_id = $item->get_id();
|
||||||
|
|
||||||
$r = q("SELECT `uid`, `last-child`, `edited` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
|
$r = q("SELECT `uid`, `last-child`, `edited` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
|
||||||
dbesc($item_id),
|
dbesc($item_id),
|
||||||
intval($importer['uid'])
|
intval($importer['uid'])
|
||||||
);
|
);
|
||||||
|
|
||||||
// FIXME update content if 'updated' changes
|
// FIXME update content if 'updated' changes
|
||||||
if(count($r)) {
|
if(count($r)) {
|
||||||
$allow = $item->get_item_tags( NAMESPACE_DFRN, 'comment-allow');
|
$allow = $item->get_item_tags( NAMESPACE_DFRN, 'comment-allow');
|
||||||
|
@ -1155,6 +1156,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0) {
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$datarray = get_atom_elements($feed,$item);
|
$datarray = get_atom_elements($feed,$item);
|
||||||
$force_parent = false;
|
$force_parent = false;
|
||||||
if($contact['network'] === 'stat') {
|
if($contact['network'] === 'stat') {
|
||||||
|
|
|
@ -15,7 +15,7 @@ function follow_post(&$a) {
|
||||||
$email_conversant = false;
|
$email_conversant = false;
|
||||||
|
|
||||||
if($url) {
|
if($url) {
|
||||||
$links = lrdd($url);
|
$links = @lrdd($url);
|
||||||
if(count($links)) {
|
if(count($links)) {
|
||||||
foreach($links as $link) {
|
foreach($links as $link) {
|
||||||
if($link['@attributes']['rel'] === NAMESPACE_DFRN)
|
if($link['@attributes']['rel'] === NAMESPACE_DFRN)
|
||||||
|
@ -30,6 +30,26 @@ function follow_post(&$a) {
|
||||||
$profile = $link['@attributes']['href'];
|
$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 {
|
else {
|
||||||
if((strpos($orig_url,'@')) && validate_email($orig_url)) {
|
if((strpos($orig_url,'@')) && validate_email($orig_url)) {
|
||||||
|
@ -165,12 +185,13 @@ function follow_post(&$a) {
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// create contact record
|
// 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` )
|
`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()),
|
intval(local_user()),
|
||||||
dbesc(datetime_convert()),
|
dbesc(datetime_convert()),
|
||||||
dbesc($profile),
|
dbesc($profile),
|
||||||
|
dbesc($alias),
|
||||||
dbesc($notify),
|
dbesc($notify),
|
||||||
dbesc($poll),
|
dbesc($poll),
|
||||||
dbesc($vcard['fn']),
|
dbesc($vcard['fn']),
|
||||||
|
|
12
mod/item.php
12
mod/item.php
|
@ -246,18 +246,20 @@ function item_post(&$a) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if(count($r)) {
|
if(count($r)) {
|
||||||
if($r[0]['network'] === 'stat')
|
|
||||||
$stat = true;
|
|
||||||
$profile = $r[0]['url'];
|
$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))
|
if(strlen($inform))
|
||||||
$inform .= ',';
|
$inform .= ',';
|
||||||
$inform .= 'cid:' . $r[0]['id'];
|
$inform .= 'cid:' . $r[0]['id'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if($profile) {
|
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);
|
$profile = str_replace(',','%2c',$profile);
|
||||||
if(strlen($str_tags))
|
if(strlen($str_tags))
|
||||||
$str_tags .= ',';
|
$str_tags .= ',';
|
||||||
|
|
|
@ -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",
|
AND `uid` = %d LIMIT 1",
|
||||||
dbesc($author_link),
|
dbesc($author_link),
|
||||||
dbesc($author_link),
|
dbesc($author_link),
|
||||||
|
|
|
@ -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 ");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue