Accept 'tag' and other non-http id URIs in Ostatus_profile::getActivityObjectProfileURI().
(If there's not a valid ID we fall back to the link, which we do still validate as http/s.)
This commit is contained in:
parent
5d3bce49b8
commit
b228da628d
@ -1140,35 +1140,49 @@ class Ostatus_profile extends Memcached_DataObject
|
|||||||
/**
|
/**
|
||||||
* @param Activity $activity
|
* @param Activity $activity
|
||||||
* @return mixed matching Ostatus_profile or false if none known
|
* @return mixed matching Ostatus_profile or false if none known
|
||||||
|
* @throws ServerException if feed info invalid
|
||||||
*/
|
*/
|
||||||
public static function getActorProfile($activity)
|
public static function getActorProfile($activity)
|
||||||
{
|
{
|
||||||
return self::getActivityObjectProfile($activity->actor);
|
return self::getActivityObjectProfile($activity->actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param ActivityObject $activity
|
||||||
|
* @return mixed matching Ostatus_profile or false if none known
|
||||||
|
* @throws ServerException if feed info invalid
|
||||||
|
*/
|
||||||
protected static function getActivityObjectProfile($object)
|
protected static function getActivityObjectProfile($object)
|
||||||
{
|
{
|
||||||
$uri = self::getActivityObjectProfileURI($object);
|
$uri = self::getActivityObjectProfileURI($object);
|
||||||
return Ostatus_profile::staticGet('uri', $uri);
|
return Ostatus_profile::staticGet('uri', $uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static function getActorProfileURI($activity)
|
|
||||||
{
|
|
||||||
return self::getActivityObjectProfileURI($activity->actor);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Activity $activity
|
* Get the identifier URI for the remote entity described
|
||||||
|
* by this ActivityObject. This URI is *not* guaranteed to be
|
||||||
|
* a resolvable HTTP/HTTPS URL.
|
||||||
|
*
|
||||||
|
* @param ActivityObject $object
|
||||||
* @return string
|
* @return string
|
||||||
* @throws ServerException
|
* @throws ServerException if feed info invalid
|
||||||
*/
|
*/
|
||||||
protected static function getActivityObjectProfileURI($object)
|
protected static function getActivityObjectProfileURI($object)
|
||||||
{
|
{
|
||||||
$opts = array('allowed_schemes' => array('http', 'https'));
|
if ($object->id) {
|
||||||
if ($object->id && Validate::uri($object->id, $opts)) {
|
// Possibly an upstream bug; tag: URIs are rejected unless you
|
||||||
return $object->id;
|
// explicitly ask for them. All other schemes are accepted for
|
||||||
|
// basic URI validation without asking.
|
||||||
|
if (Validate::uri($object->id) ||
|
||||||
|
Validate::uri($object->id, array('allowed_scheme' => array('tag')))) {
|
||||||
|
return $object->id;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ($object->link && Validate::uri($object->link, $opts)) {
|
|
||||||
|
// If the id is missing or invalid (we've seen feeds mistakenly listing
|
||||||
|
// things like local usernames in that field) then we'll use the profile
|
||||||
|
// page link, if valid.
|
||||||
|
if ($object->link && common_valid_http_url($object->link)) {
|
||||||
return $object->link;
|
return $object->link;
|
||||||
}
|
}
|
||||||
throw new ServerException("No author ID URI found");
|
throw new ServerException("No author ID URI found");
|
||||||
|
Loading…
Reference in New Issue
Block a user