mirror of
https://github.com/pixelfed/pixelfed.git
synced 2024-11-10 00:34:50 +00:00
Update AP Helpers, fixes #3287
This commit is contained in:
parent
3e670774c0
commit
b78bff72db
1 changed files with 54 additions and 10 deletions
|
@ -71,11 +71,25 @@ class Helpers {
|
||||||
$mimeTypes = explode(',', config_cache('pixelfed.media_types'));
|
$mimeTypes = explode(',', config_cache('pixelfed.media_types'));
|
||||||
$mediaTypes = in_array('video/mp4', $mimeTypes) ? ['Document', 'Image', 'Video'] : ['Document', 'Image'];
|
$mediaTypes = in_array('video/mp4', $mimeTypes) ? ['Document', 'Image', 'Video'] : ['Document', 'Image'];
|
||||||
|
|
||||||
|
// Peertube
|
||||||
|
// $mediaTypes = in_array('video/mp4', $mimeTypes) ? ['Document', 'Image', 'Video', 'Link'] : ['Document', 'Image'];
|
||||||
|
|
||||||
if(!isset($activity['attachment']) || empty($activity['attachment'])) {
|
if(!isset($activity['attachment']) || empty($activity['attachment'])) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// peertube
|
||||||
|
// $attachment = is_array($activity['url']) ?
|
||||||
|
// collect($activity['url'])
|
||||||
|
// ->filter(function($media) {
|
||||||
|
// return $media['type'] == 'Link' && $media['mediaType'] == 'video/mp4';
|
||||||
|
// })
|
||||||
|
// ->take(1)
|
||||||
|
// ->values()
|
||||||
|
// ->toArray()[0] : $activity['attachment'];
|
||||||
|
|
||||||
$attachment = $activity['attachment'];
|
$attachment = $activity['attachment'];
|
||||||
|
|
||||||
$valid = Validator::make($attachment, [
|
$valid = Validator::make($attachment, [
|
||||||
'*.type' => [
|
'*.type' => [
|
||||||
'required',
|
'required',
|
||||||
|
@ -88,7 +102,7 @@ class Helpers {
|
||||||
'string',
|
'string',
|
||||||
Rule::in($mimeTypes)
|
Rule::in($mimeTypes)
|
||||||
],
|
],
|
||||||
'*.name' => 'nullable|string|max:255'
|
'*.name' => 'sometimes|nullable|string|max:255'
|
||||||
])->passes();
|
])->passes();
|
||||||
|
|
||||||
return $valid;
|
return $valid;
|
||||||
|
@ -247,6 +261,19 @@ class Helpers {
|
||||||
return self::fetchFromUrl($url);
|
return self::fetchFromUrl($url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function pluckval($val)
|
||||||
|
{
|
||||||
|
if(is_string($val)) {
|
||||||
|
return $val;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(is_array($val)) {
|
||||||
|
return !empty($val) ? $val[0] : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public static function statusFirstOrFetch($url, $replyTo = false)
|
public static function statusFirstOrFetch($url, $replyTo = false)
|
||||||
{
|
{
|
||||||
$url = self::validateUrl($url);
|
$url = self::validateUrl($url);
|
||||||
|
@ -330,7 +357,7 @@ class Helpers {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$id = isset($res['id']) ? $res['id'] : $url;
|
$id = isset($res['id']) ? self::pluckval($res['id']) : self::pluckval($url);
|
||||||
$idDomain = parse_url($id, PHP_URL_HOST);
|
$idDomain = parse_url($id, PHP_URL_HOST);
|
||||||
$urlDomain = parse_url($url, PHP_URL_HOST);
|
$urlDomain = parse_url($url, PHP_URL_HOST);
|
||||||
|
|
||||||
|
@ -338,9 +365,20 @@ class Helpers {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isset($activity['object']['attributedTo'])) {
|
$attributedTo = is_string($activity['object']['attributedTo']) ?
|
||||||
$actorDomain = parse_url($activity['object']['attributedTo'], PHP_URL_HOST);
|
$activity['object']['attributedTo'] :
|
||||||
if(!self::validateUrl($activity['object']['attributedTo']) ||
|
(is_array($activity['object']['attributedTo']) ?
|
||||||
|
collect($activity['object']['attributedTo'])
|
||||||
|
->filter(function($o) {
|
||||||
|
return $o && isset($o['type']) && $o['type'] == 'Person';
|
||||||
|
})
|
||||||
|
->pluck('id')
|
||||||
|
->first() : null
|
||||||
|
);
|
||||||
|
|
||||||
|
if($attributedTo) {
|
||||||
|
$actorDomain = parse_url($attributedTo, PHP_URL_HOST);
|
||||||
|
if(!self::validateUrl($attributedTo) ||
|
||||||
$idDomain !== $actorDomain ||
|
$idDomain !== $actorDomain ||
|
||||||
$actorDomain !== $urlDomain
|
$actorDomain !== $urlDomain
|
||||||
)
|
)
|
||||||
|
@ -353,14 +391,14 @@ class Helpers {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$profile = self::profileFirstOrNew($activity['object']['attributedTo']);
|
$profile = self::profileFirstOrNew($attributedTo);
|
||||||
if(isset($activity['object']['inReplyTo']) && !empty($activity['object']['inReplyTo']) || $replyTo == true) {
|
if(isset($activity['object']['inReplyTo']) && !empty($activity['object']['inReplyTo']) || $replyTo == true) {
|
||||||
$reply_to = self::statusFirstOrFetch($activity['object']['inReplyTo'], false);
|
$reply_to = self::statusFirstOrFetch(self::pluckval($activity['object']['inReplyTo']), false);
|
||||||
$reply_to = optional($reply_to)->id;
|
$reply_to = optional($reply_to)->id;
|
||||||
} else {
|
} else {
|
||||||
$reply_to = null;
|
$reply_to = null;
|
||||||
}
|
}
|
||||||
$ts = is_array($res['published']) ? $res['published'][0] : $res['published'];
|
$ts = self::pluckval($res['published']);
|
||||||
|
|
||||||
if($scope == 'public' && in_array($urlDomain, InstanceService::getUnlistedDomains())) {
|
if($scope == 'public' && in_array($urlDomain, InstanceService::getUnlistedDomains())) {
|
||||||
$scope = 'unlisted';
|
$scope = 'unlisted';
|
||||||
|
@ -399,8 +437,8 @@ class Helpers {
|
||||||
return DB::transaction(function() use($profile, $res, $url, $ts, $reply_to, $cw, $scope, $id) {
|
return DB::transaction(function() use($profile, $res, $url, $ts, $reply_to, $cw, $scope, $id) {
|
||||||
$status = new Status;
|
$status = new Status;
|
||||||
$status->profile_id = $profile->id;
|
$status->profile_id = $profile->id;
|
||||||
$status->url = isset($res['url']) ? $res['url'] : $url;
|
$status->url = isset($res['url']) && is_string($res['url']) ? $res['url'] : $url;
|
||||||
$status->uri = isset($res['url']) ? $res['url'] : $url;
|
$status->uri = isset($res['url']) && is_string($res['url']) ? $res['url'] : $url;
|
||||||
$status->object_url = $id;
|
$status->object_url = $id;
|
||||||
$status->caption = strip_tags($res['content']);
|
$status->caption = strip_tags($res['content']);
|
||||||
$status->rendered = Purify::clean($res['content']);
|
$status->rendered = Purify::clean($res['content']);
|
||||||
|
@ -486,10 +524,16 @@ class Helpers {
|
||||||
public static function importNoteAttachment($data, Status $status)
|
public static function importNoteAttachment($data, Status $status)
|
||||||
{
|
{
|
||||||
if(self::verifyAttachments($data) == false) {
|
if(self::verifyAttachments($data) == false) {
|
||||||
|
// \Log::info('importNoteAttachment::failedVerification.', [$data['id']]);
|
||||||
$status->viewType();
|
$status->viewType();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$attachments = isset($data['object']) ? $data['object']['attachment'] : $data['attachment'];
|
$attachments = isset($data['object']) ? $data['object']['attachment'] : $data['attachment'];
|
||||||
|
// peertube
|
||||||
|
// if(!$attachments) {
|
||||||
|
// $obj = isset($data['object']) ? $data['object'] : $data;
|
||||||
|
// $attachments = is_array($obj['url']) ? $obj['url'] : null;
|
||||||
|
// }
|
||||||
$user = $status->profile;
|
$user = $status->profile;
|
||||||
$storagePath = MediaPathService::get($user, 2);
|
$storagePath = MediaPathService::get($user, 2);
|
||||||
$allowed = explode(',', config_cache('pixelfed.media_types'));
|
$allowed = explode(',', config_cache('pixelfed.media_types'));
|
||||||
|
|
Loading…
Reference in a new issue