forked from GNUsocial/gnu-social
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) {
|
||||
list($target, $pos) = $wmatch;
|
||||
$this->log(LOG_INFO, "Checking webfinger '$target'");
|
||||
$profile = null;
|
||||
try {
|
||||
$oprofile = Ostatus_profile::ensureWebfinger($target);
|
||||
if ($oprofile instanceof Ostatus_profile && !$oprofile->isGroup()) {
|
||||
$profile = $oprofile->localProfile();
|
||||
$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);
|
||||
if (!$oprofile instanceof Ostatus_profile || !$oprofile->isPerson()) {
|
||||
continue;
|
||||
}
|
||||
$profile = $oprofile->localProfile();
|
||||
} catch (OStatusShadowException $e) {
|
||||
// This means we got a local user in the webfinger lookup
|
||||
$profile = $e->profile;
|
||||
} catch (Exception $e) {
|
||||
$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();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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