diff --git a/app/Http/Controllers/App/FeedController.php b/app/Http/Controllers/App/FeedController.php new file mode 100644 index 00000000..8171c06d --- /dev/null +++ b/app/Http/Controllers/App/FeedController.php @@ -0,0 +1,61 @@ +with('user')->get(); + $meta = [ + 'title' => 'LinkAce Links', + 'link' => $request->fullUrl(), + 'updated' => now()->toRfc3339String(), + 'id' => $request->fullUrl(), + ]; + + return new Response(view('actions.feed.links', [ + 'meta' => $meta, + 'links' => $links, + ]), 200, ['Content-Type' => 'application/xml']); + } + + public function lists(Request $request) + { + $lists = LinkList::latest()->with('user')->get(); + $meta = [ + 'title' => 'LinkAce Lists', + 'link' => $request->fullUrl(), + 'updated' => now()->toRfc3339String(), + 'id' => $request->fullUrl(), + ]; + + return new Response(view('actions.feed.lists', [ + 'meta' => $meta, + 'lists' => $lists, + ]), 200, ['Content-Type' => 'application/xml']); + } + + public function tags(Request $request) + { + $tags = Tag::latest()->with('user')->get(); + $meta = [ + 'title' => 'LinkAce Links', + 'link' => $request->fullUrl(), + 'updated' => now()->toRfc3339String(), + 'id' => $request->fullUrl(), + ]; + + return new Response(view('actions.feed.tags', [ + 'meta' => $meta, + 'tags' => $tags, + ]), 200, ['Content-Type' => 'application/xml']); + } +} diff --git a/app/Http/Controllers/Guest/FeedController.php b/app/Http/Controllers/Guest/FeedController.php index 3a45affc..00ed6542 100644 --- a/app/Http/Controllers/Guest/FeedController.php +++ b/app/Http/Controllers/Guest/FeedController.php @@ -21,7 +21,7 @@ class FeedController extends Controller 'id' => $request->fullUrl(), ]; - return new Response(view('guest.links.feed', [ + return new Response(view('actions.feed.links', [ 'meta' => $meta, 'links' => $links, ]), 200, ['Content-Type' => 'application/xml']); @@ -37,7 +37,7 @@ class FeedController extends Controller 'id' => $request->fullUrl(), ]; - return new Response(view('guest.lists.feed', [ + return new Response(view('actions.feed.lists', [ 'meta' => $meta, 'lists' => $lists, ]), 200, ['Content-Type' => 'application/xml']); @@ -53,7 +53,7 @@ class FeedController extends Controller 'id' => $request->fullUrl(), ]; - return new Response(view('guest.tags.feed', [ + return new Response(view('actions.feed.tags', [ 'meta' => $meta, 'tags' => $tags, ]), 200, ['Content-Type' => 'application/xml']); diff --git a/resources/views/guest/links/feed.blade.php b/resources/views/actions/feed/links.blade.php similarity index 89% rename from resources/views/guest/links/feed.blade.php rename to resources/views/actions/feed/links.blade.php index 0b7e8171..02b91130 100644 --- a/resources/views/guest/links/feed.blade.php +++ b/resources/views/actions/feed/links.blade.php @@ -6,8 +6,9 @@ {{ $meta['id'] }} @foreach($links as $link) - <![CDATA[{{ $link->title }}]]> {{ $link->url }} + <![CDATA[{{ $link->title }}]]> + user->name }}]]> diff --git a/resources/views/guest/lists/feed.blade.php b/resources/views/actions/feed/lists.blade.php similarity index 81% rename from resources/views/guest/lists/feed.blade.php rename to resources/views/actions/feed/lists.blade.php index 2d872167..53e37063 100644 --- a/resources/views/guest/lists/feed.blade.php +++ b/resources/views/actions/feed/lists.blade.php @@ -6,9 +6,9 @@ {{ $meta['id'] }} @foreach($lists as $list) + {{ route('lists.show', ['list' => $list]) }} <![CDATA[{{ $list->name }}]]> - - {{ url($list->id) }} + user->name }}]]> diff --git a/resources/views/guest/tags/feed.blade.php b/resources/views/actions/feed/tags.blade.php similarity index 88% rename from resources/views/guest/tags/feed.blade.php rename to resources/views/actions/feed/tags.blade.php index 5a490a94..4b9d87e4 100644 --- a/resources/views/guest/tags/feed.blade.php +++ b/resources/views/actions/feed/tags.blade.php @@ -6,8 +6,9 @@ {{ $meta['id'] }} @foreach($tags as $tag) - <![CDATA[{{ $tag->name }}]]> {{ route('tags.show', ['tag' => $tag]) }} + <![CDATA[{{ $tag->name }}]]> + user->name }}]]> diff --git a/routes/web.php b/routes/web.php index 49984202..952ae121 100644 --- a/routes/web.php +++ b/routes/web.php @@ -3,6 +3,7 @@ use App\Http\Controllers\App\BookmarkletController; use App\Http\Controllers\App\DashboardController; use App\Http\Controllers\App\ExportController; +use App\Http\Controllers\App\FeedController; use App\Http\Controllers\App\ImportController; use App\Http\Controllers\App\SearchController; use App\Http\Controllers\App\SystemSettingsController; @@ -11,7 +12,7 @@ use App\Http\Controllers\App\UserSettingsController; use App\Http\Controllers\CronController; use App\Http\Controllers\FetchController; use App\Http\Controllers\FrontController; -use App\Http\Controllers\Guest\FeedController; +use App\Http\Controllers\Guest\FeedController as GuestFeedController; use App\Http\Controllers\Guest\LinkController as GuestLinkController; use App\Http\Controllers\Guest\ListController as GuestListController; use App\Http\Controllers\Guest\TagController as GuestTagController; @@ -54,6 +55,12 @@ Route::prefix('bookmarklet')->group(function () { Route::get('cron/{token}', CronController::class)->name('cron'); +Route::group(['middleware' => 'auth:api'], function () { + Route::get('links/feed', [FeedController::class, 'links'])->name('links.feed'); + Route::get('lists/feed', [FeedController::class, 'lists'])->name('lists.feed'); + Route::get('tags/feed', [FeedController::class, 'tags'])->name('tags.feed'); +}); + // Model routes Route::group(['middleware' => ['auth']], function () { Route::get('dashboard', [DashboardController::class, 'index']) @@ -130,9 +137,9 @@ Route::group(['middleware' => ['auth']], function () { // Guest access routes Route::prefix('guest')->middleware(['guestaccess'])->group(function () { - Route::get('links/feed', [FeedController::class, 'links'])->name('guest.links.feed'); - Route::get('lists/feed', [FeedController::class, 'lists'])->name('guest.lists.feed'); - Route::get('tags/feed', [FeedController::class, 'tags'])->name('guest.tags.feed'); + Route::get('links/feed', [GuestFeedController::class, 'links'])->name('guest.links.feed'); + Route::get('lists/feed', [GuestFeedController::class, 'lists'])->name('guest.lists.feed'); + Route::get('tags/feed', [GuestFeedController::class, 'tags'])->name('guest.tags.feed'); Route::resource('links', GuestLinkController::class) ->only(['index']) diff --git a/tests/Controller/App/FeedControllerTest.php b/tests/Controller/App/FeedControllerTest.php new file mode 100644 index 00000000..867b69bc --- /dev/null +++ b/tests/Controller/App/FeedControllerTest.php @@ -0,0 +1,75 @@ +user = User::factory()->create(); + } + + public function testUnauthorizedRequest(): void + { + $response = $this->get('links/feed'); + + $response->assertRedirect('login'); + } + + public function testLinksFeed(): void + { + $link = Link::factory()->create(); + + $response = $this->getAuthorized('links/feed'); + + $response->assertOk() + ->assertSee($link->url); + } + + public function testListsFeed(): void + { + $list = LinkList::factory()->create(); + + $response = $this->getAuthorized('lists/feed'); + + $response->assertOk() + ->assertSee($list->name); + } + + public function testTagsFeed(): void + { + $tag = Tag::factory()->create(); + + $response = $this->getAuthorized('tags/feed'); + + $response->assertOk() + ->assertSee($tag->name); + } + + /** + * Send an authorized request for the GET method. + * + * @param string $uri + * @param array $headers + * @return TestResponse + */ + public function getAuthorized(string $uri, array $headers = []): TestResponse + { + $headers['Authorization'] = 'Bearer ' . $this->user->api_token; + return $this->get($uri, $headers); + } +}