pixelfed/app/Http/Controllers/ProfileController.php
Daniel Supernault 51aa17052f Update FederationController
Prevent outbox from returning an actor object so other federation
software does not attempt to send inbox requests until the inbox is
fully supported.
2018-05-31 21:34:04 -06:00

82 lines
2.8 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Auth, Cache;
use App\{Follower, Profile, User};
use League\Fractal;
use App\Util\Lexer\Nickname;
use App\Util\Webfinger\Webfinger;
use App\Transformer\ActivityPub\{
ProfileOutbox,
ProfileTransformer
};
class ProfileController extends Controller
{
public function show(Request $request, $username)
{
$user = Profile::whereUsername($username)->firstOrFail();
$mimes = [
'application/activity+json',
'application/ld+json',
'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'
];
if(in_array($request->header('accept'), $mimes) && config('pixelfed.activitypub_enabled')) {
return $this->showActivityPub($request, $user);
}
// TODO: refactor this mess
$owner = Auth::check() && Auth::id() === $user->user_id;
$following = ($owner == false && Auth::check()) ? $user->followedBy(Auth::user()->profile) : false;
$timeline = $user->statuses()->whereHas('media')->whereNull('in_reply_to_id')->orderBy('id','desc')->paginate(21);
return view('profile.show', compact('user', 'owner', 'following', 'timeline'));
}
public function showActivityPub(Request $request, $user)
{
$fractal = new Fractal\Manager();
$resource = new Fractal\Resource\Item($user, new ProfileTransformer);
$res = $fractal->createData($resource)->toArray();
return response()->json($res['data']);
}
public function showAtomFeed(Request $request, $user)
{
$profile = Profile::whereUsername($user)->firstOrFail();
$items = $profile->statuses()->orderBy('created_at', 'desc')->take(10)->get();
return response()->view('atom.user', compact('profile', 'items'))
->header('Content-Type', 'application/atom+xml');
}
public function followers(Request $request, $username)
{
$profile = Profile::whereUsername($username)->firstOrFail();
$followers = $profile->followers()->orderBy('created_at','desc')->simplePaginate(12);
return view('profile.followers', compact('profile', 'followers'));
}
public function following(Request $request, $username)
{
$profile = Profile::whereUsername($username)->firstOrFail();
$following = $profile->following()->orderBy('created_at','desc')->simplePaginate(12);
return view('profile.following', compact('profile', 'following'));
}
public function savedBookmarks(Request $request, $username)
{
if(Auth::check() === false || $username !== Auth::user()->username) {
abort(403);
}
$user = Auth::user()->profile;
$owner = true;
$following = false;
$timeline = $user->bookmarks()->orderBy('created_at','desc')->simplePaginate(10);
return view('profile.show', compact('user', 'owner', 'following', 'timeline'));
}
}