mirror of
https://github.com/pixelfed/pixelfed.git
synced 2024-11-29 09:43:16 +00:00
commit
f9f94f6dca
23 changed files with 1926 additions and 80 deletions
56
CHANGELOG.md
56
CHANGELOG.md
|
@ -3,10 +3,66 @@
|
||||||
## [Unreleased](https://github.com/pixelfed/pixelfed/compare/v0.10.5...dev)
|
## [Unreleased](https://github.com/pixelfed/pixelfed/compare/v0.10.5...dev)
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
- Added ```/api/v1/accounts/update_credentials``` endpoint [6afd6970](https://github.com/pixelfed/pixelfed/commit/6afd6970)
|
||||||
|
- Added ```/api/v1/accounts/{id}/followers``` endpoint [41c91cba](https://github.com/pixelfed/pixelfed/commit/41c91cba)
|
||||||
|
- Added ```/api/v1/accounts/{id}/following``` endpoint [607eb51b](https://github.com/pixelfed/pixelfed/commit/607eb51b)
|
||||||
|
- Added ```/api/v1/accounts/{id}/statuses``` endpoint [8ce6c1f2](https://github.com/pixelfed/pixelfed/commit/8ce6c1f2)
|
||||||
|
- Added ```/api/v1/accounts/{id}/follow``` endpoint [f3839026](https://github.com/pixelfed/pixelfed/commit/f3839026)
|
||||||
|
- Added ```/api/v1/accounts/{id}/unfollow``` endpoint [fadc96b2](https://github.com/pixelfed/pixelfed/commit/fadc96b2)
|
||||||
|
- Added ```/api/v1/accounts/relationships``` endpoint [4b9f7d6b](https://github.com/pixelfed/pixelfed/commit/4b9f7d6b)
|
||||||
|
- Added ```/api/v1/accounts/search``` endpoint [b1fccf6d](https://github.com/pixelfed/pixelfed/commit/b1fccf6d)
|
||||||
|
- Added ```/api/v1/blocks``` endpoint [ac9f1bc0](https://github.com/pixelfed/pixelfed/commit/ac9f1bc0)
|
||||||
|
- Added ```/api/v1/accounts/{id}/block``` endpoint [c6b1ed97](https://github.com/pixelfed/pixelfed/commit/c6b1ed97)
|
||||||
|
- Added ```/api/v1/accounts/{id}/unblock``` endpoint [35226c99](https://github.com/pixelfed/pixelfed/commit/35226c99)
|
||||||
|
- Added ```/api/v1/custom_emojis``` endpoint [6e43431a](https://github.com/pixelfed/pixelfed/commit/6e43431a)
|
||||||
|
- Added ```/api/v1/domain_blocks``` endpoint [83a6313f](https://github.com/pixelfed/pixelfed/commit/83a6313f)
|
||||||
|
- Added ```/api/v1/endorsements``` endpoint [1f16221e](https://github.com/pixelfed/pixelfed/commit/1f16221e)
|
||||||
|
- Added ```/api/v1/favourites``` endpoint [b9cc06da](https://github.com/pixelfed/pixelfed/commit/b9cc06da)
|
||||||
|
- Added ```/api/v1/statuses/{id}/favourite``` endpoint [4edeba17](https://github.com/pixelfed/pixelfed/commit/4edeba17)
|
||||||
|
- Added ```/api/v1/statuses/{id}/unfavourite``` endpoint [437e18e3](https://github.com/pixelfed/pixelfed/commit/437e18e3)
|
||||||
|
- Added ```/api/v1/filters``` endpoint [b3d82edd](https://github.com/pixelfed/pixelfed/commit/b3d82edd)
|
||||||
|
- Added ```/api/v1/follow_requests``` endpoint [97269136](https://github.com/pixelfed/pixelfed/commit/97269136)
|
||||||
|
- Added ```/api/v1/follow_requests/{id}/authorize``` endpoint [7bdd9b2a](https://github.com/pixelfed/pixelfed/commit/7bdd9b2a)
|
||||||
|
- Added ```/api/v1/follow_requests/{id}/reject``` endpoint [62aa922a](https://github.com/pixelfed/pixelfed/commit/62aa922a)
|
||||||
|
- Added ```/api/v1/suggestions``` endpoint [e52aeeed](https://github.com/pixelfed/pixelfed/commit/e52aeeed)
|
||||||
|
- Added ```/api/v1/lists``` endpoint [2a106c4e](https://github.com/pixelfed/pixelfed/commit/2a106c4e)
|
||||||
|
- Added ```/api/v1/accounts/{id}/lists``` endpoint [dba172df](https://github.com/pixelfed/pixelfed/commit/dba172df)
|
||||||
|
- Added ```/api/v1/lists/{id}/accounts``` endpoint [dba172df](https://github.com/pixelfed/pixelfed/commit/dba172df)
|
||||||
|
- Added ```/api/v1/media``` endpoint [39f3e313](https://github.com/pixelfed/pixelfed/commit/39f3e313)
|
||||||
|
- Added ```/api/v1/media/{id}``` endpoint [fcf231f4](https://github.com/pixelfed/pixelfed/commit/fcf231f4)
|
||||||
|
- Added ```/api/v1/mutes``` endpoint [b280d183](https://github.com/pixelfed/pixelfed/commit/b280d183)
|
||||||
|
- Added ```/api/v1/accounts/{id}/mute``` endpoint [3e98dce4](https://github.com/pixelfed/pixelfed/commit/3e98dce4)
|
||||||
|
- Added ```/api/v1/accounts/{id}/unmute``` endpoint [41c96ddd](https://github.com/pixelfed/pixelfed/commit/41c96ddd)
|
||||||
|
- Added ```/api/v1/notifications``` endpoint [39449f36](https://github.com/pixelfed/pixelfed/commit/39449f36)
|
||||||
|
- Added ```/api/v1/timelines/home``` endpoint [cf3405d8](https://github.com/pixelfed/pixelfed/commit/cf3405d8)
|
||||||
|
- Added ```/api/v1/conversations``` endpoint [336f9069](https://github.com/pixelfed/pixelfed/commit/336f9069)
|
||||||
|
- Added ```/api/v1/timelines/public``` endpoint [f3eeb9c9](https://github.com/pixelfed/pixelfed/commit/f3eeb9c9)
|
||||||
|
- Added ```/api/v1/statuses/{id}/card``` endpoint [92251208](https://github.com/pixelfed/pixelfed/commit/92251208)
|
||||||
|
- Added ```/api/v1/statuses/{id}/reblogged_by``` endpoint [118006ed](https://github.com/pixelfed/pixelfed/commit/118006ed)
|
||||||
|
- Added ```/api/v1/statuses/{id}/favourited_by``` endpoint [5cdff57d](https://github.com/pixelfed/pixelfed/commit/5cdff57d)
|
||||||
|
- Added POST ```/api/v1/statuses``` endpoint [3aa729a3](https://github.com/pixelfed/pixelfed/commit/3aa729a3)
|
||||||
|
- Added DELETE ```/api/v1/statuses``` endpoint [0a20b832](https://github.com/pixelfed/pixelfed/commit/0a20b832)
|
||||||
|
- Added POST ```/api/v1/statuses/{id}/reblog``` endpoint [43cef282](https://github.com/pixelfed/pixelfed/commit/43cef282)
|
||||||
|
- Added POST ```/api/v1/statuses/{id}/unreblog``` endpoint [3147fe5c](https://github.com/pixelfed/pixelfed/commit/3147fe5c)
|
||||||
|
- Added GET ```/api/v1/timelines/tag/{hashtag}``` endpoint [2ff53be4](https://github.com/pixelfed/pixelfed/commit/2ff53be4)
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
- Update developer settings pages, fix vue bug [cd365ab3](https://github.com/pixelfed/pixelfed/commit/cd365ab3)
|
||||||
|
- Update User model, fix filter relationship [5a0c295e](https://github.com/pixelfed/pixelfed/commit/5a0c295e)
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
- Updated Inbox Accept.Follow to use id of remote object [#1715](https://github.com/pixelfed/pixelfed/pull/1715)
|
||||||
|
- Update StatusTransformer, make spoiler_text non-nullable [b66cf9cd](https://github.com/pixelfed/pixelfed/commit/b66cf9cd)
|
||||||
|
- Update FollowerController, make follow and unfollow methods public [6237897d](https://github.com/pixelfed/pixelfed/commit/6237897d)
|
||||||
|
- Update DiscoverComponent, change api namespace [35275572](https://github.com/pixelfed/pixelfed/commit/35275572)
|
||||||
|
|
||||||
|
## Deprecated
|
||||||
|
- Removed deprecated AttachmentTransformer, superceeded by MediaTransformer [9b5aac4f](https://github.com/pixelfed/pixelfed/commit/9b5aac4f)
|
||||||
|
|
||||||
|
### To enable mobile app support
|
||||||
|
- Run ```php artisan passport:keys```
|
||||||
|
- Add ```OAUTH_ENABLED=true``` to .env
|
||||||
|
- Run ```php artisan config:cache```
|
||||||
|
|
||||||
|
|
||||||
## [v0.10.5 (2019-09-24)](https://github.com/pixelfed/pixelfed/compare/v0.10.4...v0.10.5)
|
## [v0.10.5 (2019-09-24)](https://github.com/pixelfed/pixelfed/compare/v0.10.4...v0.10.5)
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -109,7 +109,7 @@ class FollowerController extends Controller
|
||||||
Cache::forget('user:account:id:'.$user->user_id);
|
Cache::forget('user:account:id:'.$user->user_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function sendFollow($user, $target)
|
public function sendFollow($user, $target)
|
||||||
{
|
{
|
||||||
if($target->domain == null || $user->domain != null) {
|
if($target->domain == null || $user->domain != null) {
|
||||||
return;
|
return;
|
||||||
|
@ -117,7 +117,7 @@ class FollowerController extends Controller
|
||||||
|
|
||||||
$payload = [
|
$payload = [
|
||||||
'@context' => 'https://www.w3.org/ns/activitystreams',
|
'@context' => 'https://www.w3.org/ns/activitystreams',
|
||||||
'id' => $user->permalink('#follow/'.$target->id.''),
|
'id' => $user->permalink('#follow/'.$target->id),
|
||||||
'type' => 'Follow',
|
'type' => 'Follow',
|
||||||
'actor' => $user->permalink(),
|
'actor' => $user->permalink(),
|
||||||
'object' => $target->permalink()
|
'object' => $target->permalink()
|
||||||
|
@ -128,7 +128,7 @@ class FollowerController extends Controller
|
||||||
Helpers::sendSignedObject($user, $inbox, $payload);
|
Helpers::sendSignedObject($user, $inbox, $payload);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function sendUndoFollow($user, $target)
|
public function sendUndoFollow($user, $target)
|
||||||
{
|
{
|
||||||
if($target->domain == null || $user->domain != null) {
|
if($target->domain == null || $user->domain != null) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -12,6 +12,6 @@ class VerifyCsrfToken extends Middleware
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $except = [
|
protected $except = [
|
||||||
//
|
'/api/v1/*'
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Transformer\Api;
|
|
||||||
|
|
||||||
use League\Fractal;
|
|
||||||
|
|
||||||
class AttachmentTransformer extends Fractal\TransformerAbstract
|
|
||||||
{
|
|
||||||
public function transform(Media $media)
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
'id' => (string) $media->id,
|
|
||||||
'type' => $media->activityVerb(),
|
|
||||||
'url' => $media->url(),
|
|
||||||
'remote_url' => null,
|
|
||||||
'preview_url' => $media->thumbnailUrl(),
|
|
||||||
'text_url' => null,
|
|
||||||
'meta' => null,
|
|
||||||
'description' => $media->caption,
|
|
||||||
'license' => $media->license,
|
|
||||||
'is_nsfw' => $media->is_nsfw,
|
|
||||||
'orientation' => $media->orientation,
|
|
||||||
'filter_name' => $media->filter_name,
|
|
||||||
'filter_class' => $media->filter_class,
|
|
||||||
'mime' => $media->mime,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
40
app/Transformer/Api/Mastodon/v1/AccountTransformer.php
Normal file
40
app/Transformer/Api/Mastodon/v1/AccountTransformer.php
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Transformer\Api\Mastodon\v1;
|
||||||
|
|
||||||
|
use App\Profile;
|
||||||
|
use League\Fractal;
|
||||||
|
|
||||||
|
class AccountTransformer extends Fractal\TransformerAbstract
|
||||||
|
{
|
||||||
|
public function transform(Profile $profile)
|
||||||
|
{
|
||||||
|
$local = $profile->domain == null;
|
||||||
|
$is_admin = !$local ? false : $profile->user->is_admin;
|
||||||
|
$acct = $local ? $profile->username . '@' . config('pixelfed.domain.app') : substr($profile->username, 1);
|
||||||
|
$username = $local ? $profile->username : explode('@', $acct)[0];
|
||||||
|
return [
|
||||||
|
'id' => (string) $profile->id,
|
||||||
|
'username' => $username,
|
||||||
|
'acct' => $acct,
|
||||||
|
'display_name' => $profile->name,
|
||||||
|
'locked' => (bool) $profile->is_private,
|
||||||
|
'created_at' => $profile->created_at->toJSON(),
|
||||||
|
'followers_count' => $profile->followerCount(),
|
||||||
|
'following_count' => $profile->followingCount(),
|
||||||
|
'statuses_count' => (int) $profile->statusCount(),
|
||||||
|
'note' => $profile->bio ?? '',
|
||||||
|
'url' => $profile->url(),
|
||||||
|
'avatar' => $profile->avatarUrl(),
|
||||||
|
'avatar_static' => $profile->avatarUrl(),
|
||||||
|
'header' => '',
|
||||||
|
'header_static' => '',
|
||||||
|
'emojis' => [],
|
||||||
|
'moved' => null,
|
||||||
|
'fields' => null,
|
||||||
|
'bot' => null,
|
||||||
|
'software' => 'pixelfed',
|
||||||
|
'is_admin' => (bool) $is_admin,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
17
app/Transformer/Api/Mastodon/v1/HashtagTransformer.php
Normal file
17
app/Transformer/Api/Mastodon/v1/HashtagTransformer.php
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Transformer\Api\Mastodon\v1;
|
||||||
|
|
||||||
|
use App\Hashtag;
|
||||||
|
use League\Fractal;
|
||||||
|
|
||||||
|
class HashtagTransformer extends Fractal\TransformerAbstract
|
||||||
|
{
|
||||||
|
public function transform(Hashtag $hashtag)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'name' => $hashtag->name,
|
||||||
|
'url' => $hashtag->url(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
23
app/Transformer/Api/Mastodon/v1/MediaTransformer.php
Normal file
23
app/Transformer/Api/Mastodon/v1/MediaTransformer.php
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Transformer\Api\Mastodon\v1;
|
||||||
|
|
||||||
|
use App\Media;
|
||||||
|
use League\Fractal;
|
||||||
|
|
||||||
|
class MediaTransformer extends Fractal\TransformerAbstract
|
||||||
|
{
|
||||||
|
public function transform(Media $media)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'id' => (string) $media->id,
|
||||||
|
'type' => lcfirst($media->activityVerb()),
|
||||||
|
'url' => $media->url(),
|
||||||
|
'remote_url' => null,
|
||||||
|
'preview_url' => $media->thumbnailUrl(),
|
||||||
|
'text_url' => null,
|
||||||
|
'meta' => null,
|
||||||
|
'description' => $media->caption
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
19
app/Transformer/Api/Mastodon/v1/MentionTransformer.php
Normal file
19
app/Transformer/Api/Mastodon/v1/MentionTransformer.php
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Transformer\Api\Mastodon\v1;
|
||||||
|
|
||||||
|
use App\Profile;
|
||||||
|
use League\Fractal;
|
||||||
|
|
||||||
|
class MentionTransformer extends Fractal\TransformerAbstract
|
||||||
|
{
|
||||||
|
public function transform(Profile $profile)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'id' => (string) $profile->id,
|
||||||
|
'url' => $profile->url(),
|
||||||
|
'username' => $profile->username,
|
||||||
|
'acct' => $profile->username,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
58
app/Transformer/Api/Mastodon/v1/NotificationTransformer.php
Normal file
58
app/Transformer/Api/Mastodon/v1/NotificationTransformer.php
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Transformer\Api\Mastodon\v1;
|
||||||
|
|
||||||
|
use App\{
|
||||||
|
Notification,
|
||||||
|
Status
|
||||||
|
};
|
||||||
|
use League\Fractal;
|
||||||
|
|
||||||
|
class NotificationTransformer extends Fractal\TransformerAbstract
|
||||||
|
{
|
||||||
|
protected $defaultIncludes = [
|
||||||
|
'account',
|
||||||
|
'status',
|
||||||
|
];
|
||||||
|
|
||||||
|
public function transform(Notification $notification)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'id' => (string) $notification->id,
|
||||||
|
'type' => $this->replaceTypeVerb($notification->action),
|
||||||
|
'created_at' => (string) $notification->created_at->toJSON(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function includeAccount(Notification $notification)
|
||||||
|
{
|
||||||
|
return $this->item($notification->actor, new AccountTransformer());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function includeStatus(Notification $notification)
|
||||||
|
{
|
||||||
|
$item = $notification;
|
||||||
|
if($item->item_id && $item->item_type == 'App\Status') {
|
||||||
|
$status = Status::with('media')->find($item->item_id);
|
||||||
|
if($status) {
|
||||||
|
return $this->item($status, new StatusTransformer());
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function replaceTypeVerb($verb)
|
||||||
|
{
|
||||||
|
$verbs = [
|
||||||
|
'follow' => 'follow',
|
||||||
|
'mention' => 'mention',
|
||||||
|
'share' => 'reblog',
|
||||||
|
'like' => 'favourite',
|
||||||
|
'comment' => 'mention',
|
||||||
|
];
|
||||||
|
return $verbs[$verb];
|
||||||
|
}
|
||||||
|
}
|
82
app/Transformer/Api/Mastodon/v1/StatusTransformer.php
Normal file
82
app/Transformer/Api/Mastodon/v1/StatusTransformer.php
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Transformer\Api\Mastodon\v1;
|
||||||
|
|
||||||
|
use App\Status;
|
||||||
|
use League\Fractal;
|
||||||
|
use Cache;
|
||||||
|
|
||||||
|
class StatusTransformer extends Fractal\TransformerAbstract
|
||||||
|
{
|
||||||
|
protected $defaultIncludes = [
|
||||||
|
'account',
|
||||||
|
'media_attachments',
|
||||||
|
'mentions',
|
||||||
|
'tags',
|
||||||
|
];
|
||||||
|
|
||||||
|
public function transform(Status $status)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'id' => (string) $status->id,
|
||||||
|
'uri' => $status->url(),
|
||||||
|
'url' => $status->url(),
|
||||||
|
'in_reply_to_id' => $status->in_reply_to_id,
|
||||||
|
'in_reply_to_account_id' => $status->in_reply_to_profile_id,
|
||||||
|
'reblog' => null,
|
||||||
|
'content' => $status->rendered ?? $status->caption,
|
||||||
|
'created_at' => $status->created_at->toJSON(),
|
||||||
|
'emojis' => [],
|
||||||
|
'replies_count' => 0,
|
||||||
|
'reblogs_count' => $status->reblogs_count != 0 ? $status->reblogs_count: $status->shares()->count(),
|
||||||
|
'favourites_count' => $status->likes_count != 0 ? $status->likes_count: $status->likes()->count(),
|
||||||
|
'reblogged' => null,
|
||||||
|
'favourited' => null,
|
||||||
|
'muted' => null,
|
||||||
|
'sensitive' => (bool) $status->is_nsfw,
|
||||||
|
'spoiler_text' => $status->cw_summary ?? '',
|
||||||
|
'visibility' => $status->visibility ?? $status->scope,
|
||||||
|
'mentions' => [],
|
||||||
|
'tags' => [],
|
||||||
|
'card' => null,
|
||||||
|
'poll' => null,
|
||||||
|
'application' => [
|
||||||
|
'name' => 'web',
|
||||||
|
'website' => null
|
||||||
|
],
|
||||||
|
'language' => null,
|
||||||
|
'pinned' => null,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function includeAccount(Status $status)
|
||||||
|
{
|
||||||
|
$account = $status->profile;
|
||||||
|
|
||||||
|
return $this->item($account, new AccountTransformer());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function includeMediaAttachments(Status $status)
|
||||||
|
{
|
||||||
|
return Cache::remember('mastoapi:status:transformer:media:attachments:'.$status->id, now()->addDays(14), function() use($status) {
|
||||||
|
if(in_array($status->type, ['photo', 'video', 'photo:album', 'loop', 'photo:video:album'])) {
|
||||||
|
$media = $status->media()->orderBy('order')->get();
|
||||||
|
return $this->collection($media, new MediaTransformer());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public function includeMentions(Status $status)
|
||||||
|
{
|
||||||
|
$mentions = $status->mentions;
|
||||||
|
|
||||||
|
return $this->collection($mentions, new MentionTransformer());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function includeTags(Status $status)
|
||||||
|
{
|
||||||
|
$hashtags = $status->hashtags;
|
||||||
|
|
||||||
|
return $this->collection($hashtags, new HashtagTransformer());
|
||||||
|
}
|
||||||
|
}
|
|
@ -31,7 +31,7 @@ class StatusTransformer extends Fractal\TransformerAbstract
|
||||||
'favourited' => $status->liked(),
|
'favourited' => $status->liked(),
|
||||||
'muted' => null,
|
'muted' => null,
|
||||||
'sensitive' => (bool) $status->is_nsfw,
|
'sensitive' => (bool) $status->is_nsfw,
|
||||||
'spoiler_text' => $status->cw_summary,
|
'spoiler_text' => $status->cw_summary ?? '',
|
||||||
'visibility' => $status->visibility ?? $status->scope,
|
'visibility' => $status->visibility ?? $status->scope,
|
||||||
'application' => [
|
'application' => [
|
||||||
'name' => 'web',
|
'name' => 'web',
|
||||||
|
|
|
@ -65,7 +65,7 @@ class User extends Authenticatable
|
||||||
|
|
||||||
public function filters()
|
public function filters()
|
||||||
{
|
{
|
||||||
return $this->hasMany(UserFilter::class);
|
return $this->hasMany(UserFilter::class, 'user_id', 'profile_id');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function receivesBroadcastNotificationsOn()
|
public function receivesBroadcastNotificationsOn()
|
||||||
|
|
|
@ -197,7 +197,7 @@ class Inbox
|
||||||
'type' => 'Accept',
|
'type' => 'Accept',
|
||||||
'actor' => $target->permalink(),
|
'actor' => $target->permalink(),
|
||||||
'object' => [
|
'object' => [
|
||||||
'id' => $actor->permalink('#follows/' . $follower->id),
|
'id' => $this->payload['id'],
|
||||||
'actor' => $actor->permalink(),
|
'actor' => $actor->permalink(),
|
||||||
'type' => 'Follow',
|
'type' => 'Follow',
|
||||||
'object' => $target->permalink()
|
'object' => $target->permalink()
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
"ext-bcmath": "*",
|
"ext-bcmath": "*",
|
||||||
"ext-ctype": "*",
|
"ext-ctype": "*",
|
||||||
"ext-curl": "*",
|
"ext-curl": "*",
|
||||||
|
"ext-intl": "*",
|
||||||
"ext-json": "*",
|
"ext-json": "*",
|
||||||
"ext-mbstring": "*",
|
"ext-mbstring": "*",
|
||||||
"ext-openssl": "*",
|
"ext-openssl": "*",
|
||||||
|
@ -18,7 +19,7 @@
|
||||||
"intervention/image": "^2.4",
|
"intervention/image": "^2.4",
|
||||||
"jenssegers/agent": "^2.6",
|
"jenssegers/agent": "^2.6",
|
||||||
"laravel/framework": "5.8.*",
|
"laravel/framework": "5.8.*",
|
||||||
"laravel/horizon": "^3.1",
|
"laravel/horizon": "^3.3",
|
||||||
"laravel/passport": "^7.0",
|
"laravel/passport": "^7.0",
|
||||||
"laravel/tinker": "^1.0",
|
"laravel/tinker": "^1.0",
|
||||||
"league/flysystem-aws-s3-v3": "~1.0",
|
"league/flysystem-aws-s3-v3": "~1.0",
|
||||||
|
|
|
@ -23,7 +23,7 @@ return [
|
||||||
| This value is the version of your Pixelfed instance.
|
| This value is the version of your Pixelfed instance.
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
'version' => '0.10.5',
|
'version' => '0.10.6',
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
|
BIN
public/js/discover.js
vendored
BIN
public/js/discover.js
vendored
Binary file not shown.
Binary file not shown.
|
@ -80,7 +80,7 @@
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
fetchData() {
|
fetchData() {
|
||||||
axios.get('/api/v2/discover/posts')
|
axios.get('/api/pixelfed/v2/discover/posts')
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
this.posts = res.data.posts;
|
this.posts = res.data.posts;
|
||||||
this.loaded = true;
|
this.loaded = true;
|
||||||
|
|
|
@ -16,9 +16,4 @@
|
||||||
|
|
||||||
@push('scripts')
|
@push('scripts')
|
||||||
<script type="text/javascript" src="{{mix('js/developers.js')}}"></script>
|
<script type="text/javascript" src="{{mix('js/developers.js')}}"></script>
|
||||||
<script type="text/javascript">
|
|
||||||
new Vue({
|
|
||||||
el: '#content'
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
@endpush
|
@endpush
|
|
@ -16,9 +16,4 @@
|
||||||
|
|
||||||
@push('scripts')
|
@push('scripts')
|
||||||
<script type="text/javascript" src="{{mix('js/developers.js')}}"></script>
|
<script type="text/javascript" src="{{mix('js/developers.js')}}"></script>
|
||||||
<script type="text/javascript">
|
|
||||||
new Vue({
|
|
||||||
el: '#content'
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
@endpush
|
@endpush
|
|
@ -9,8 +9,5 @@ Route::group(['prefix' => 'api'], function() {
|
||||||
Route::group(['prefix' => 'v1'], function() {
|
Route::group(['prefix' => 'v1'], function() {
|
||||||
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('filters', 'Api\ApiV1Controller@filters');
|
|
||||||
Route::get('statuses/{id}', 'Api\ApiV1Controller@statusById');
|
|
||||||
Route::get('statuses/{id}/context', 'Api\ApiV1Controller@context');
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -77,25 +77,67 @@ Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofact
|
||||||
Route::get('nodeinfo/2.0.json', 'FederationController@nodeinfo');
|
Route::get('nodeinfo/2.0.json', 'FederationController@nodeinfo');
|
||||||
|
|
||||||
Route::group(['prefix' => 'v1'], function () {
|
Route::group(['prefix' => 'v1'], function () {
|
||||||
Route::get('accounts/verify_credentials', 'ApiController@verifyCredentials')->middleware('auth:api');
|
Route::get('accounts/verify_credentials', 'Api\ApiV1Controller@verifyCredentials')->middleware('auth:api');
|
||||||
Route::get('accounts/relationships', 'PublicApiController@relationships')->middleware('auth:api');
|
Route::patch('accounts/update_credentials', 'Api\ApiV1Controller@accountUpdateCredentials')->middleware('auth:api');
|
||||||
Route::get('accounts/{id}/statuses', 'PublicApiController@accountStatuses')->middleware('auth:api');
|
Route::get('accounts/relationships', 'Api\ApiV1Controller@accountRelationshipsById')->middleware('auth:api');
|
||||||
Route::get('accounts/{id}/following', 'PublicApiController@accountFollowing')->middleware('auth:api');
|
Route::get('accounts/search', 'Api\ApiV1Controller@accountSearch')->middleware('auth:api');
|
||||||
Route::get('accounts/{id}/followers', 'PublicApiController@accountFollowers')->middleware('auth:api');
|
Route::get('accounts/{id}/statuses', 'Api\ApiV1Controller@accountStatusesById')->middleware('auth:api');
|
||||||
// Route::get('accounts/{id}', 'PublicApiController@account');
|
Route::get('accounts/{id}/following', 'Api\ApiV1Controller@accountFollowingById')->middleware('auth:api');
|
||||||
Route::get('accounts/{id}', 'Api\ApiV1Controller@accountById');
|
Route::get('accounts/{id}/followers', 'Api\ApiV1Controller@accountFollowersById')->middleware('auth:api');
|
||||||
|
Route::post('accounts/{id}/follow', 'Api\ApiV1Controller@accountFollowById')->middleware('auth:api');
|
||||||
|
Route::post('accounts/{id}/unfollow', 'Api\ApiV1Controller@accountUnfollowById')->middleware('auth:api');
|
||||||
|
Route::post('accounts/{id}/block', 'Api\ApiV1Controller@accountBlockById')->middleware('auth:api');
|
||||||
|
Route::post('accounts/{id}/unblock', 'Api\ApiV1Controller@accountUnblockById')->middleware('auth:api');
|
||||||
|
Route::post('accounts/{id}/pin', 'Api\ApiV1Controller@accountEndorsements')->middleware('auth:api');
|
||||||
|
Route::post('accounts/{id}/unpin', 'Api\ApiV1Controller@accountEndorsements')->middleware('auth:api');
|
||||||
|
Route::post('accounts/{id}/mute', 'Api\ApiV1Controller@accountMuteById')->middleware('auth:api');
|
||||||
|
Route::post('accounts/{id}/unmute', 'Api\ApiV1Controller@accountUnmuteById')->middleware('auth:api');
|
||||||
|
Route::get('accounts/{id}/lists', 'Api\ApiV1Controller@accountListsById')->middleware('auth:api');
|
||||||
|
Route::get('lists/{id}/accounts', 'Api\ApiV1Controller@accountListsById')->middleware('auth:api');
|
||||||
|
Route::get('accounts/{id}', 'Api\ApiV1Controller@accountById')->middleware('auth:api');
|
||||||
|
|
||||||
Route::post('avatar/update', 'ApiController@avatarUpdate')->middleware('auth:api');
|
Route::post('avatar/update', 'ApiController@avatarUpdate')->middleware('auth:api');
|
||||||
Route::get('likes', 'ApiController@hydrateLikes');
|
Route::get('blocks', 'Api\ApiV1Controller@accountBlocks')->middleware('auth:api');
|
||||||
Route::post('media', 'ApiController@uploadMedia')->middleware('auth:api');
|
Route::get('conversations', 'Api\ApiV1Controller@conversations')->middleware('auth:api');
|
||||||
Route::delete('media', 'ApiController@deleteMedia')->middleware('auth:api');
|
Route::get('custom_emojis', 'Api\ApiV1Controller@customEmojis');
|
||||||
Route::get('notifications', 'ApiController@notifications')->middleware('auth:api');
|
Route::get('domain_blocks', 'Api\ApiV1Controller@accountDomainBlocks')->middleware('auth:api');
|
||||||
Route::get('timelines/public', 'PublicApiController@publicTimelineApi');
|
Route::post('domain_blocks', 'Api\ApiV1Controller@accountDomainBlocks')->middleware('auth:api');
|
||||||
Route::get('timelines/home', 'PublicApiController@homeTimelineApi')->middleware('auth:api');
|
Route::delete('domain_blocks', 'Api\ApiV1Controller@accountDomainBlocks')->middleware('auth:api');
|
||||||
|
Route::get('endorsements', 'Api\ApiV1Controller@accountEndorsements')->middleware('auth:api');
|
||||||
|
Route::get('favourites', 'Api\ApiV1Controller@accountFavourites')->middleware('auth:api');
|
||||||
|
Route::get('filters', 'Api\ApiV1Controller@accountFilters')->middleware('auth:api');
|
||||||
|
Route::get('follow_requests', 'Api\ApiV1Controller@accountFollowRequests')->middleware('auth:api');
|
||||||
|
Route::post('follow_requests/{id}/authorize', 'Api\ApiV1Controller@accountFollowRequestAccept')->middleware('auth:api');
|
||||||
|
Route::post('follow_requests/{id}/reject', 'Api\ApiV1Controller@accountFollowRequestReject')->middleware('auth:api');
|
||||||
|
Route::get('lists', 'Api\ApiV1Controller@accountLists')->middleware('auth:api');
|
||||||
|
Route::post('media', 'Api\ApiV1Controller@mediaUpload')->middleware('auth:api');
|
||||||
|
Route::put('media/{id}', 'Api\ApiV1Controller@mediaUpdate')->middleware('auth:api');
|
||||||
|
Route::get('mutes', 'Api\ApiV1Controller@accountMutes')->middleware('auth:api');
|
||||||
|
Route::get('notifications', 'Api\ApiV1Controller@accountNotifications')->middleware('auth:api');
|
||||||
|
Route::get('suggestions', 'Api\ApiV1Controller@accountSuggestions')->middleware('auth:api');
|
||||||
|
|
||||||
|
Route::post('statuses/{id}/favourite', 'Api\ApiV1Controller@statusFavouriteById')->middleware('auth:api');
|
||||||
|
Route::post('statuses/{id}/unfavourite', 'Api\ApiV1Controller@statusUnfavouriteById')->middleware('auth:api');
|
||||||
|
Route::get('statuses/{id}/context', 'Api\ApiV1Controller@statusContext')->middleware('auth:api');
|
||||||
|
Route::get('statuses/{id}/card', 'Api\ApiV1Controller@statusCard')->middleware('auth:api');
|
||||||
|
Route::get('statuses/{id}/reblogged_by', 'Api\ApiV1Controller@statusRebloggedBy')->middleware('auth:api');
|
||||||
|
Route::get('statuses/{id}/favourited_by', 'Api\ApiV1Controller@statusFavouritedBy')->middleware('auth:api');
|
||||||
|
Route::post('statuses/{id}/reblog', 'Api\ApiV1Controller@statusShare')->middleware('auth:api');
|
||||||
|
Route::post('statuses/{id}/unreblog', 'Api\ApiV1Controller@statusUnshare')->middleware('auth:api');
|
||||||
|
Route::delete('statuses/{id}', 'Api\ApiV1Controller@statusDelete')->middleware('auth:api');
|
||||||
|
Route::get('statuses/{id}', 'Api\ApiV1Controller@statusById')->middleware('auth:api');
|
||||||
|
Route::post('statuses', 'Api\ApiV1Controller@statusCreate')->middleware('auth:api');
|
||||||
|
|
||||||
|
|
||||||
|
Route::get('timelines/home', 'Api\ApiV1Controller@timelineHome')->middleware('auth:api');
|
||||||
|
Route::get('timelines/public', 'Api\ApiV1Controller@timelinePublic');
|
||||||
|
Route::get('timelines/tag/{hashtag}', 'Api\ApiV1Controller@timelineHashtag')->middleware('auth:api');
|
||||||
|
|
||||||
});
|
});
|
||||||
Route::group(['prefix' => 'v2'], function() {
|
Route::group(['prefix' => 'v2'], function() {
|
||||||
Route::get('config', 'ApiController@siteConfiguration');
|
Route::get('config', 'ApiController@siteConfiguration');
|
||||||
Route::get('discover', 'InternalApiController@discover');
|
Route::get('discover', 'InternalApiController@discover');
|
||||||
Route::get('discover/posts', 'InternalApiController@discoverPosts');
|
Route::get('discover/posts', 'InternalApiController@discoverPosts')->middleware('auth:api');
|
||||||
Route::get('profile/{username}/status/{postid}', 'PublicApiController@status');
|
Route::get('profile/{username}/status/{postid}', 'PublicApiController@status');
|
||||||
Route::get('comments/{username}/status/{postId}', 'PublicApiController@statusComments');
|
Route::get('comments/{username}/status/{postId}', 'PublicApiController@statusComments');
|
||||||
Route::get('likes/profile/{username}/status/{id}', 'PublicApiController@statusLikes');
|
Route::get('likes/profile/{username}/status/{id}', 'PublicApiController@statusLikes');
|
||||||
|
@ -111,12 +153,16 @@ Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofact
|
||||||
Route::group(['prefix' => 'pixelfed'], function() {
|
Route::group(['prefix' => 'pixelfed'], function() {
|
||||||
Route::group(['prefix' => 'v1'], function() {
|
Route::group(['prefix' => 'v1'], function() {
|
||||||
Route::get('accounts/verify_credentials', 'ApiController@verifyCredentials');
|
Route::get('accounts/verify_credentials', 'ApiController@verifyCredentials');
|
||||||
Route::get('accounts/relationships', 'PublicApiController@relationships');
|
Route::get('accounts/relationships', 'Api\ApiV1Controller@accountRelationshipsById');
|
||||||
|
Route::get('accounts/search', 'Api\ApiV1Controller@accountSearch');
|
||||||
Route::get('accounts/{id}/statuses', 'PublicApiController@accountStatuses');
|
Route::get('accounts/{id}/statuses', 'PublicApiController@accountStatuses');
|
||||||
Route::get('accounts/{id}/following', 'PublicApiController@accountFollowing');
|
Route::get('accounts/{id}/following', 'PublicApiController@accountFollowing');
|
||||||
Route::get('accounts/{id}/followers', 'PublicApiController@accountFollowers');
|
Route::get('accounts/{id}/followers', 'PublicApiController@accountFollowers');
|
||||||
|
Route::post('accounts/{id}/block', 'Api\ApiV1Controller@accountBlockById');
|
||||||
|
Route::post('accounts/{id}/unblock', 'Api\ApiV1Controller@accountUnblockById');
|
||||||
Route::get('accounts/{id}', 'PublicApiController@account');
|
Route::get('accounts/{id}', 'PublicApiController@account');
|
||||||
Route::post('avatar/update', 'ApiController@avatarUpdate');
|
Route::post('avatar/update', 'ApiController@avatarUpdate');
|
||||||
|
Route::get('custom_emojis', 'Api\ApiV1Controller@customEmojis');
|
||||||
Route::get('likes', 'ApiController@hydrateLikes');
|
Route::get('likes', 'ApiController@hydrateLikes');
|
||||||
Route::post('media', 'ApiController@uploadMedia');
|
Route::post('media', 'ApiController@uploadMedia');
|
||||||
Route::delete('media', 'ApiController@deleteMedia');
|
Route::delete('media', 'ApiController@deleteMedia');
|
||||||
|
@ -124,6 +170,23 @@ Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofact
|
||||||
Route::get('timelines/public', 'PublicApiController@publicTimelineApi');
|
Route::get('timelines/public', 'PublicApiController@publicTimelineApi');
|
||||||
Route::get('timelines/home', 'PublicApiController@homeTimelineApi');
|
Route::get('timelines/home', 'PublicApiController@homeTimelineApi');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Route::group(['prefix' => 'v2'], function() {
|
||||||
|
Route::get('config', 'ApiController@siteConfiguration');
|
||||||
|
Route::get('discover', 'InternalApiController@discover');
|
||||||
|
Route::get('discover/posts', 'InternalApiController@discoverPosts');
|
||||||
|
Route::get('profile/{username}/status/{postid}', 'PublicApiController@status');
|
||||||
|
Route::get('comments/{username}/status/{postId}', 'PublicApiController@statusComments');
|
||||||
|
Route::get('likes/profile/{username}/status/{id}', 'PublicApiController@statusLikes');
|
||||||
|
Route::get('shares/profile/{username}/status/{id}', 'PublicApiController@statusShares');
|
||||||
|
Route::get('status/{id}/replies', 'InternalApiController@statusReplies');
|
||||||
|
Route::post('moderator/action', 'InternalApiController@modAction');
|
||||||
|
Route::get('discover/categories', 'InternalApiController@discoverCategories');
|
||||||
|
Route::get('loops', 'DiscoverController@loopsApi');
|
||||||
|
Route::post('loops/watch', 'DiscoverController@loopWatch');
|
||||||
|
Route::get('discover/tag', 'DiscoverController@getHashtags');
|
||||||
|
Route::post('status/compose', 'InternalApiController@composePost')->middleware('throttle:maxPostsPerHour,60')->middleware('throttle:maxPostsPerDay,1440');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
Route::group(['prefix' => 'local'], function () {
|
Route::group(['prefix' => 'local'], function () {
|
||||||
// Route::get('accounts/verify_credentials', 'ApiController@verifyCredentials');
|
// Route::get('accounts/verify_credentials', 'ApiController@verifyCredentials');
|
||||||
|
|
Loading…
Reference in a new issue