Pony.fm/routes/web.php
2021-02-14 19:59:07 +00:00

274 lines
15 KiB
PHP

<?php
use App\Http\Controllers\AccountController;
use App\Http\Controllers\AdminController;
use App\Http\Controllers\AlbumsController;
use App\Http\Controllers\Api\Mobile;
use App\Http\Controllers\Api\V1;
use App\Http\Controllers\Api\Web;
use App\Http\Controllers\ArtistsController;
use App\Http\Controllers\AuthController;
use App\Http\Controllers\ContentController;
use App\Http\Controllers\HomeController;
use App\Http\Controllers\ImagesController;
use App\Http\Controllers\NotificationsController;
use App\Http\Controllers\PlaylistsController;
use App\Http\Controllers\StatsController;
use App\Http\Controllers\TracksController;
use App\Http\Controllers\UploaderController;
use Illuminate\Support\Facades\Route;
/**
* Pony.fm - A community for pony fan music.
* Copyright (C) 2015-2017 Feld0.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the controller to call when that URI is requested.
|
*/
Route::get('/dashboard', [TracksController::class, 'getIndex']);
Route::get('/tracks', [TracksController::class, 'getIndex'])->name('tracks.discover');
Route::get('/tracks/popular', [TracksController::class, 'getIndex']);
Route::get('/tracks/random', [TracksController::class, 'getIndex']);
Route::get('tracks/{id}-{slug}', [TracksController::class, 'getTrack']);
Route::get('tracks/{id}-{slug}/edit', [TracksController::class, 'getEdit']);
Route::get('tracks/{id}-{slug}/stats', [StatsController::class, 'getIndex']);
Route::get('t{id}', [TracksController::class, 'getShortlink'])->where('id', '\d+');
Route::get('t{id}/embed', [TracksController::class, 'getEmbed']);
Route::get('t{id}/stream.{extension}', [TracksController::class, 'getStream']);
Route::get('t{id}/dl.{extension}', [TracksController::class, 'getDownload']);
Route::get('albums', [AlbumsController::class, 'getIndex']);
Route::get('albums/{id}-{slug}', [AlbumsController::class, 'getShow']);
Route::get('a{id}', [AlbumsController::class, 'getShortlink'])->where('id', '\d+');
Route::get('a{id}/dl.{extension}', [AlbumsController::class, 'getDownload']);
Route::get('artists', [ArtistsController::class, 'getIndex']);
Route::get('playlists', [PlaylistsController::class, 'getIndex']);
Route::get('/register', [AccountController::class, 'getRegister']);
Route::get('/login', [AuthController::class, 'getLogin']);
Route::post('/auth/logout', [AuthController::class, 'postLogout']);
Route::get('/auth/oauth', [AuthController::class, 'getOAuth']);
Route::post('/auth/poniverse-sync', [AuthController::class, 'postPoniverseAccountSync'])->middleware('throttle:60,1');
Route::get('/about', function () {
return View::make('pages.about');
});
Route::get('/faq', function () {
return View::make('pages.faq');
});
Route::get('/mlpforums-advertising-program', function () {
return View::make('pages.mlpforums-advertising-program');
});
Route::get('/hwc2016-rules', function () {
return View::make('pages.hwc-terms');
});
Route::get('i{id}/{type}.{extension}', [ImagesController::class, 'getImage'])->where('id', '\d+');
Route::get('playlist/{id}-{slug}', [PlaylistsController::class, 'getPlaylist']);
Route::get('p{id}', [PlaylistsController::class, 'getShortlink'])->where('id', '\d+');
Route::get('p{id}/dl.{extension}', [PlaylistsController::class, 'getDownload']);
Route::get('notifications', [AccountController::class, 'getNotifications']);
Route::prefix('notifications/email')->group(function () {
Route::get('/unsubscribe/{subscriptionKey}', [NotificationsController::class, 'getEmailUnsubscribe'])->name('email:unsubscribe');
Route::get('/unsubscribed', [NotificationsController::class, 'getEmailUnsubscribePage'])->name('email:confirm-unsubscribed');
Route::get('/click/{emailKey}', [NotificationsController::class, 'getEmailClick'])->name('email:click');
});
Route::get('oembed', [TracksController::class, 'getOembed']);
Route::prefix('api/v1')->middleware('json-exceptions')->group(function () {
Route::get('/tracks/radio-details/{hash}', [V1\TracksController::class, 'getTrackRadioDetails']);
Route::post('/tracks/radio-details/{hash}', [V1\TracksController::class, 'getTrackRadioDetails']);
Route::get('/tracks/{id}', [V1\TracksController::class, 'getTrackDetails'])->where('id', '\d+');
Route::middleware('auth.oauth:ponyfm:tracks:upload')->group(function () {
Route::post('tracks', [V1\TracksController::class, 'postUploadTrack']);
Route::get('/tracks/{id}/upload-status', [V1\TracksController::class, 'getUploadStatus']);
});
});
Route::prefix('api/web')->middleware('cors')->group(function () {
Route::post('/alexa', [Web\AlexaController::class, 'handle']);
Route::get('/taxonomies/all', [Web\TaxonomiesController::class, 'getAll']);
Route::get('/search', [Web\SearchController::class, 'getSearch']);
Route::get('/tracks', [Web\TracksController::class, 'getIndex']);
Route::get('/tracks/{id}', [Web\TracksController::class, 'getShow'])->where('id', '\d+');
Route::get('/tracks/cached/{id}/{format}', [Web\TracksController::class, 'getCachedTrack'])->where(['id' => '\d+', 'format' => '.+']);
Route::get('/tracks/{id}/stats', [Web\StatsController::class, 'getTrackStats'])->where('id', '\d+');
Route::get('/albums', [Web\AlbumsController::class, 'getIndex']);
Route::get('/albums/{id}', [Web\AlbumsController::class, 'getShow'])->where('id', '\d+');
Route::get('/albums/cached/{id}/{format}', [Web\AlbumsController::class, 'getCachedAlbum'])->where(['id' => '\d+', 'format' => '.+']);
Route::get('/playlists', [Web\PlaylistsController::class, 'getIndex']);
Route::get('/playlists/show/{id}', [Web\PlaylistsController::class, 'getShow']);
Route::get('/playlists/{id}', [Web\PlaylistsController::class, 'getShow'])->where('id', '\d+');
Route::get('/playlists/cached/{id}/{format}', [Web\PlaylistsController::class, 'getCachedPlaylist'])->where(['id' => '\d+', 'format' => '.+']);
Route::get('/comments/{type}/{id}', [Web\CommentsController::class, 'getIndex'])->where('id', '\d+');
Route::get('/artists', [Web\ArtistsController::class, 'getIndex']);
Route::post('/artists', [Web\ArtistsController::class, 'postIndex']);
Route::get('/artists/{slug}', [Web\ArtistsController::class, 'getShow']);
Route::get('/artists/{slug}/content', [Web\ArtistsController::class, 'getContent']);
Route::get('/artists/{slug}/favourites', [Web\ArtistsController::class, 'getFavourites']);
Route::get('/dashboard', [Web\DashboardController::class, 'getIndex']);
Route::get('/announcements', [Web\AnnouncementsController::class, 'getIndex']);
Route::middleware('auth')->group(function () {
Route::post('/tracks/upload', [Web\TracksController::class, 'postUpload']);
Route::get('/tracks/{id}/upload-status', [Web\TracksController::class, 'getUploadStatus']);
Route::post('/tracks/delete/{id}', [Web\TracksController::class, 'postDelete']);
Route::post('/tracks/edit/{id}', [Web\TracksController::class, 'postEdit']);
Route::post('/tracks/{id}/version-upload', [Web\TracksController::class, 'postUploadNewVersion']);
Route::get('/tracks/{id}/version-change/{version}', [Web\TracksController::class, 'getChangeVersion']);
Route::get('/tracks/{id}/version-upload-status', [Web\TracksController::class, 'getVersionUploadStatus']);
Route::get('/tracks/{id}/versions', [Web\TracksController::class, 'getVersionList']);
Route::post('/albums/create', [Web\AlbumsController::class, 'postCreate']);
Route::post('/albums/delete/{id}', [Web\AlbumsController::class, 'postDelete']);
Route::post('/albums/edit/{id}', [Web\AlbumsController::class, 'postEdit']);
Route::post('/playlists/create', [Web\PlaylistsController::class, 'postCreate']);
Route::post('/playlists/delete/{id}', [Web\PlaylistsController::class, 'postDelete']);
Route::post('/playlists/edit/{id}', [Web\PlaylistsController::class, 'postEdit']);
Route::post('/playlists/{id}/add-track', [Web\PlaylistsController::class, 'postAddTrack']);
Route::post('/playlists/{id}/remove-track', [Web\PlaylistsController::class, 'postRemoveTrack']);
Route::post('/comments/{type}/{id}', [Web\CommentsController::class, 'postCreate'])->where('id', '\d+');
Route::post('/account/settings/save/{userSlug}', [Web\AccountController::class, 'postSave']);
Route::post('/favourites/toggle', [Web\FavouritesController::class, 'postToggle']);
Route::post('/follow/toggle', [Web\FollowController::class, 'postToggle']);
Route::post('/dashboard/read-news', [Web\DashboardController::class, 'postReadNews']);
Route::get('/account/settings/{slug}', [Web\AccountController::class, 'getSettings']);
Route::get('/notifications', [Web\NotificationsController::class, 'getNotifications']);
Route::put('/notifications/mark-as-read', [Web\NotificationsController::class, 'putMarkAsRead']);
Route::post('/notifications/subscribe', [Web\NotificationsController::class, 'postSubscribe']);
Route::post('/notifications/unsubscribe', [Web\NotificationsController::class, 'postUnsubscribe']);
Route::get('/tracks/edit/{id}', [Web\TracksController::class, 'getEdit']);
Route::get('/users/{userId}', [Web\AccountController::class, 'getUser'])->where('userId', '\d+');
Route::get('/users/{userId}/tracks', [Web\TracksController::class, 'getOwned'])->where('userId', '\d+');
Route::get('/users/{userSlug}/tracks', [Web\TracksController::class, 'getOwned']);
Route::get('/users/{userId}/albums', [Web\AlbumsController::class, 'getOwned'])->where('userId', '\d+');
Route::get('/users/{userSlug}/albums', [Web\AlbumsController::class, 'getOwned']);
Route::get('/users/{userId}/images', [Web\ImagesController::class, 'getOwned'])->where('userId', '\d+');
Route::get('/users/{userSlug}/images', [Web\ImagesController::class, 'getOwned']);
Route::get('/users/{userId}/playlists', [Web\PlaylistsController::class, 'getOwned'])->where('userId', '\d+');
Route::get('/users/{userSlug}/playlists', [Web\PlaylistsController::class, 'getOwned']);
Route::get('/albums/edit/{id}', [Web\AlbumsController::class, 'getEdit']);
Route::get('/playlists/pinned', [Web\PlaylistsController::class, 'getPinned']);
Route::get('/favourites/tracks', [Web\FavouritesController::class, 'getTracks']);
Route::get('/favourites/albums', [Web\FavouritesController::class, 'getAlbums']);
Route::get('/favourites/playlists', [Web\FavouritesController::class, 'getPlaylists']);
});
Route::prefix('admin')->middleware(['auth', 'can:access-admin-area'])->group(function () {
Route::get('/genres', [Web\GenresController::class, 'getIndex']);
Route::post('/genres', [Web\GenresController::class, 'postCreate']);
Route::put('/genres/{id}', [Web\GenresController::class, 'putRename'])->where('id', '\d+');
Route::delete('/genres/{id}', [Web\GenresController::class, 'deleteGenre'])->where('id', '\d+');
Route::get('/showsongs', [Web\ShowSongsController::class, 'getIndex']);
Route::post('/showsongs', [Web\ShowSongsController::class, 'postCreate']);
Route::put('/showsongs/{id}', [Web\ShowSongsController::class, 'putRename'])->where('id', '\d+');
Route::delete('/showsongs/{id}', [Web\ShowSongsController::class, 'deleteSong'])->where('id', '\d+');
Route::get('/tracks', [Web\TracksController::class, 'getAllTracks']);
Route::get('/tracks/unclassified', [Web\TracksController::class, 'getClassifierQueue']);
Route::get('/announcements', [Web\AnnouncementsController::class, 'getAdminIndex']);
Route::get('/announcements/{id}', [Web\AnnouncementsController::class, 'getItemById'])->where('id', '\d+');
Route::post('/announcements', [Web\AnnouncementsController::class, 'postCreate']);
Route::put('/announcements/{id}', [Web\AnnouncementsController::class, 'putUpdate'])->where('id', '\d+');
Route::delete('/announcements/{id}', [Web\AnnouncementsController::class, 'deleteItem'])->where('id', '\d+');
});
Route::get('/auth/current', [Web\AccountController::class, 'getCurrentUser']);
Route::post('/auth/logout', [Web\AuthController::class, 'postLogout']);
});
Route::prefix('admin')->middleware(['auth', 'can:access-admin-area'])->group(function () {
Route::get('/genres', [AdminController::class, 'getGenres']);
Route::get('/tracks', [AdminController::class, 'getTracks']);
Route::get('/tracks/unclassified', [AdminController::class, 'getClassifierQueue']);
Route::get('/show-songs', [AdminController::class, 'getShowSongs']);
Route::get('/users', [AdminController::class, 'getUsers']);
Route::get('/announcements', [AdminController::class, 'getAnnouncements']);
Route::get('/', [AdminController::class, 'getIndex']);
});
Route::get('u{id}', [ArtistsController::class, 'getShortlink'])->where('id', '\d+');
Route::get('users/{id}-{slug}', [ArtistsController::class, 'getShortlink'])->where('id', '\d+');
Route::prefix('{slug}')->group(function () {
Route::get('/', [ArtistsController::class, 'getProfile']);
Route::get('/content', [ArtistsController::class, 'getContent']);
Route::get('/favourites', [ArtistsController::class, 'getFavourites']);
Route::prefix('account')->middleware('auth')->group(function () {
Route::get('/tracks', [ContentController::class, 'getTracks']);
Route::get('/tracks/edit/{id}', [ContentController::class, 'getTracks']);
Route::get('/albums', [ContentController::class, 'getAlbums']);
Route::get('/albums/edit/{id}', [ContentController::class, 'getAlbums']);
Route::get('/albums/create', [ContentController::class, 'getAlbums']);
Route::get('/playlists', [ContentController::class, 'getPlaylists']);
Route::get('/uploader', [UploaderController::class, 'getIndex']);
Route::get('/', [AccountController::class, 'getIndex'])->name('account:settings');
});
});
Route::get('/', [HomeController::class, 'getIndex']);
Route::domain('api.pony.fm')->group(function () {
Route::get('tracks/latest', [Mobile\TracksController::class, 'latest']);
Route::get('tracks/popular', [Mobile\TracksController::class, 'popular']);
});