Merge pull request #1770 from pixelfed/staging

Staging
This commit is contained in:
daniel 2019-10-07 03:04:33 -06:00 committed by GitHub
commit d3a4981319
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 108 additions and 59 deletions

View file

@ -370,6 +370,13 @@ class Status extends Model
return $mention->permalink(); return $mention->permalink();
})->toArray(); })->toArray();
if($this->in_reply_to_id != null) {
$parent = $this->parent();
if($parent) {
$mentions = array_merge([$parent->profile->permalink()], $mentions);
}
}
switch ($scope) { switch ($scope) {
case 'public': case 'public':
$res['to'] = [ $res['to'] = [
@ -379,18 +386,14 @@ class Status extends Model
break; break;
case 'unlisted': case 'unlisted':
$res['to'] = [ $res['to'] = array_merge([$this->profile->permalink('/followers')], $mentions);
$this->profile->permalink('/followers')
];
$res['cc'] = [ $res['cc'] = [
"https://www.w3.org/ns/activitystreams#Public" "https://www.w3.org/ns/activitystreams#Public"
]; ];
break; break;
case 'private': case 'private':
$res['to'] = [ $res['to'] = array_merge([$this->profile->permalink('/followers')], $mentions);
$this->profile->permalink('/followers')
];
$res['cc'] = []; $res['cc'] = [];
break; break;

View file

@ -4,6 +4,7 @@ namespace App\Transformer\ActivityPub\Verb;
use App\Status; use App\Status;
use League\Fractal; use League\Fractal;
use Illuminate\Support\Str;
class CreateNote extends Fractal\TransformerAbstract class CreateNote extends Fractal\TransformerAbstract
{ {
@ -11,12 +12,33 @@ class CreateNote extends Fractal\TransformerAbstract
{ {
$mentions = $status->mentions->map(function ($mention) { $mentions = $status->mentions->map(function ($mention) {
$webfinger = $mention->emailUrl();
$name = Str::startsWith($webfinger, '@') ?
$webfinger :
'@' . $webfinger;
return [ return [
'type' => 'Mention', 'type' => 'Mention',
'href' => $mention->permalink(), 'href' => $mention->permalink(),
'name' => $mention->emailUrl() 'name' => $name
]; ];
})->toArray(); })->toArray();
if($status->in_reply_to_id != null) {
$parent = $status->parent()->profile;
if($parent) {
$webfinger = $parent->emailUrl();
$name = Str::startsWith($webfinger, '@') ?
$webfinger :
'@' . $webfinger;
$reply = [
'type' => 'Mention',
'href' => $parent->permalink(),
'name' => $name
];
$mentions = array_merge($reply, $mentions);
}
}
$hashtags = $status->hashtags->map(function ($hashtag) { $hashtags = $status->hashtags->map(function ($hashtag) {
return [ return [
'type' => 'Hashtag', 'type' => 'Hashtag',

View file

@ -4,6 +4,7 @@ namespace App\Transformer\ActivityPub\Verb;
use App\Status; use App\Status;
use League\Fractal; use League\Fractal;
use Illuminate\Support\Str;
class Note extends Fractal\TransformerAbstract class Note extends Fractal\TransformerAbstract
{ {
@ -11,12 +12,33 @@ class Note extends Fractal\TransformerAbstract
{ {
$mentions = $status->mentions->map(function ($mention) { $mentions = $status->mentions->map(function ($mention) {
$webfinger = $mention->emailUrl();
$name = Str::startsWith($webfinger, '@') ?
$webfinger :
'@' . $webfinger;
return [ return [
'type' => 'Mention', 'type' => 'Mention',
'href' => $mention->permalink(), 'href' => $mention->permalink(),
'name' => $mention->emailUrl() 'name' => $name
]; ];
})->toArray(); })->toArray();
if($status->in_reply_to_id != null) {
$parent = $status->parent()->profile;
if($parent) {
$webfinger = $parent->emailUrl();
$name = Str::startsWith($webfinger, '@') ?
$webfinger :
'@' . $webfinger;
$reply = [
'type' => 'Mention',
'href' => $parent->permalink(),
'name' => $name
];
$mentions = array_merge($reply, $mentions);
}
}
$hashtags = $status->hashtags->map(function ($hashtag) { $hashtags = $status->hashtags->map(function ($hashtag) {
return [ return [
'type' => 'Hashtag', 'type' => 'Hashtag',

View file

@ -2,67 +2,69 @@
use Illuminate\Http\Request; use Illuminate\Http\Request;
$middleware = ['auth:api','twofactor','validemail','localization'];
Route::post('/users/{username}/inbox', 'FederationController@userInbox'); Route::post('/users/{username}/inbox', 'FederationController@userInbox');
Route::group(['prefix' => 'api'], function() { Route::group(['prefix' => 'api'], function() use($middleware) {
Route::group(['prefix' => 'v1'], function() { Route::group(['prefix' => 'v1'], function() use($middleware) {
Route::post('apps', 'Api\ApiV1Controller@apps'); Route::post('apps', 'Api\ApiV1Controller@apps');
Route::get('instance', 'Api\ApiV1Controller@instance'); Route::get('instance', 'Api\ApiV1Controller@instance');
Route::get('accounts/verify_credentials', 'Api\ApiV1Controller@verifyCredentials')->middleware('auth:api'); Route::get('accounts/verify_credentials', 'Api\ApiV1Controller@verifyCredentials')->middleware($middleware);
Route::patch('accounts/update_credentials', 'Api\ApiV1Controller@accountUpdateCredentials')->middleware('auth:api'); Route::patch('accounts/update_credentials', 'Api\ApiV1Controller@accountUpdateCredentials')->middleware($middleware);
Route::get('accounts/relationships', 'Api\ApiV1Controller@accountRelationshipsById')->middleware('auth:api'); Route::get('accounts/relationships', 'Api\ApiV1Controller@accountRelationshipsById')->middleware($middleware);
Route::get('accounts/search', 'Api\ApiV1Controller@accountSearch')->middleware('auth:api'); Route::get('accounts/search', 'Api\ApiV1Controller@accountSearch')->middleware($middleware);
Route::get('accounts/{id}/statuses', 'Api\ApiV1Controller@accountStatusesById')->middleware('auth:api'); Route::get('accounts/{id}/statuses', 'Api\ApiV1Controller@accountStatusesById')->middleware($middleware);
Route::get('accounts/{id}/following', 'Api\ApiV1Controller@accountFollowingById')->middleware('auth:api'); Route::get('accounts/{id}/following', 'Api\ApiV1Controller@accountFollowingById')->middleware($middleware);
Route::get('accounts/{id}/followers', 'Api\ApiV1Controller@accountFollowersById')->middleware('auth:api'); Route::get('accounts/{id}/followers', 'Api\ApiV1Controller@accountFollowersById')->middleware($middleware);
Route::post('accounts/{id}/follow', 'Api\ApiV1Controller@accountFollowById')->middleware('auth:api'); Route::post('accounts/{id}/follow', 'Api\ApiV1Controller@accountFollowById')->middleware($middleware);
Route::post('accounts/{id}/unfollow', 'Api\ApiV1Controller@accountUnfollowById')->middleware('auth:api'); Route::post('accounts/{id}/unfollow', 'Api\ApiV1Controller@accountUnfollowById')->middleware($middleware);
Route::post('accounts/{id}/block', 'Api\ApiV1Controller@accountBlockById')->middleware('auth:api'); Route::post('accounts/{id}/block', 'Api\ApiV1Controller@accountBlockById')->middleware($middleware);
Route::post('accounts/{id}/unblock', 'Api\ApiV1Controller@accountUnblockById')->middleware('auth:api'); Route::post('accounts/{id}/unblock', 'Api\ApiV1Controller@accountUnblockById')->middleware($middleware);
Route::post('accounts/{id}/pin', 'Api\ApiV1Controller@accountEndorsements')->middleware('auth:api'); Route::post('accounts/{id}/pin', 'Api\ApiV1Controller@accountEndorsements')->middleware($middleware);
Route::post('accounts/{id}/unpin', 'Api\ApiV1Controller@accountEndorsements')->middleware('auth:api'); Route::post('accounts/{id}/unpin', 'Api\ApiV1Controller@accountEndorsements')->middleware($middleware);
Route::post('accounts/{id}/mute', 'Api\ApiV1Controller@accountMuteById')->middleware('auth:api'); Route::post('accounts/{id}/mute', 'Api\ApiV1Controller@accountMuteById')->middleware($middleware);
Route::post('accounts/{id}/unmute', 'Api\ApiV1Controller@accountUnmuteById')->middleware('auth:api'); Route::post('accounts/{id}/unmute', 'Api\ApiV1Controller@accountUnmuteById')->middleware($middleware);
Route::get('accounts/{id}/lists', 'Api\ApiV1Controller@accountListsById')->middleware('auth:api'); Route::get('accounts/{id}/lists', 'Api\ApiV1Controller@accountListsById')->middleware($middleware);
Route::get('lists/{id}/accounts', 'Api\ApiV1Controller@accountListsById')->middleware('auth:api'); Route::get('lists/{id}/accounts', 'Api\ApiV1Controller@accountListsById')->middleware($middleware);
Route::get('accounts/{id}', 'Api\ApiV1Controller@accountById')->middleware('auth:api'); Route::get('accounts/{id}', 'Api\ApiV1Controller@accountById')->middleware($middleware);
Route::post('avatar/update', 'ApiController@avatarUpdate')->middleware('auth:api'); Route::post('avatar/update', 'ApiController@avatarUpdate')->middleware($middleware);
Route::get('blocks', 'Api\ApiV1Controller@accountBlocks')->middleware('auth:api'); Route::get('blocks', 'Api\ApiV1Controller@accountBlocks')->middleware($middleware);
Route::get('conversations', 'Api\ApiV1Controller@conversations')->middleware('auth:api'); Route::get('conversations', 'Api\ApiV1Controller@conversations')->middleware($middleware);
Route::get('custom_emojis', 'Api\ApiV1Controller@customEmojis'); Route::get('custom_emojis', 'Api\ApiV1Controller@customEmojis');
Route::get('domain_blocks', 'Api\ApiV1Controller@accountDomainBlocks')->middleware('auth:api'); Route::get('domain_blocks', 'Api\ApiV1Controller@accountDomainBlocks')->middleware($middleware);
Route::post('domain_blocks', 'Api\ApiV1Controller@accountDomainBlocks')->middleware('auth:api'); Route::post('domain_blocks', 'Api\ApiV1Controller@accountDomainBlocks')->middleware($middleware);
Route::delete('domain_blocks', 'Api\ApiV1Controller@accountDomainBlocks')->middleware('auth:api'); Route::delete('domain_blocks', 'Api\ApiV1Controller@accountDomainBlocks')->middleware($middleware);
Route::get('endorsements', 'Api\ApiV1Controller@accountEndorsements')->middleware('auth:api'); Route::get('endorsements', 'Api\ApiV1Controller@accountEndorsements')->middleware($middleware);
Route::get('favourites', 'Api\ApiV1Controller@accountFavourites')->middleware('auth:api'); Route::get('favourites', 'Api\ApiV1Controller@accountFavourites')->middleware($middleware);
Route::get('filters', 'Api\ApiV1Controller@accountFilters')->middleware('auth:api'); Route::get('filters', 'Api\ApiV1Controller@accountFilters')->middleware($middleware);
Route::get('follow_requests', 'Api\ApiV1Controller@accountFollowRequests')->middleware('auth:api'); Route::get('follow_requests', 'Api\ApiV1Controller@accountFollowRequests')->middleware($middleware);
Route::post('follow_requests/{id}/authorize', 'Api\ApiV1Controller@accountFollowRequestAccept')->middleware('auth:api'); Route::post('follow_requests/{id}/authorize', 'Api\ApiV1Controller@accountFollowRequestAccept')->middleware($middleware);
Route::post('follow_requests/{id}/reject', 'Api\ApiV1Controller@accountFollowRequestReject')->middleware('auth:api'); Route::post('follow_requests/{id}/reject', 'Api\ApiV1Controller@accountFollowRequestReject')->middleware($middleware);
Route::get('lists', 'Api\ApiV1Controller@accountLists')->middleware('auth:api'); Route::get('lists', 'Api\ApiV1Controller@accountLists')->middleware($middleware);
Route::post('media', 'Api\ApiV1Controller@mediaUpload')->middleware('auth:api'); Route::post('media', 'Api\ApiV1Controller@mediaUpload')->middleware($middleware);
Route::put('media/{id}', 'Api\ApiV1Controller@mediaUpdate')->middleware('auth:api'); Route::put('media/{id}', 'Api\ApiV1Controller@mediaUpdate')->middleware($middleware);
Route::get('mutes', 'Api\ApiV1Controller@accountMutes')->middleware('auth:api'); Route::get('mutes', 'Api\ApiV1Controller@accountMutes')->middleware($middleware);
Route::get('notifications', 'Api\ApiV1Controller@accountNotifications')->middleware('auth:api'); Route::get('notifications', 'Api\ApiV1Controller@accountNotifications')->middleware($middleware);
Route::get('suggestions', 'Api\ApiV1Controller@accountSuggestions')->middleware('auth:api'); Route::get('suggestions', 'Api\ApiV1Controller@accountSuggestions')->middleware($middleware);
Route::post('statuses/{id}/favourite', 'Api\ApiV1Controller@statusFavouriteById')->middleware('auth:api'); Route::post('statuses/{id}/favourite', 'Api\ApiV1Controller@statusFavouriteById')->middleware($middleware);
Route::post('statuses/{id}/unfavourite', 'Api\ApiV1Controller@statusUnfavouriteById')->middleware('auth:api'); Route::post('statuses/{id}/unfavourite', 'Api\ApiV1Controller@statusUnfavouriteById')->middleware($middleware);
Route::get('statuses/{id}/context', 'Api\ApiV1Controller@statusContext')->middleware('auth:api'); Route::get('statuses/{id}/context', 'Api\ApiV1Controller@statusContext')->middleware($middleware);
Route::get('statuses/{id}/card', 'Api\ApiV1Controller@statusCard')->middleware('auth:api'); Route::get('statuses/{id}/card', 'Api\ApiV1Controller@statusCard')->middleware($middleware);
Route::get('statuses/{id}/reblogged_by', 'Api\ApiV1Controller@statusRebloggedBy')->middleware('auth:api'); Route::get('statuses/{id}/reblogged_by', 'Api\ApiV1Controller@statusRebloggedBy')->middleware($middleware);
Route::get('statuses/{id}/favourited_by', 'Api\ApiV1Controller@statusFavouritedBy')->middleware('auth:api'); Route::get('statuses/{id}/favourited_by', 'Api\ApiV1Controller@statusFavouritedBy')->middleware($middleware);
Route::post('statuses/{id}/reblog', 'Api\ApiV1Controller@statusShare')->middleware('auth:api'); Route::post('statuses/{id}/reblog', 'Api\ApiV1Controller@statusShare')->middleware($middleware);
Route::post('statuses/{id}/unreblog', 'Api\ApiV1Controller@statusUnshare')->middleware('auth:api'); Route::post('statuses/{id}/unreblog', 'Api\ApiV1Controller@statusUnshare')->middleware($middleware);
Route::delete('statuses/{id}', 'Api\ApiV1Controller@statusDelete')->middleware('auth:api'); Route::delete('statuses/{id}', 'Api\ApiV1Controller@statusDelete')->middleware($middleware);
Route::get('statuses/{id}', 'Api\ApiV1Controller@statusById')->middleware('auth:api'); Route::get('statuses/{id}', 'Api\ApiV1Controller@statusById')->middleware($middleware);
Route::post('statuses', 'Api\ApiV1Controller@statusCreate')->middleware('auth:api'); Route::post('statuses', 'Api\ApiV1Controller@statusCreate')->middleware($middleware);
Route::get('timelines/home', 'Api\ApiV1Controller@timelineHome')->middleware('auth:api'); Route::get('timelines/home', 'Api\ApiV1Controller@timelineHome')->middleware($middleware);
Route::get('timelines/public', 'Api\ApiV1Controller@timelinePublic'); Route::get('timelines/public', 'Api\ApiV1Controller@timelinePublic');
Route::get('timelines/tag/{hashtag}', 'Api\ApiV1Controller@timelineHashtag')->middleware('auth:api'); Route::get('timelines/tag/{hashtag}', 'Api\ApiV1Controller@timelineHashtag')->middleware($middleware);
}); });
}); });