Allow @localuser@mysite.example to be looked up as a mention
This commit is contained in:
parent
36f099958c
commit
689e277c62
@ -293,26 +293,36 @@ class OStatusPlugin extends Plugin
|
|||||||
foreach ($wmatches[1] as $wmatch) {
|
foreach ($wmatches[1] as $wmatch) {
|
||||||
list($target, $pos) = $wmatch;
|
list($target, $pos) = $wmatch;
|
||||||
$this->log(LOG_INFO, "Checking webfinger '$target'");
|
$this->log(LOG_INFO, "Checking webfinger '$target'");
|
||||||
|
$profile = null;
|
||||||
try {
|
try {
|
||||||
$oprofile = Ostatus_profile::ensureWebfinger($target);
|
$oprofile = Ostatus_profile::ensureWebfinger($target);
|
||||||
if ($oprofile instanceof Ostatus_profile && !$oprofile->isGroup()) {
|
if (!$oprofile instanceof Ostatus_profile || !$oprofile->isPerson()) {
|
||||||
$profile = $oprofile->localProfile();
|
continue;
|
||||||
$text = !empty($profile->nickname) && mb_strlen($profile->nickname) < mb_strlen($target) ?
|
|
||||||
$profile->nickname : $target;
|
|
||||||
$url = $profile->getUri();
|
|
||||||
if (!common_valid_http_url($url)) {
|
|
||||||
$url = $profile->getUrl();
|
|
||||||
}
|
|
||||||
$matches[$pos] = array('mentioned' => array($profile),
|
|
||||||
'type' => 'mention',
|
|
||||||
'text' => $text,
|
|
||||||
'position' => $pos,
|
|
||||||
'length' => mb_strlen($target),
|
|
||||||
'url' => $url);
|
|
||||||
}
|
}
|
||||||
|
$profile = $oprofile->localProfile();
|
||||||
|
} catch (OStatusShadowException $e) {
|
||||||
|
// This means we got a local user in the webfinger lookup
|
||||||
|
$profile = $e->profile;
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
$this->log(LOG_ERR, "Webfinger check failed: " . $e->getMessage());
|
$this->log(LOG_ERR, "Webfinger check failed: " . $e->getMessage());
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assert($profile instanceof Profile);
|
||||||
|
|
||||||
|
$text = !empty($profile->nickname) && mb_strlen($profile->nickname) < mb_strlen($target)
|
||||||
|
? $profile->getNickname() // TODO: we could do getFancyName() or getFullname() here
|
||||||
|
: $target;
|
||||||
|
$url = $profile->getUri();
|
||||||
|
if (!common_valid_http_url($url)) {
|
||||||
|
$url = $profile->getUrl();
|
||||||
|
}
|
||||||
|
$matches[$pos] = array('mentioned' => array($profile),
|
||||||
|
'type' => 'mention',
|
||||||
|
'text' => $text,
|
||||||
|
'position' => $pos,
|
||||||
|
'length' => mb_strlen($target),
|
||||||
|
'url' => $url);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1859,23 +1859,3 @@ class Ostatus_profile extends Managed_DataObject
|
|||||||
$this->subscribe();
|
$this->subscribe();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Exception indicating we've got a remote reference to a local user,
|
|
||||||
* not a remote user!
|
|
||||||
*
|
|
||||||
* If we can ue a local profile after all, it's available as $e->profile.
|
|
||||||
*/
|
|
||||||
class OStatusShadowException extends Exception
|
|
||||||
{
|
|
||||||
public $profile;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param Profile $profile
|
|
||||||
* @param string $message
|
|
||||||
*/
|
|
||||||
function __construct($profile, $message) {
|
|
||||||
$this->profile = $profile;
|
|
||||||
parent::__construct($message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
28
plugins/OStatus/lib/ostatusshadowexception.php
Normal file
28
plugins/OStatus/lib/ostatusshadowexception.php
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (!defined('GNUSOCIAL')) { exit(1); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @package OStatusPlugin
|
||||||
|
* @maintainer Mikael Nordfeldth <mmn@hethane.se>
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exception indicating we've got a remote reference to a local user,
|
||||||
|
* not a remote user!
|
||||||
|
*
|
||||||
|
* If we can ue a local profile after all, it's available as $e->profile.
|
||||||
|
*/
|
||||||
|
class OStatusShadowException extends Exception
|
||||||
|
{
|
||||||
|
public $profile;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Profile $profile
|
||||||
|
* @param string $message
|
||||||
|
*/
|
||||||
|
function __construct(Profile $profile, $message) {
|
||||||
|
$this->profile = $profile;
|
||||||
|
parent::__construct($message);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user