mirror of
https://github.com/pixelfed/pixelfed.git
synced 2024-11-22 06:21:27 +00:00
Merge branch 'staging' of github.com:pixelfed/pixelfed into jippi-fork
This commit is contained in:
commit
d4198b3262
22 changed files with 969 additions and 678 deletions
13
CHANGELOG.md
13
CHANGELOG.md
|
@ -1,12 +1,21 @@
|
|||
# Release Notes
|
||||
|
||||
## [Unreleased](https://github.com/pixelfed/pixelfed/compare/v0.11.11...dev)
|
||||
## [Unreleased](https://github.com/pixelfed/pixelfed/compare/v0.11.12...dev)
|
||||
- ([](https://github.com/pixelfed/pixelfed/commit/))
|
||||
|
||||
## [v0.11.12 (2024-02-16)](https://github.com/pixelfed/pixelfed/compare/v0.11.11...v0.11.12)
|
||||
|
||||
### Features
|
||||
- Autospam Live Filters - block remote activities based on comma separated keywords ([40b45b2a](https://github.com/pixelfed/pixelfed/commit/40b45b2a))
|
||||
- Added Software Update banner to admin home feeds ([b0fb1988](https://github.com/pixelfed/pixelfed/commit/b0fb1988))
|
||||
|
||||
### Updated
|
||||
|
||||
- Update ApiV1Controller, fix network timeline ([0faf59e3](https://github.com/pixelfed/pixelfed/commit/0faf59e3))
|
||||
- Update public/network timelines, fix non-redis response and fix reblogs in home feed ([8b4ac5cc](https://github.com/pixelfed/pixelfed/commit/8b4ac5cc))
|
||||
- ([](https://github.com/pixelfed/pixelfed/commit/))
|
||||
- Update Federation, use proper Content-Type headers for following/follower collections ([fb0bb9a3](https://github.com/pixelfed/pixelfed/commit/fb0bb9a3))
|
||||
- Update ActivityPubFetchService, enforce stricter Content-Type validation ([1232cfc8](https://github.com/pixelfed/pixelfed/commit/1232cfc8))
|
||||
- Update status view, fix unlisted/private scope bug ([0f3ca194](https://github.com/pixelfed/pixelfed/commit/0f3ca194))
|
||||
|
||||
## [v0.11.11 (2024-02-09)](https://github.com/pixelfed/pixelfed/compare/v0.11.10...v0.11.11)
|
||||
|
||||
|
|
|
@ -253,7 +253,7 @@ class FederationController extends Controller
|
|||
'type' => 'OrderedCollection',
|
||||
'totalItems' => $account['following_count'] ?? 0,
|
||||
];
|
||||
return response()->json($obj);
|
||||
return response()->json($obj)->header('Content-Type', 'application/activity+json');
|
||||
}
|
||||
|
||||
public function userFollowers(Request $request, $username)
|
||||
|
@ -269,6 +269,6 @@ class FederationController extends Controller
|
|||
'type' => 'OrderedCollection',
|
||||
'totalItems' => $account['followers_count'] ?? 0,
|
||||
];
|
||||
return response()->json($obj);
|
||||
return response()->json($obj)->header('Content-Type', 'application/activity+json');
|
||||
}
|
||||
}
|
||||
|
|
21
app/Http/Controllers/SoftwareUpdateController.php
Normal file
21
app/Http/Controllers/SoftwareUpdateController.php
Normal file
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Services\Internal\SoftwareUpdateService;
|
||||
|
||||
class SoftwareUpdateController extends Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('auth');
|
||||
$this->middleware('admin');
|
||||
}
|
||||
|
||||
public function getSoftwareUpdateCheck(Request $request)
|
||||
{
|
||||
$res = SoftwareUpdateService::get();
|
||||
return $res;
|
||||
}
|
||||
}
|
|
@ -23,8 +23,6 @@ class RouteServiceProvider extends ServiceProvider
|
|||
*/
|
||||
public function boot()
|
||||
{
|
||||
//
|
||||
|
||||
parent::boot();
|
||||
}
|
||||
|
||||
|
@ -36,10 +34,7 @@ class RouteServiceProvider extends ServiceProvider
|
|||
public function map()
|
||||
{
|
||||
$this->mapApiRoutes();
|
||||
|
||||
$this->mapWebRoutes();
|
||||
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -51,6 +46,18 @@ class RouteServiceProvider extends ServiceProvider
|
|||
*/
|
||||
protected function mapWebRoutes()
|
||||
{
|
||||
Route::middleware('web')
|
||||
->namespace($this->namespace)
|
||||
->group(base_path('routes/web-admin.php'));
|
||||
|
||||
Route::middleware('web')
|
||||
->namespace($this->namespace)
|
||||
->group(base_path('routes/web-portfolio.php'));
|
||||
|
||||
Route::middleware('web')
|
||||
->namespace($this->namespace)
|
||||
->group(base_path('routes/web-api.php'));
|
||||
|
||||
Route::middleware('web')
|
||||
->namespace($this->namespace)
|
||||
->group(base_path('routes/web.php'));
|
||||
|
|
|
@ -28,7 +28,8 @@ class ActivityPubFetchService
|
|||
$headers['User-Agent'] = 'PixelFedBot/1.0.0 (Pixelfed/'.config('pixelfed.version').'; +'.config('app.url').')';
|
||||
|
||||
try {
|
||||
$res = Http::withOptions(['allow_redirects' => false])->withHeaders($headers)
|
||||
$res = Http::withOptions(['allow_redirects' => false])
|
||||
->withHeaders($headers)
|
||||
->timeout(30)
|
||||
->connectTimeout(5)
|
||||
->retry(3, 500)
|
||||
|
@ -40,9 +41,31 @@ class ActivityPubFetchService
|
|||
} catch (Exception $e) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(!$res->ok()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(!$res->hasHeader('Content-Type')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$acceptedTypes = [
|
||||
'application/activity+json; charset=utf-8',
|
||||
'application/activity+json',
|
||||
'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'
|
||||
];
|
||||
|
||||
$contentType = $res->getHeader('Content-Type')[0];
|
||||
|
||||
if(!$contentType) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(!in_array($contentType, $acceptedTypes)) {
|
||||
return;
|
||||
}
|
||||
|
||||
return $res->body();
|
||||
}
|
||||
}
|
||||
|
|
68
app/Services/Internal/SoftwareUpdateService.php
Normal file
68
app/Services/Internal/SoftwareUpdateService.php
Normal file
|
@ -0,0 +1,68 @@
|
|||
<?php
|
||||
|
||||
namespace App\Services\Internal;
|
||||
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Illuminate\Http\Client\ConnectionException;
|
||||
use Illuminate\Http\Client\RequestException;
|
||||
|
||||
class SoftwareUpdateService
|
||||
{
|
||||
const CACHE_KEY = 'pf:services:software-update:';
|
||||
|
||||
public static function get()
|
||||
{
|
||||
$curVersion = config('pixelfed.version');
|
||||
|
||||
$versions = Cache::remember(self::CACHE_KEY . 'latest:v1.0.0', 1800, function() {
|
||||
return self::fetchLatest();
|
||||
});
|
||||
|
||||
if(!$versions || !isset($versions['latest'], $versions['latest']['version'])) {
|
||||
$hideWarning = (bool) config('instance.software-update.disable_failed_warning');
|
||||
return [
|
||||
'current' => $curVersion,
|
||||
'latest' => [
|
||||
'version' => null,
|
||||
'published_at' => null,
|
||||
'url' => null,
|
||||
],
|
||||
'running_latest' => $hideWarning ? true : null
|
||||
];
|
||||
}
|
||||
|
||||
return [
|
||||
'current' => $curVersion,
|
||||
'latest' => [
|
||||
'version' => $versions['latest']['version'],
|
||||
'published_at' => $versions['latest']['published_at'],
|
||||
'url' => $versions['latest']['url'],
|
||||
],
|
||||
'running_latest' => strval($versions['latest']['version']) === strval($curVersion)
|
||||
];
|
||||
}
|
||||
|
||||
public static function fetchLatest()
|
||||
{
|
||||
try {
|
||||
$res = Http::withOptions(['allow_redirects' => false])
|
||||
->timeout(5)
|
||||
->connectTimeout(5)
|
||||
->retry(2, 500)
|
||||
->get('https://versions.pixelfed.org/versions.json');
|
||||
} catch (RequestException $e) {
|
||||
return;
|
||||
} catch (ConnectionException $e) {
|
||||
return;
|
||||
} catch (Exception $e) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(!$res->ok()) {
|
||||
return;
|
||||
}
|
||||
|
||||
return $res->json();
|
||||
}
|
||||
}
|
|
@ -315,6 +315,23 @@ class Helpers {
|
|||
return;
|
||||
}
|
||||
|
||||
if(config('autospam.live_filters.enabled')) {
|
||||
$filters = config('autospam.live_filters.filters');
|
||||
if(!empty($filters) && isset($res['content']) && !empty($res['content']) && strlen($filters) > 3) {
|
||||
$filters = array_map('trim', explode(',', $filters));
|
||||
$content = $res['content'];
|
||||
foreach($filters as $filter) {
|
||||
$filter = trim(strtolower($filter));
|
||||
if(!$filter || !strlen($filter)) {
|
||||
continue;
|
||||
}
|
||||
if(str_contains(strtolower($content), $filter)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(isset($res['object'])) {
|
||||
$activity = $res;
|
||||
} else {
|
||||
|
@ -372,6 +389,10 @@ class Helpers {
|
|||
$idDomain = parse_url($id, PHP_URL_HOST);
|
||||
$urlDomain = parse_url($url, PHP_URL_HOST);
|
||||
|
||||
if($idDomain && $urlDomain && strtolower($idDomain) !== strtolower($urlDomain)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(!self::validateUrl($id)) {
|
||||
return;
|
||||
}
|
||||
|
@ -455,14 +476,21 @@ class Helpers {
|
|||
|
||||
public static function storeStatus($url, $profile, $activity)
|
||||
{
|
||||
$originalUrl = $url;
|
||||
$id = isset($activity['id']) ? self::pluckval($activity['id']) : self::pluckval($activity['url']);
|
||||
$url = isset($activity['url']) && is_string($activity['url']) ? self::pluckval($activity['url']) : self::pluckval($id);
|
||||
$idDomain = parse_url($id, PHP_URL_HOST);
|
||||
$urlDomain = parse_url($url, PHP_URL_HOST);
|
||||
$originalUrlDomain = parse_url($originalUrl, PHP_URL_HOST);
|
||||
if(!self::validateUrl($id) || !self::validateUrl($url)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if( strtolower($originalUrlDomain) !== strtolower($idDomain) ||
|
||||
strtolower($originalUrlDomain) !== strtolower($urlDomain) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$reply_to = self::getReplyTo($activity);
|
||||
|
||||
$ts = self::pluckval($activity['published']);
|
||||
|
@ -763,7 +791,11 @@ class Helpers {
|
|||
if(!$res || isset($res['id']) == false) {
|
||||
return;
|
||||
}
|
||||
$urlDomain = parse_url($url, PHP_URL_HOST);
|
||||
$domain = parse_url($res['id'], PHP_URL_HOST);
|
||||
if(strtolower($urlDomain) !== strtolower($domain)) {
|
||||
return;
|
||||
}
|
||||
if(!isset($res['preferredUsername']) && !isset($res['nickname'])) {
|
||||
return;
|
||||
}
|
||||
|
@ -831,6 +863,9 @@ class Helpers {
|
|||
|
||||
public static function sendSignedObject($profile, $url, $body)
|
||||
{
|
||||
if(app()->environment() !== 'production') {
|
||||
return;
|
||||
}
|
||||
ActivityPubDeliveryService::queue()
|
||||
->from($profile)
|
||||
->to($url)
|
||||
|
|
|
@ -197,6 +197,22 @@ class Inbox
|
|||
public function handleCreateActivity()
|
||||
{
|
||||
$activity = $this->payload['object'];
|
||||
if(config('autospam.live_filters.enabled')) {
|
||||
$filters = config('autospam.live_filters.filters');
|
||||
if(!empty($filters) && isset($activity['content']) && !empty($activity['content']) && strlen($filters) > 3) {
|
||||
$filters = array_map('trim', explode(',', $filters));
|
||||
$content = $activity['content'];
|
||||
foreach($filters as $filter) {
|
||||
$filter = trim(strtolower($filter));
|
||||
if(!$filter || !strlen($filter)) {
|
||||
continue;
|
||||
}
|
||||
if(str_contains(strtolower($content), $filter)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$actor = $this->actorFirstOrCreate($this->payload['actor']);
|
||||
if(!$actor || $actor->domain == null) {
|
||||
return;
|
||||
|
|
|
@ -33,5 +33,10 @@ return [
|
|||
'nlp' => [
|
||||
'enabled' => false,
|
||||
'spam_sample_limit' => env('PF_AUTOSPAM_NLP_SPAM_SAMPLE_LIMIT', 200),
|
||||
],
|
||||
|
||||
'live_filters' => [
|
||||
'enabled' => env('PF_AUTOSPAM_LIVE_FILTERS_ENABLED', false),
|
||||
'filters' => env('PF_AUTOSPAM_LIVE_FILTERS_CSV', ''),
|
||||
]
|
||||
];
|
||||
|
|
|
@ -140,5 +140,9 @@ return [
|
|||
'max_children' => env('INSTANCE_PARENTAL_CONTROLS_MAX_CHILDREN', 1),
|
||||
'auto_verify_email' => true,
|
||||
],
|
||||
]
|
||||
],
|
||||
|
||||
'software-update' => [
|
||||
'disable_failed_warning' => env('INSTANCE_SOFTWARE_UPDATE_DISABLE_FAILED_WARNING', false)
|
||||
],
|
||||
];
|
||||
|
|
|
@ -23,7 +23,7 @@ return [
|
|||
| This value is the version of your Pixelfed instance.
|
||||
|
|
||||
*/
|
||||
'version' => '0.11.11',
|
||||
'version' => '0.11.12',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
BIN
public/js/home.chunk.88eeebf6c53d4dca.js
vendored
Normal file
BIN
public/js/home.chunk.88eeebf6c53d4dca.js
vendored
Normal file
Binary file not shown.
BIN
public/js/home.chunk.ada2cbf0ec3271bd.js
vendored
BIN
public/js/home.chunk.ada2cbf0ec3271bd.js
vendored
Binary file not shown.
BIN
public/js/manifest.js
vendored
BIN
public/js/manifest.js
vendored
Binary file not shown.
Binary file not shown.
|
@ -9,6 +9,48 @@
|
|||
</div>
|
||||
|
||||
<div class="col-md-8 col-lg-6 px-0">
|
||||
<template v-if="showUpdateWarning && updateInfo && updateInfo.hasOwnProperty('running_latest')">
|
||||
<div class="card rounded-lg mb-4 ft-std" style="background: #e11d48;border: 3px dashed #fff">
|
||||
<div class="card-body">
|
||||
<div class="d-flex justify-content-between align-items-center flex-column flex-lg-row" style="gap:1rem">
|
||||
<div class="d-flex justify-content-between align-items-center" style="gap:1rem">
|
||||
<i class="d-none d-sm-block far fa-exclamation-triangle fa-5x text-white"></i>
|
||||
|
||||
<div>
|
||||
<h1 class="h3 font-weight-bold text-light mb-0">New Update Available</h1>
|
||||
<p class="mb-0 text-white" style="font-size:18px;">Update your Pixelfed server as soon as possible!</p>
|
||||
<p class="mb-n1 text-white small" style="opacity:.7">Once you update, this message will disappear.</p>
|
||||
<p class="mb-0 text-white small d-flex" style="opacity:.5;gap:1rem;">
|
||||
<span>Current version: <strong>{{ updateInfo?.current ?? 'Unknown' }}</strong></span>
|
||||
<span>Latest version: <strong>{{ updateInfo?.latest?.version ?? 'Unknown' }}</strong></span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<a v-if="updateInfo.latest.url" class="btn btn-light font-weight-bold" :href="updateInfo.latest.url" target="_blank">View Update</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<template v-if="showUpdateConnectionWarning">
|
||||
<div class="card rounded-lg mb-4 ft-std" style="background: #e11d48;border: 3px dashed #fff">
|
||||
<div class="card-body">
|
||||
<div class="d-flex justify-content-between align-items-center flex-column flex-lg-row" style="gap:1rem">
|
||||
<div class="d-flex justify-content-between align-items-center" style="gap:1rem">
|
||||
<i class="d-none d-sm-block far fa-exclamation-triangle fa-5x text-white"></i>
|
||||
|
||||
<div>
|
||||
<h1 class="h3 font-weight-bold text-light mb-1">Software Update Check Failed</h1>
|
||||
<p class="mb-1 text-white" style="font-size:18px;line-height: 1.2;">We attempted to check if there is a new version available, however we encountered an error. <a href="https://github.com/pixelfed/pixelfed/releases" class="text-white font-weight-bold" style="text-decoration: underline;" target="_blank">Click here</a> to view the latest releases.</p>
|
||||
<p class="mb-0 text-white small">You can set <code class="text-white">INSTANCE_SOFTWARE_UPDATE_DISABLE_FAILED_WARNING=true</code> to remove this warning.</p>
|
||||
<p class="mb-0 text-white small" style="opacity:.7">Current version: {{ updateInfo?.current ?? 'Unknown' }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<story-carousel
|
||||
v-if="storiesEnabled"
|
||||
:profile="profile" />
|
||||
|
@ -59,7 +101,6 @@
|
|||
"rightbar": Rightbar,
|
||||
"story-carousel": StoryCarousel,
|
||||
},
|
||||
|
||||
data() {
|
||||
return {
|
||||
isLoaded: false,
|
||||
|
@ -67,7 +108,10 @@
|
|||
recommended: [],
|
||||
trending: [],
|
||||
storiesEnabled: false,
|
||||
shouldRefresh: false
|
||||
shouldRefresh: false,
|
||||
showUpdateWarning: false,
|
||||
showUpdateConnectionWarning: false,
|
||||
updateInfo: undefined,
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -84,10 +128,33 @@
|
|||
this.profile = window._sharedData.user;
|
||||
this.isLoaded = true;
|
||||
this.storiesEnabled = window.App?.config?.features?.hasOwnProperty('stories') ? window.App.config.features.stories : false;
|
||||
|
||||
if(this.profile.is_admin) {
|
||||
this.softwareUpdateCheck();
|
||||
}
|
||||
},
|
||||
|
||||
updateProfile(delta) {
|
||||
this.profile = Object.assign(this.profile, delta);
|
||||
},
|
||||
|
||||
softwareUpdateCheck() {
|
||||
axios.get('/api/web-admin/software-update/check')
|
||||
.then(res => {
|
||||
if(!res || !res.data || !res.data.hasOwnProperty('running_latest') || res.data.running_latest) {
|
||||
return;
|
||||
}
|
||||
if(res.data.running_latest === null) {
|
||||
this.updateInfo = res.data;
|
||||
this.showUpdateConnectionWarning = true;
|
||||
return;
|
||||
}
|
||||
this.updateInfo = res.data;
|
||||
this.showUpdateWarning = !res.data.running_latest;
|
||||
})
|
||||
.catch(err => {
|
||||
this.showUpdateConnectionWarning = true;
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
])
|
||||
|
||||
@php
|
||||
$s = \App\Services\StatusService::get($status->id);
|
||||
$s = \App\Services\StatusService::get($status->id, false);
|
||||
$displayName = $s && $s['account'] ? $s['account']['display_name'] : false;
|
||||
$captionPreview = false;
|
||||
$domain = $displayName ? '@' . parse_url($s['account']['url'], PHP_URL_HOST) : '';
|
||||
|
|
166
routes/web-admin.php
Normal file
166
routes/web-admin.php
Normal file
|
@ -0,0 +1,166 @@
|
|||
<?php
|
||||
|
||||
Route::domain(config('pixelfed.domain.admin'))->prefix('i/admin')->group(function () {
|
||||
Route::redirect('/', '/dashboard');
|
||||
Route::redirect('timeline', config('app.url').'/timeline');
|
||||
Route::get('dashboard', 'AdminController@home')->name('admin.home');
|
||||
Route::get('stats', 'AdminController@stats')->name('admin.stats');
|
||||
Route::get('reports', 'AdminController@reports')->name('admin.reports');
|
||||
Route::get('reports/show/{id}', 'AdminController@showReport');
|
||||
Route::post('reports/show/{id}', 'AdminController@updateReport');
|
||||
Route::post('reports/bulk', 'AdminController@bulkUpdateReport');
|
||||
Route::get('reports/autospam/{id}', 'AdminController@showSpam');
|
||||
Route::post('reports/autospam/sync', 'AdminController@fixUncategorizedSpam');
|
||||
Route::post('reports/autospam/{id}', 'AdminController@updateSpam');
|
||||
Route::get('reports/autospam', 'AdminController@spam');
|
||||
Route::get('reports/appeals', 'AdminController@appeals');
|
||||
Route::get('reports/appeal/{id}', 'AdminController@showAppeal');
|
||||
Route::post('reports/appeal/{id}', 'AdminController@updateAppeal');
|
||||
Route::get('reports/email-verifications', 'AdminController@reportMailVerifications');
|
||||
Route::post('reports/email-verifications/ignore', 'AdminController@reportMailVerifyIgnore');
|
||||
Route::post('reports/email-verifications/approve', 'AdminController@reportMailVerifyApprove');
|
||||
Route::post('reports/email-verifications/clear-ignored', 'AdminController@reportMailVerifyClearIgnored');
|
||||
Route::redirect('stories', '/stories/list');
|
||||
Route::get('stories/list', 'AdminController@stories')->name('admin.stories');
|
||||
Route::redirect('statuses', '/statuses/list');
|
||||
Route::get('statuses/list', 'AdminController@statuses')->name('admin.statuses');
|
||||
Route::get('statuses/show/{id}', 'AdminController@showStatus');
|
||||
Route::redirect('profiles', '/i/admin/profiles/list');
|
||||
Route::get('profiles/list', 'AdminController@profiles')->name('admin.profiles');
|
||||
Route::get('profiles/edit/{id}', 'AdminController@profileShow');
|
||||
Route::redirect('users', '/users/list');
|
||||
Route::get('users/list', 'AdminController@users')->name('admin.users');
|
||||
Route::get('users/show/{id}', 'AdminController@userShow');
|
||||
Route::get('users/edit/{id}', 'AdminController@userEdit');
|
||||
Route::post('users/edit/{id}', 'AdminController@userEditSubmit');
|
||||
Route::get('users/activity/{id}', 'AdminController@userActivity');
|
||||
Route::get('users/message/{id}', 'AdminController@userMessage');
|
||||
Route::post('users/message/{id}', 'AdminController@userMessageSend');
|
||||
Route::get('users/modtools/{id}', 'AdminController@userModTools');
|
||||
Route::get('users/modlogs/{id}', 'AdminController@userModLogs');
|
||||
Route::post('users/modlogs/{id}', 'AdminController@userModLogsMessage');
|
||||
Route::post('users/modlogs/{id}/delete', 'AdminController@userModLogDelete');
|
||||
Route::get('users/delete/{id}', 'AdminController@userDelete');
|
||||
Route::post('users/delete/{id}', 'AdminController@userDeleteProcess');
|
||||
Route::post('users/moderation/update', 'AdminController@userModerate');
|
||||
Route::get('media', 'AdminController@media')->name('admin.media');
|
||||
Route::redirect('media/list', '/i/admin/media');
|
||||
Route::get('media/show/{id}', 'AdminController@mediaShow');
|
||||
Route::get('settings', 'AdminController@settings')->name('admin.settings');
|
||||
Route::post('settings', 'AdminController@settingsHomeStore');
|
||||
Route::get('settings/features', 'AdminController@settingsFeatures')->name('admin.settings.features');
|
||||
Route::get('settings/pages', 'AdminController@settingsPages')->name('admin.settings.pages');
|
||||
Route::get('settings/pages/edit', 'PageController@edit')->name('admin.settings.pages.edit');
|
||||
Route::post('settings/pages/edit', 'PageController@store');
|
||||
Route::post('settings/pages/delete', 'PageController@delete');
|
||||
Route::post('settings/pages/create', 'PageController@generatePage');
|
||||
Route::get('settings/maintenance', 'AdminController@settingsMaintenance')->name('admin.settings.maintenance');
|
||||
Route::get('settings/backups', 'AdminController@settingsBackups')->name('admin.settings.backups');
|
||||
Route::get('settings/storage', 'AdminController@settingsStorage')->name('admin.settings.storage');
|
||||
Route::get('settings/system', 'AdminController@settingsSystem')->name('admin.settings.system');
|
||||
|
||||
Route::get('instances', 'AdminController@instances')->name('admin.instances');
|
||||
Route::post('instances', 'AdminController@instanceScan');
|
||||
Route::get('instances/show/{id}', 'AdminController@instanceShow');
|
||||
Route::post('instances/edit/{id}', 'AdminController@instanceEdit');
|
||||
Route::get('apps/home', 'AdminController@appsHome')->name('admin.apps');
|
||||
Route::get('hashtags/home', 'AdminController@hashtagsHome')->name('admin.hashtags');
|
||||
Route::get('discover/home', 'AdminController@discoverHome')->name('admin.discover');
|
||||
Route::get('discover/category/create', 'AdminController@discoverCreateCategory')->name('admin.discover.create-category');
|
||||
Route::post('discover/category/create', 'AdminController@discoverCreateCategoryStore');
|
||||
Route::get('discover/category/edit/{id}', 'AdminController@discoverCategoryEdit');
|
||||
Route::post('discover/category/edit/{id}', 'AdminController@discoverCategoryUpdate');
|
||||
Route::post('discover/category/hashtag/create', 'AdminController@discoveryCategoryTagStore')->name('admin.discover.create-hashtag');
|
||||
|
||||
Route::get('messages/home', 'AdminController@messagesHome')->name('admin.messages');
|
||||
Route::get('messages/show/{id}', 'AdminController@messagesShow');
|
||||
Route::post('messages/mark-read', 'AdminController@messagesMarkRead');
|
||||
Route::redirect('site-news', '/i/admin/newsroom');
|
||||
Route::get('newsroom', 'AdminController@newsroomHome')->name('admin.newsroom.home');
|
||||
Route::get('newsroom/create', 'AdminController@newsroomCreate')->name('admin.newsroom.create');
|
||||
Route::get('newsroom/edit/{id}', 'AdminController@newsroomEdit');
|
||||
Route::post('newsroom/edit/{id}', 'AdminController@newsroomUpdate');
|
||||
Route::delete('newsroom/edit/{id}', 'AdminController@newsroomDelete');
|
||||
Route::post('newsroom/create', 'AdminController@newsroomStore');
|
||||
|
||||
Route::get('diagnostics/home', 'AdminController@diagnosticsHome')->name('admin.diagnostics');
|
||||
Route::post('diagnostics/decrypt', 'AdminController@diagnosticsDecrypt')->name('admin.diagnostics.decrypt');
|
||||
Route::get('custom-emoji/home', 'AdminController@customEmojiHome')->name('admin.custom-emoji');
|
||||
Route::post('custom-emoji/toggle-active/{id}', 'AdminController@customEmojiToggleActive');
|
||||
Route::get('custom-emoji/new', 'AdminController@customEmojiAdd');
|
||||
Route::post('custom-emoji/new', 'AdminController@customEmojiStore');
|
||||
Route::post('custom-emoji/delete/{id}', 'AdminController@customEmojiDelete');
|
||||
Route::get('custom-emoji/duplicates/{id}', 'AdminController@customEmojiShowDuplicates');
|
||||
|
||||
Route::get('directory/home', 'AdminController@directoryHome')->name('admin.directory');
|
||||
|
||||
Route::get('autospam/home', 'AdminController@autospamHome')->name('admin.autospam');
|
||||
|
||||
Route::redirect('asf/', 'asf/home');
|
||||
Route::get('asf/home', 'AdminShadowFilterController@home');
|
||||
Route::get('asf/create', 'AdminShadowFilterController@create');
|
||||
Route::get('asf/edit/{id}', 'AdminShadowFilterController@edit');
|
||||
Route::post('asf/edit/{id}', 'AdminShadowFilterController@storeEdit');
|
||||
Route::post('asf/create', 'AdminShadowFilterController@store');
|
||||
|
||||
Route::get('asf/home', 'AdminShadowFilterController@home');
|
||||
// Route::redirect('curated-onboarding/', 'curated-onboarding/home');
|
||||
// Route::get('curated-onboarding/home', 'AdminCuratedRegisterController@index')->name('admin.curated-onboarding');
|
||||
// Route::get('curated-onboarding/show/{id}/preview-details-message', 'AdminCuratedRegisterController@previewDetailsMessageShow');
|
||||
// Route::get('curated-onboarding/show/{id}/preview-message', 'AdminCuratedRegisterController@previewMessageShow');
|
||||
// Route::get('curated-onboarding/show/{id}', 'AdminCuratedRegisterController@show');
|
||||
|
||||
Route::prefix('api')->group(function() {
|
||||
Route::get('stats', 'AdminController@getStats');
|
||||
Route::get('accounts', 'AdminController@getAccounts');
|
||||
Route::get('posts', 'AdminController@getPosts');
|
||||
Route::get('instances', 'AdminController@getInstances');
|
||||
Route::post('directory/save', 'AdminController@directoryStore');
|
||||
Route::get('directory/initial-data', 'AdminController@directoryInitialData');
|
||||
Route::get('directory/popular-posts', 'AdminController@directoryGetPopularPosts');
|
||||
Route::post('directory/add-by-id', 'AdminController@directoryGetAddPostByIdSearch');
|
||||
Route::delete('directory/banner-image', 'AdminController@directoryDeleteBannerImage');
|
||||
Route::post('directory/submit', 'AdminController@directoryHandleServerSubmission');
|
||||
Route::post('directory/testimonial/save', 'AdminController@directorySaveTestimonial');
|
||||
Route::post('directory/testimonial/delete', 'AdminController@directoryDeleteTestimonial');
|
||||
Route::post('directory/testimonial/update', 'AdminController@directoryUpdateTestimonial');
|
||||
Route::get('hashtags/stats', 'AdminController@hashtagsStats');
|
||||
Route::get('hashtags/query', 'AdminController@hashtagsApi');
|
||||
Route::get('hashtags/get', 'AdminController@hashtagsGet');
|
||||
Route::post('hashtags/update', 'AdminController@hashtagsUpdate');
|
||||
Route::post('hashtags/clear-trending-cache', 'AdminController@hashtagsClearTrendingCache');
|
||||
Route::get('instances/get', 'AdminController@getInstancesApi');
|
||||
Route::get('instances/stats', 'AdminController@getInstancesStatsApi');
|
||||
Route::get('instances/query', 'AdminController@getInstancesQueryApi');
|
||||
Route::post('instances/update', 'AdminController@postInstanceUpdateApi');
|
||||
Route::post('instances/create', 'AdminController@postInstanceCreateNewApi');
|
||||
Route::post('instances/delete', 'AdminController@postInstanceDeleteApi');
|
||||
Route::post('instances/refresh-stats', 'AdminController@postInstanceRefreshStatsApi');
|
||||
Route::get('instances/download-backup', 'AdminController@downloadBackup');
|
||||
Route::post('instances/import-data', 'AdminController@importBackup');
|
||||
Route::get('reports/stats', 'AdminController@reportsStats');
|
||||
Route::get('reports/all', 'AdminController@reportsApiAll');
|
||||
Route::get('reports/get/{id}', 'AdminController@reportsApiGet');
|
||||
Route::post('reports/handle', 'AdminController@reportsApiHandle');
|
||||
Route::get('reports/spam/all', 'AdminController@reportsApiSpamAll');
|
||||
Route::get('reports/spam/get/{id}', 'AdminController@reportsApiSpamGet');
|
||||
Route::post('reports/spam/handle', 'AdminController@reportsApiSpamHandle');
|
||||
Route::post('autospam/config', 'AdminController@getAutospamConfigApi');
|
||||
Route::post('autospam/reports/closed', 'AdminController@getAutospamReportsClosedApi');
|
||||
Route::post('autospam/train', 'AdminController@postAutospamTrainSpamApi');
|
||||
Route::post('autospam/search/non-spam', 'AdminController@postAutospamTrainNonSpamSearchApi');
|
||||
Route::post('autospam/train/non-spam', 'AdminController@postAutospamTrainNonSpamSubmitApi');
|
||||
Route::post('autospam/tokens/custom', 'AdminController@getAutospamCustomTokensApi');
|
||||
Route::post('autospam/tokens/store', 'AdminController@saveNewAutospamCustomTokensApi');
|
||||
Route::post('autospam/tokens/update', 'AdminController@updateAutospamCustomTokensApi');
|
||||
Route::post('autospam/tokens/export', 'AdminController@exportAutospamCustomTokensApi');
|
||||
Route::post('autospam/config/enable', 'AdminController@enableAutospamApi');
|
||||
Route::post('autospam/config/disable', 'AdminController@disableAutospamApi');
|
||||
// Route::get('instances/{id}/accounts', 'AdminController@getInstanceAccounts');
|
||||
// Route::get('curated-onboarding/show/{id}/activity-log', 'AdminCuratedRegisterController@apiActivityLog');
|
||||
// Route::post('curated-onboarding/show/{id}/message/preview', 'AdminCuratedRegisterController@apiMessagePreviewStore');
|
||||
// Route::post('curated-onboarding/show/{id}/message/send', 'AdminCuratedRegisterController@apiMessageSendStore');
|
||||
// Route::post('curated-onboarding/show/{id}/reject', 'AdminCuratedRegisterController@apiHandleReject');
|
||||
// Route::post('curated-onboarding/show/{id}/approve', 'AdminCuratedRegisterController@apiHandleApprove');
|
||||
});
|
||||
});
|
174
routes/web-api.php
Normal file
174
routes/web-api.php
Normal file
|
@ -0,0 +1,174 @@
|
|||
<?php
|
||||
|
||||
use App\Http\Controllers\SoftwareUpdateController;
|
||||
|
||||
Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofactor', 'localization'])->group(function () {
|
||||
Route::group(['prefix' => 'api'], function () {
|
||||
Route::get('search', 'SearchController@searchAPI');
|
||||
Route::post('status/view', 'StatusController@storeView');
|
||||
Route::get('v1/polls/{id}', 'PollController@getPoll');
|
||||
Route::post('v1/polls/{id}/votes', 'PollController@vote');
|
||||
|
||||
Route::group(['prefix' => 'web-admin'], function() {
|
||||
Route::get('software-update/check', [SoftwareUpdateController::class, 'getSoftwareUpdateCheck']);
|
||||
});
|
||||
|
||||
Route::group(['prefix' => 'compose'], function() {
|
||||
Route::group(['prefix' => 'v0'], function() {
|
||||
Route::post('/media/upload', 'ComposeController@mediaUpload');
|
||||
Route::post('/media/update', 'ComposeController@mediaUpdate');
|
||||
Route::delete('/media/delete', 'ComposeController@mediaDelete');
|
||||
Route::get('/search/tag', 'ComposeController@searchTag');
|
||||
Route::get('/search/location', 'ComposeController@searchLocation');
|
||||
Route::get('/search/mention', 'ComposeController@searchMentionAutocomplete');
|
||||
Route::get('/search/hashtag', 'ComposeController@searchHashtagAutocomplete');
|
||||
|
||||
Route::post('/publish', 'ComposeController@store');
|
||||
Route::post('/publish/text', 'ComposeController@storeText');
|
||||
Route::get('/media/processing', 'ComposeController@mediaProcessingCheck');
|
||||
Route::get('/settings', 'ComposeController@composeSettings');
|
||||
Route::post('/poll', 'ComposeController@createPoll');
|
||||
});
|
||||
});
|
||||
|
||||
Route::group(['prefix' => 'direct'], function () {
|
||||
Route::get('browse', 'DirectMessageController@browse');
|
||||
Route::post('create', 'DirectMessageController@create');
|
||||
Route::get('thread', 'DirectMessageController@thread');
|
||||
Route::post('mute', 'DirectMessageController@mute');
|
||||
Route::post('unmute', 'DirectMessageController@unmute');
|
||||
Route::delete('message', 'DirectMessageController@delete');
|
||||
Route::post('media', 'DirectMessageController@mediaUpload');
|
||||
Route::post('lookup', 'DirectMessageController@composeLookup');
|
||||
Route::post('read', 'DirectMessageController@read');
|
||||
});
|
||||
|
||||
Route::group(['prefix' => 'v2'], function() {
|
||||
Route::get('config', 'ApiController@siteConfiguration');
|
||||
Route::get('discover', 'InternalApiController@discover');
|
||||
Route::get('discover/posts', 'InternalApiController@discoverPosts')->middleware('auth:api');
|
||||
Route::get('profile/{username}/status/{postid}', 'PublicApiController@status');
|
||||
Route::get('profile/{username}/status/{postid}/state', 'PublicApiController@statusState');
|
||||
Route::get('comments/{username}/status/{postId}', 'PublicApiController@statusComments');
|
||||
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::get('statuses/{id}/replies', 'Api\ApiV1Controller@statusReplies');
|
||||
Route::get('statuses/{id}/state', 'Api\ApiV1Controller@statusState');
|
||||
});
|
||||
|
||||
Route::group(['prefix' => 'pixelfed'], function() {
|
||||
Route::group(['prefix' => 'v1'], function() {
|
||||
Route::get('accounts/verify_credentials', 'ApiController@verifyCredentials');
|
||||
Route::get('accounts/relationships', 'Api\ApiV1Controller@accountRelationshipsById');
|
||||
Route::get('accounts/search', 'Api\ApiV1Controller@accountSearch');
|
||||
Route::get('accounts/{id}/statuses', 'PublicApiController@accountStatuses');
|
||||
Route::post('accounts/{id}/block', 'Api\ApiV1Controller@accountBlockById');
|
||||
Route::post('accounts/{id}/unblock', 'Api\ApiV1Controller@accountUnblockById');
|
||||
Route::get('statuses/{id}', 'PublicApiController@getStatus');
|
||||
Route::get('accounts/{id}', 'PublicApiController@account');
|
||||
Route::post('avatar/update', 'ApiController@avatarUpdate');
|
||||
Route::get('custom_emojis', 'Api\ApiV1Controller@customEmojis');
|
||||
Route::get('notifications', 'ApiController@notifications');
|
||||
Route::get('timelines/public', 'PublicApiController@publicTimelineApi');
|
||||
Route::get('timelines/home', 'PublicApiController@homeTimelineApi');
|
||||
Route::get('timelines/network', 'PublicApiController@networkTimelineApi');
|
||||
Route::get('newsroom/timeline', 'NewsroomController@timelineApi');
|
||||
Route::post('newsroom/markasread', 'NewsroomController@markAsRead');
|
||||
Route::get('favourites', 'Api\BaseApiController@accountLikes');
|
||||
Route::get('mutes', 'AccountController@accountMutes');
|
||||
Route::get('blocks', 'AccountController@accountBlocks');
|
||||
});
|
||||
|
||||
Route::group(['prefix' => 'v2'], function() {
|
||||
Route::get('config', 'ApiController@siteConfiguration');
|
||||
Route::get('discover', 'InternalApiController@discover');
|
||||
Route::get('discover/posts', 'InternalApiController@discoverPosts');
|
||||
Route::get('discover/profiles', 'DiscoverController@profilesDirectoryApi');
|
||||
Route::get('profile/{username}/status/{postid}', 'PublicApiController@status');
|
||||
Route::get('comments/{username}/status/{postId}', 'PublicApiController@statusComments');
|
||||
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::get('discover/posts/trending', 'DiscoverController@trendingApi');
|
||||
Route::get('discover/posts/hashtags', 'DiscoverController@trendingHashtags');
|
||||
Route::get('discover/posts/places', 'DiscoverController@trendingPlaces');
|
||||
Route::get('seasonal/yir', 'SeasonalController@getData');
|
||||
Route::post('seasonal/yir', 'SeasonalController@store');
|
||||
Route::get('mutes', 'AccountController@accountMutesV2');
|
||||
Route::get('blocks', 'AccountController@accountBlocksV2');
|
||||
Route::get('filters', 'AccountController@accountFiltersV2');
|
||||
Route::post('status/compose', 'InternalApiController@composePost');
|
||||
Route::get('status/{id}/replies', 'InternalApiController@statusReplies');
|
||||
Route::post('status/{id}/archive', 'ApiController@archive');
|
||||
Route::post('status/{id}/unarchive', 'ApiController@unarchive');
|
||||
Route::get('statuses/archives', 'ApiController@archivedPosts');
|
||||
Route::get('discover/memories', 'DiscoverController@myMemories');
|
||||
Route::get('discover/account-insights', 'DiscoverController@accountInsightsPopularPosts');
|
||||
Route::get('discover/server-timeline', 'DiscoverController@serverTimeline');
|
||||
Route::get('discover/meta', 'DiscoverController@enabledFeatures');
|
||||
Route::post('discover/admin/features', 'DiscoverController@updateFeatures');
|
||||
});
|
||||
|
||||
Route::get('discover/accounts/popular', 'Api\ApiV1Controller@discoverAccountsPopular');
|
||||
Route::post('web/change-language.json', 'SpaController@updateLanguage');
|
||||
});
|
||||
|
||||
Route::group(['prefix' => 'local'], function () {
|
||||
// Route::post('status/compose', 'InternalApiController@composePost')->middleware('throttle:maxPostsPerHour,60')->middleware('throttle:maxPostsPerDay,1440');
|
||||
Route::get('exp/rec', 'ApiController@userRecommendations');
|
||||
Route::post('discover/tag/subscribe', 'HashtagFollowController@store');
|
||||
Route::get('discover/tag/list', 'HashtagFollowController@getTags');
|
||||
// Route::get('profile/sponsor/{id}', 'ProfileSponsorController@get');
|
||||
Route::get('bookmarks', 'InternalApiController@bookmarks');
|
||||
Route::get('collection/items/{id}', 'CollectionController@getItems');
|
||||
Route::post('collection/item', 'CollectionController@storeId');
|
||||
Route::delete('collection/item', 'CollectionController@deleteId');
|
||||
Route::get('collection/{id}', 'CollectionController@getCollection');
|
||||
Route::post('collection/{id}', 'CollectionController@store');
|
||||
Route::delete('collection/{id}', 'CollectionController@delete');
|
||||
Route::post('collection/{id}/publish', 'CollectionController@publish');
|
||||
Route::get('profile/collections/{id}', 'CollectionController@getUserCollections');
|
||||
|
||||
Route::post('compose/tag/untagme', 'MediaTagController@untagProfile');
|
||||
|
||||
Route::post('import/ig', 'ImportPostController@store');
|
||||
Route::get('import/ig/config', 'ImportPostController@getConfig');
|
||||
Route::post('import/ig/media', 'ImportPostController@storeMedia');
|
||||
Route::post('import/ig/existing', 'ImportPostController@getImportedFiles');
|
||||
Route::post('import/ig/posts', 'ImportPostController@getImportedPosts');
|
||||
Route::post('import/ig/processing', 'ImportPostController@getProcessingCount');
|
||||
});
|
||||
|
||||
Route::group(['prefix' => 'web/stories'], function () {
|
||||
Route::get('v1/recent', 'StoryController@recent');
|
||||
Route::get('v1/viewers', 'StoryController@viewers');
|
||||
Route::get('v1/profile/{id}', 'StoryController@profile');
|
||||
Route::get('v1/exists/{id}', 'StoryController@exists');
|
||||
Route::get('v1/poll/results', 'StoryController@pollResults');
|
||||
Route::post('v1/viewed', 'StoryController@viewed');
|
||||
Route::post('v1/react', 'StoryController@react');
|
||||
Route::post('v1/comment', 'StoryController@comment');
|
||||
Route::post('v1/publish/poll', 'StoryController@publishStoryPoll');
|
||||
Route::post('v1/poll/vote', 'StoryController@storyPollVote');
|
||||
Route::post('v1/report', 'StoryController@storeReport');
|
||||
Route::post('v1/add', 'StoryController@apiV1Add');
|
||||
Route::post('v1/crop', 'StoryController@cropPhoto');
|
||||
Route::post('v1/publish', 'StoryController@publishStory');
|
||||
Route::delete('v1/delete/{id}', 'StoryController@apiV1Delete');
|
||||
});
|
||||
|
||||
Route::group(['prefix' => 'portfolio'], function () {
|
||||
Route::post('self/curated.json', 'PortfolioController@storeCurated');
|
||||
Route::post('self/settings.json', 'PortfolioController@getSettings');
|
||||
Route::get('account/settings.json', 'PortfolioController@getAccountSettings');
|
||||
Route::post('self/update-settings.json', 'PortfolioController@storeSettings');
|
||||
Route::get('{username}/feed', 'PortfolioController@getFeed');
|
||||
});
|
||||
});
|
||||
});
|
23
routes/web-portfolio.php
Normal file
23
routes/web-portfolio.php
Normal file
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
|
||||
Route::domain(config('portfolio.domain'))->group(function () {
|
||||
Route::redirect('redirect/home', config('app.url'));
|
||||
Route::get('/', 'PortfolioController@index');
|
||||
Route::post('api/portfolio/self/curated.json', 'PortfolioController@storeCurated');
|
||||
Route::post('api/portfolio/self/settings.json', 'PortfolioController@getSettings');
|
||||
Route::get('api/portfolio/account/settings.json', 'PortfolioController@getAccountSettings');
|
||||
Route::post('api/portfolio/self/update-settings.json', 'PortfolioController@storeSettings');
|
||||
Route::get('api/portfolio/{username}/feed', 'PortfolioController@getFeed');
|
||||
|
||||
Route::prefix(config('portfolio.path'))->group(function() {
|
||||
Route::get('/', 'PortfolioController@index');
|
||||
Route::get('settings', 'PortfolioController@settings')->name('portfolio.settings');
|
||||
Route::post('settings', 'PortfolioController@store');
|
||||
Route::get('{username}/{id}', 'PortfolioController@showPost');
|
||||
Route::get('{username}', 'PortfolioController@show');
|
||||
|
||||
Route::fallback(function () {
|
||||
return view('errors.404');
|
||||
});
|
||||
});
|
||||
});
|
351
routes/web.php
351
routes/web.php
|
@ -1,179 +1,5 @@
|
|||
<?php
|
||||
|
||||
Route::domain(config('pixelfed.domain.admin'))->prefix('i/admin')->group(function () {
|
||||
Route::redirect('/', '/dashboard');
|
||||
Route::redirect('timeline', config('app.url').'/timeline');
|
||||
Route::get('dashboard', 'AdminController@home')->name('admin.home');
|
||||
Route::get('stats', 'AdminController@stats')->name('admin.stats');
|
||||
Route::get('reports', 'AdminController@reports')->name('admin.reports');
|
||||
Route::get('reports/show/{id}', 'AdminController@showReport');
|
||||
Route::post('reports/show/{id}', 'AdminController@updateReport');
|
||||
Route::post('reports/bulk', 'AdminController@bulkUpdateReport');
|
||||
Route::get('reports/autospam/{id}', 'AdminController@showSpam');
|
||||
Route::post('reports/autospam/sync', 'AdminController@fixUncategorizedSpam');
|
||||
Route::post('reports/autospam/{id}', 'AdminController@updateSpam');
|
||||
Route::get('reports/autospam', 'AdminController@spam');
|
||||
Route::get('reports/appeals', 'AdminController@appeals');
|
||||
Route::get('reports/appeal/{id}', 'AdminController@showAppeal');
|
||||
Route::post('reports/appeal/{id}', 'AdminController@updateAppeal');
|
||||
Route::get('reports/email-verifications', 'AdminController@reportMailVerifications');
|
||||
Route::post('reports/email-verifications/ignore', 'AdminController@reportMailVerifyIgnore');
|
||||
Route::post('reports/email-verifications/approve', 'AdminController@reportMailVerifyApprove');
|
||||
Route::post('reports/email-verifications/clear-ignored', 'AdminController@reportMailVerifyClearIgnored');
|
||||
Route::redirect('stories', '/stories/list');
|
||||
Route::get('stories/list', 'AdminController@stories')->name('admin.stories');
|
||||
Route::redirect('statuses', '/statuses/list');
|
||||
Route::get('statuses/list', 'AdminController@statuses')->name('admin.statuses');
|
||||
Route::get('statuses/show/{id}', 'AdminController@showStatus');
|
||||
Route::redirect('profiles', '/i/admin/profiles/list');
|
||||
Route::get('profiles/list', 'AdminController@profiles')->name('admin.profiles');
|
||||
Route::get('profiles/edit/{id}', 'AdminController@profileShow');
|
||||
Route::redirect('users', '/users/list');
|
||||
Route::get('users/list', 'AdminController@users')->name('admin.users');
|
||||
Route::get('users/show/{id}', 'AdminController@userShow');
|
||||
Route::get('users/edit/{id}', 'AdminController@userEdit');
|
||||
Route::post('users/edit/{id}', 'AdminController@userEditSubmit');
|
||||
Route::get('users/activity/{id}', 'AdminController@userActivity');
|
||||
Route::get('users/message/{id}', 'AdminController@userMessage');
|
||||
Route::post('users/message/{id}', 'AdminController@userMessageSend');
|
||||
Route::get('users/modtools/{id}', 'AdminController@userModTools');
|
||||
Route::get('users/modlogs/{id}', 'AdminController@userModLogs');
|
||||
Route::post('users/modlogs/{id}', 'AdminController@userModLogsMessage');
|
||||
Route::post('users/modlogs/{id}/delete', 'AdminController@userModLogDelete');
|
||||
Route::get('users/delete/{id}', 'AdminController@userDelete');
|
||||
Route::post('users/delete/{id}', 'AdminController@userDeleteProcess');
|
||||
Route::post('users/moderation/update', 'AdminController@userModerate');
|
||||
Route::get('media', 'AdminController@media')->name('admin.media');
|
||||
Route::redirect('media/list', '/i/admin/media');
|
||||
Route::get('media/show/{id}', 'AdminController@mediaShow');
|
||||
Route::get('settings', 'AdminController@settings')->name('admin.settings');
|
||||
Route::post('settings', 'AdminController@settingsHomeStore');
|
||||
Route::get('settings/features', 'AdminController@settingsFeatures')->name('admin.settings.features');
|
||||
Route::get('settings/pages', 'AdminController@settingsPages')->name('admin.settings.pages');
|
||||
Route::get('settings/pages/edit', 'PageController@edit')->name('admin.settings.pages.edit');
|
||||
Route::post('settings/pages/edit', 'PageController@store');
|
||||
Route::post('settings/pages/delete', 'PageController@delete');
|
||||
Route::post('settings/pages/create', 'PageController@generatePage');
|
||||
Route::get('settings/maintenance', 'AdminController@settingsMaintenance')->name('admin.settings.maintenance');
|
||||
Route::get('settings/backups', 'AdminController@settingsBackups')->name('admin.settings.backups');
|
||||
Route::get('settings/storage', 'AdminController@settingsStorage')->name('admin.settings.storage');
|
||||
Route::get('settings/system', 'AdminController@settingsSystem')->name('admin.settings.system');
|
||||
|
||||
Route::get('instances', 'AdminController@instances')->name('admin.instances');
|
||||
Route::post('instances', 'AdminController@instanceScan');
|
||||
Route::get('instances/show/{id}', 'AdminController@instanceShow');
|
||||
Route::post('instances/edit/{id}', 'AdminController@instanceEdit');
|
||||
Route::get('apps/home', 'AdminController@appsHome')->name('admin.apps');
|
||||
Route::get('hashtags/home', 'AdminController@hashtagsHome')->name('admin.hashtags');
|
||||
Route::get('discover/home', 'AdminController@discoverHome')->name('admin.discover');
|
||||
Route::get('discover/category/create', 'AdminController@discoverCreateCategory')->name('admin.discover.create-category');
|
||||
Route::post('discover/category/create', 'AdminController@discoverCreateCategoryStore');
|
||||
Route::get('discover/category/edit/{id}', 'AdminController@discoverCategoryEdit');
|
||||
Route::post('discover/category/edit/{id}', 'AdminController@discoverCategoryUpdate');
|
||||
Route::post('discover/category/hashtag/create', 'AdminController@discoveryCategoryTagStore')->name('admin.discover.create-hashtag');
|
||||
|
||||
Route::get('messages/home', 'AdminController@messagesHome')->name('admin.messages');
|
||||
Route::get('messages/show/{id}', 'AdminController@messagesShow');
|
||||
Route::post('messages/mark-read', 'AdminController@messagesMarkRead');
|
||||
Route::redirect('site-news', '/i/admin/newsroom');
|
||||
Route::get('newsroom', 'AdminController@newsroomHome')->name('admin.newsroom.home');
|
||||
Route::get('newsroom/create', 'AdminController@newsroomCreate')->name('admin.newsroom.create');
|
||||
Route::get('newsroom/edit/{id}', 'AdminController@newsroomEdit');
|
||||
Route::post('newsroom/edit/{id}', 'AdminController@newsroomUpdate');
|
||||
Route::delete('newsroom/edit/{id}', 'AdminController@newsroomDelete');
|
||||
Route::post('newsroom/create', 'AdminController@newsroomStore');
|
||||
|
||||
Route::get('diagnostics/home', 'AdminController@diagnosticsHome')->name('admin.diagnostics');
|
||||
Route::post('diagnostics/decrypt', 'AdminController@diagnosticsDecrypt')->name('admin.diagnostics.decrypt');
|
||||
Route::get('custom-emoji/home', 'AdminController@customEmojiHome')->name('admin.custom-emoji');
|
||||
Route::post('custom-emoji/toggle-active/{id}', 'AdminController@customEmojiToggleActive');
|
||||
Route::get('custom-emoji/new', 'AdminController@customEmojiAdd');
|
||||
Route::post('custom-emoji/new', 'AdminController@customEmojiStore');
|
||||
Route::post('custom-emoji/delete/{id}', 'AdminController@customEmojiDelete');
|
||||
Route::get('custom-emoji/duplicates/{id}', 'AdminController@customEmojiShowDuplicates');
|
||||
|
||||
Route::get('directory/home', 'AdminController@directoryHome')->name('admin.directory');
|
||||
|
||||
Route::get('autospam/home', 'AdminController@autospamHome')->name('admin.autospam');
|
||||
|
||||
Route::redirect('asf/', 'asf/home');
|
||||
Route::get('asf/home', 'AdminShadowFilterController@home');
|
||||
Route::get('asf/create', 'AdminShadowFilterController@create');
|
||||
Route::get('asf/edit/{id}', 'AdminShadowFilterController@edit');
|
||||
Route::post('asf/edit/{id}', 'AdminShadowFilterController@storeEdit');
|
||||
Route::post('asf/create', 'AdminShadowFilterController@store');
|
||||
|
||||
Route::prefix('api')->group(function() {
|
||||
Route::get('stats', 'AdminController@getStats');
|
||||
Route::get('accounts', 'AdminController@getAccounts');
|
||||
Route::get('posts', 'AdminController@getPosts');
|
||||
Route::get('instances', 'AdminController@getInstances');
|
||||
Route::post('directory/save', 'AdminController@directoryStore');
|
||||
Route::get('directory/initial-data', 'AdminController@directoryInitialData');
|
||||
Route::get('directory/popular-posts', 'AdminController@directoryGetPopularPosts');
|
||||
Route::post('directory/add-by-id', 'AdminController@directoryGetAddPostByIdSearch');
|
||||
Route::delete('directory/banner-image', 'AdminController@directoryDeleteBannerImage');
|
||||
Route::post('directory/submit', 'AdminController@directoryHandleServerSubmission');
|
||||
Route::post('directory/testimonial/save', 'AdminController@directorySaveTestimonial');
|
||||
Route::post('directory/testimonial/delete', 'AdminController@directoryDeleteTestimonial');
|
||||
Route::post('directory/testimonial/update', 'AdminController@directoryUpdateTestimonial');
|
||||
Route::get('hashtags/stats', 'AdminController@hashtagsStats');
|
||||
Route::get('hashtags/query', 'AdminController@hashtagsApi');
|
||||
Route::get('hashtags/get', 'AdminController@hashtagsGet');
|
||||
Route::post('hashtags/update', 'AdminController@hashtagsUpdate');
|
||||
Route::post('hashtags/clear-trending-cache', 'AdminController@hashtagsClearTrendingCache');
|
||||
Route::get('instances/get', 'AdminController@getInstancesApi');
|
||||
Route::get('instances/stats', 'AdminController@getInstancesStatsApi');
|
||||
Route::get('instances/query', 'AdminController@getInstancesQueryApi');
|
||||
Route::post('instances/update', 'AdminController@postInstanceUpdateApi');
|
||||
Route::post('instances/create', 'AdminController@postInstanceCreateNewApi');
|
||||
Route::post('instances/delete', 'AdminController@postInstanceDeleteApi');
|
||||
Route::post('instances/refresh-stats', 'AdminController@postInstanceRefreshStatsApi');
|
||||
Route::get('instances/download-backup', 'AdminController@downloadBackup');
|
||||
Route::post('instances/import-data', 'AdminController@importBackup');
|
||||
Route::get('reports/stats', 'AdminController@reportsStats');
|
||||
Route::get('reports/all', 'AdminController@reportsApiAll');
|
||||
Route::get('reports/get/{id}', 'AdminController@reportsApiGet');
|
||||
Route::post('reports/handle', 'AdminController@reportsApiHandle');
|
||||
Route::get('reports/spam/all', 'AdminController@reportsApiSpamAll');
|
||||
Route::get('reports/spam/get/{id}', 'AdminController@reportsApiSpamGet');
|
||||
Route::post('reports/spam/handle', 'AdminController@reportsApiSpamHandle');
|
||||
Route::post('autospam/config', 'AdminController@getAutospamConfigApi');
|
||||
Route::post('autospam/reports/closed', 'AdminController@getAutospamReportsClosedApi');
|
||||
Route::post('autospam/train', 'AdminController@postAutospamTrainSpamApi');
|
||||
Route::post('autospam/search/non-spam', 'AdminController@postAutospamTrainNonSpamSearchApi');
|
||||
Route::post('autospam/train/non-spam', 'AdminController@postAutospamTrainNonSpamSubmitApi');
|
||||
Route::post('autospam/tokens/custom', 'AdminController@getAutospamCustomTokensApi');
|
||||
Route::post('autospam/tokens/store', 'AdminController@saveNewAutospamCustomTokensApi');
|
||||
Route::post('autospam/tokens/update', 'AdminController@updateAutospamCustomTokensApi');
|
||||
Route::post('autospam/tokens/export', 'AdminController@exportAutospamCustomTokensApi');
|
||||
Route::post('autospam/config/enable', 'AdminController@enableAutospamApi');
|
||||
Route::post('autospam/config/disable', 'AdminController@disableAutospamApi');
|
||||
});
|
||||
});
|
||||
|
||||
Route::domain(config('portfolio.domain'))->group(function () {
|
||||
Route::redirect('redirect/home', config('app.url'));
|
||||
Route::get('/', 'PortfolioController@index');
|
||||
Route::post('api/portfolio/self/curated.json', 'PortfolioController@storeCurated');
|
||||
Route::post('api/portfolio/self/settings.json', 'PortfolioController@getSettings');
|
||||
Route::get('api/portfolio/account/settings.json', 'PortfolioController@getAccountSettings');
|
||||
Route::post('api/portfolio/self/update-settings.json', 'PortfolioController@storeSettings');
|
||||
Route::get('api/portfolio/{username}/feed', 'PortfolioController@getFeed');
|
||||
|
||||
Route::prefix(config('portfolio.path'))->group(function() {
|
||||
Route::get('/', 'PortfolioController@index');
|
||||
Route::get('settings', 'PortfolioController@settings')->name('portfolio.settings');
|
||||
Route::post('settings', 'PortfolioController@store');
|
||||
Route::get('{username}/{id}', 'PortfolioController@showPost');
|
||||
Route::get('{username}', 'PortfolioController@show');
|
||||
|
||||
Route::fallback(function () {
|
||||
return view('errors.404');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofactor', 'localization'])->group(function () {
|
||||
Route::get('/', 'SiteController@home')->name('timeline.personal');
|
||||
Route::redirect('/home', '/')->name('home');
|
||||
|
@ -203,176 +29,21 @@ Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofact
|
|||
Route::get('auth/pci/{id}/{code}', 'ParentalControlsController@inviteRegister');
|
||||
Route::post('auth/pci/{id}/{code}', 'ParentalControlsController@inviteRegisterStore');
|
||||
|
||||
// Route::get('auth/sign_up', 'CuratedRegisterController@index');
|
||||
// Route::post('auth/sign_up', 'CuratedRegisterController@proceed');
|
||||
// Route::get('auth/sign_up/concierge/response-sent', 'CuratedRegisterController@conciergeResponseSent');
|
||||
// Route::get('auth/sign_up/concierge', 'CuratedRegisterController@concierge');
|
||||
// Route::post('auth/sign_up/concierge', 'CuratedRegisterController@conciergeStore');
|
||||
// Route::get('auth/sign_up/concierge/form', 'CuratedRegisterController@conciergeFormShow');
|
||||
// Route::post('auth/sign_up/concierge/form', 'CuratedRegisterController@conciergeFormStore');
|
||||
// Route::get('auth/sign_up/confirm', 'CuratedRegisterController@confirmEmail');
|
||||
// Route::post('auth/sign_up/confirm', 'CuratedRegisterController@confirmEmailHandle');
|
||||
// Route::get('auth/sign_up/confirmed', 'CuratedRegisterController@emailConfirmed');
|
||||
Route::get('auth/forgot/email', 'UserEmailForgotController@index')->name('email.forgot');
|
||||
Route::post('auth/forgot/email', 'UserEmailForgotController@store')->middleware('throttle:10,900,forgotEmail');
|
||||
|
||||
Route::get('discover', 'DiscoverController@home')->name('discover');
|
||||
|
||||
Route::group(['prefix' => 'api'], function () {
|
||||
Route::get('search', 'SearchController@searchAPI');
|
||||
Route::post('status/view', 'StatusController@storeView');
|
||||
Route::get('v1/polls/{id}', 'PollController@getPoll');
|
||||
Route::post('v1/polls/{id}/votes', 'PollController@vote');
|
||||
|
||||
Route::group(['prefix' => 'compose'], function() {
|
||||
Route::group(['prefix' => 'v0'], function() {
|
||||
Route::post('/media/upload', 'ComposeController@mediaUpload');
|
||||
Route::post('/media/update', 'ComposeController@mediaUpdate');
|
||||
Route::delete('/media/delete', 'ComposeController@mediaDelete');
|
||||
Route::get('/search/tag', 'ComposeController@searchTag');
|
||||
Route::get('/search/location', 'ComposeController@searchLocation');
|
||||
Route::get('/search/mention', 'ComposeController@searchMentionAutocomplete');
|
||||
Route::get('/search/hashtag', 'ComposeController@searchHashtagAutocomplete');
|
||||
|
||||
Route::post('/publish', 'ComposeController@store');
|
||||
Route::post('/publish/text', 'ComposeController@storeText');
|
||||
Route::get('/media/processing', 'ComposeController@mediaProcessingCheck');
|
||||
Route::get('/settings', 'ComposeController@composeSettings');
|
||||
Route::post('/poll', 'ComposeController@createPoll');
|
||||
});
|
||||
});
|
||||
|
||||
Route::group(['prefix' => 'direct'], function () {
|
||||
Route::get('browse', 'DirectMessageController@browse');
|
||||
Route::post('create', 'DirectMessageController@create');
|
||||
Route::get('thread', 'DirectMessageController@thread');
|
||||
Route::post('mute', 'DirectMessageController@mute');
|
||||
Route::post('unmute', 'DirectMessageController@unmute');
|
||||
Route::delete('message', 'DirectMessageController@delete');
|
||||
Route::post('media', 'DirectMessageController@mediaUpload');
|
||||
Route::post('lookup', 'DirectMessageController@composeLookup');
|
||||
Route::post('read', 'DirectMessageController@read');
|
||||
});
|
||||
|
||||
Route::group(['prefix' => 'v2'], function() {
|
||||
Route::get('config', 'ApiController@siteConfiguration');
|
||||
Route::get('discover', 'InternalApiController@discover');
|
||||
Route::get('discover/posts', 'InternalApiController@discoverPosts')->middleware('auth:api');
|
||||
Route::get('profile/{username}/status/{postid}', 'PublicApiController@status');
|
||||
Route::get('profile/{username}/status/{postid}/state', 'PublicApiController@statusState');
|
||||
Route::get('comments/{username}/status/{postId}', 'PublicApiController@statusComments');
|
||||
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::get('statuses/{id}/replies', 'Api\ApiV1Controller@statusReplies');
|
||||
Route::get('statuses/{id}/state', 'Api\ApiV1Controller@statusState');
|
||||
});
|
||||
|
||||
Route::group(['prefix' => 'pixelfed'], function() {
|
||||
Route::group(['prefix' => 'v1'], function() {
|
||||
Route::get('accounts/verify_credentials', 'ApiController@verifyCredentials');
|
||||
Route::get('accounts/relationships', 'Api\ApiV1Controller@accountRelationshipsById');
|
||||
Route::get('accounts/search', 'Api\ApiV1Controller@accountSearch');
|
||||
Route::get('accounts/{id}/statuses', 'PublicApiController@accountStatuses');
|
||||
Route::post('accounts/{id}/block', 'Api\ApiV1Controller@accountBlockById');
|
||||
Route::post('accounts/{id}/unblock', 'Api\ApiV1Controller@accountUnblockById');
|
||||
Route::get('statuses/{id}', 'PublicApiController@getStatus');
|
||||
Route::get('accounts/{id}', 'PublicApiController@account');
|
||||
Route::post('avatar/update', 'ApiController@avatarUpdate');
|
||||
Route::get('custom_emojis', 'Api\ApiV1Controller@customEmojis');
|
||||
Route::get('notifications', 'ApiController@notifications');
|
||||
Route::get('timelines/public', 'PublicApiController@publicTimelineApi');
|
||||
Route::get('timelines/home', 'PublicApiController@homeTimelineApi');
|
||||
Route::get('timelines/network', 'PublicApiController@networkTimelineApi');
|
||||
Route::get('newsroom/timeline', 'NewsroomController@timelineApi');
|
||||
Route::post('newsroom/markasread', 'NewsroomController@markAsRead');
|
||||
Route::get('favourites', 'Api\BaseApiController@accountLikes');
|
||||
Route::get('mutes', 'AccountController@accountMutes');
|
||||
Route::get('blocks', 'AccountController@accountBlocks');
|
||||
});
|
||||
|
||||
Route::group(['prefix' => 'v2'], function() {
|
||||
Route::get('config', 'ApiController@siteConfiguration');
|
||||
Route::get('discover', 'InternalApiController@discover');
|
||||
Route::get('discover/posts', 'InternalApiController@discoverPosts');
|
||||
Route::get('discover/profiles', 'DiscoverController@profilesDirectoryApi');
|
||||
Route::get('profile/{username}/status/{postid}', 'PublicApiController@status');
|
||||
Route::get('comments/{username}/status/{postId}', 'PublicApiController@statusComments');
|
||||
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::get('discover/posts/trending', 'DiscoverController@trendingApi');
|
||||
Route::get('discover/posts/hashtags', 'DiscoverController@trendingHashtags');
|
||||
Route::get('discover/posts/places', 'DiscoverController@trendingPlaces');
|
||||
Route::get('seasonal/yir', 'SeasonalController@getData');
|
||||
Route::post('seasonal/yir', 'SeasonalController@store');
|
||||
Route::get('mutes', 'AccountController@accountMutesV2');
|
||||
Route::get('blocks', 'AccountController@accountBlocksV2');
|
||||
Route::get('filters', 'AccountController@accountFiltersV2');
|
||||
Route::post('status/compose', 'InternalApiController@composePost');
|
||||
Route::get('status/{id}/replies', 'InternalApiController@statusReplies');
|
||||
Route::post('status/{id}/archive', 'ApiController@archive');
|
||||
Route::post('status/{id}/unarchive', 'ApiController@unarchive');
|
||||
Route::get('statuses/archives', 'ApiController@archivedPosts');
|
||||
Route::get('discover/memories', 'DiscoverController@myMemories');
|
||||
Route::get('discover/account-insights', 'DiscoverController@accountInsightsPopularPosts');
|
||||
Route::get('discover/server-timeline', 'DiscoverController@serverTimeline');
|
||||
Route::get('discover/meta', 'DiscoverController@enabledFeatures');
|
||||
Route::post('discover/admin/features', 'DiscoverController@updateFeatures');
|
||||
});
|
||||
|
||||
Route::get('discover/accounts/popular', 'Api\ApiV1Controller@discoverAccountsPopular');
|
||||
Route::post('web/change-language.json', 'SpaController@updateLanguage');
|
||||
});
|
||||
|
||||
Route::group(['prefix' => 'local'], function () {
|
||||
// Route::post('status/compose', 'InternalApiController@composePost')->middleware('throttle:maxPostsPerHour,60')->middleware('throttle:maxPostsPerDay,1440');
|
||||
Route::get('exp/rec', 'ApiController@userRecommendations');
|
||||
Route::post('discover/tag/subscribe', 'HashtagFollowController@store');
|
||||
Route::get('discover/tag/list', 'HashtagFollowController@getTags');
|
||||
// Route::get('profile/sponsor/{id}', 'ProfileSponsorController@get');
|
||||
Route::get('bookmarks', 'InternalApiController@bookmarks');
|
||||
Route::get('collection/items/{id}', 'CollectionController@getItems');
|
||||
Route::post('collection/item', 'CollectionController@storeId');
|
||||
Route::delete('collection/item', 'CollectionController@deleteId');
|
||||
Route::get('collection/{id}', 'CollectionController@getCollection');
|
||||
Route::post('collection/{id}', 'CollectionController@store');
|
||||
Route::delete('collection/{id}', 'CollectionController@delete');
|
||||
Route::post('collection/{id}/publish', 'CollectionController@publish');
|
||||
Route::get('profile/collections/{id}', 'CollectionController@getUserCollections');
|
||||
|
||||
Route::post('compose/tag/untagme', 'MediaTagController@untagProfile');
|
||||
|
||||
Route::post('import/ig', 'ImportPostController@store');
|
||||
Route::get('import/ig/config', 'ImportPostController@getConfig');
|
||||
Route::post('import/ig/media', 'ImportPostController@storeMedia');
|
||||
Route::post('import/ig/existing', 'ImportPostController@getImportedFiles');
|
||||
Route::post('import/ig/posts', 'ImportPostController@getImportedPosts');
|
||||
Route::post('import/ig/processing', 'ImportPostController@getProcessingCount');
|
||||
});
|
||||
|
||||
Route::group(['prefix' => 'web/stories'], function () {
|
||||
Route::get('v1/recent', 'StoryController@recent');
|
||||
Route::get('v1/viewers', 'StoryController@viewers');
|
||||
Route::get('v1/profile/{id}', 'StoryController@profile');
|
||||
Route::get('v1/exists/{id}', 'StoryController@exists');
|
||||
Route::get('v1/poll/results', 'StoryController@pollResults');
|
||||
Route::post('v1/viewed', 'StoryController@viewed');
|
||||
Route::post('v1/react', 'StoryController@react');
|
||||
Route::post('v1/comment', 'StoryController@comment');
|
||||
Route::post('v1/publish/poll', 'StoryController@publishStoryPoll');
|
||||
Route::post('v1/poll/vote', 'StoryController@storyPollVote');
|
||||
Route::post('v1/report', 'StoryController@storeReport');
|
||||
Route::post('v1/add', 'StoryController@apiV1Add');
|
||||
Route::post('v1/crop', 'StoryController@cropPhoto');
|
||||
Route::post('v1/publish', 'StoryController@publishStory');
|
||||
Route::delete('v1/delete/{id}', 'StoryController@apiV1Delete');
|
||||
});
|
||||
|
||||
Route::group(['prefix' => 'portfolio'], function () {
|
||||
Route::post('self/curated.json', 'PortfolioController@storeCurated');
|
||||
Route::post('self/settings.json', 'PortfolioController@getSettings');
|
||||
Route::get('account/settings.json', 'PortfolioController@getAccountSettings');
|
||||
Route::post('self/update-settings.json', 'PortfolioController@storeSettings');
|
||||
Route::get('{username}/feed', 'PortfolioController@getFeed');
|
||||
});
|
||||
});
|
||||
|
||||
Route::get('discover/tags/{hashtag}', 'DiscoverController@showTags');
|
||||
Route::get('discover/places', 'PlaceController@directoryHome')->name('discover.places');
|
||||
Route::get('discover/places/{id}/{slug}', 'PlaceController@show');
|
||||
|
@ -634,6 +305,8 @@ Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofact
|
|||
Route::view('instance-max-users-limit', 'site.help.instance-max-users')->name('help.instance-max-users-limit');
|
||||
Route::view('import', 'site.help.import')->name('help.import');
|
||||
Route::view('parental-controls', 'site.help.parental-controls');
|
||||
// Route::view('email-confirmation-issues', 'site.help.email-confirmation-issues')->name('help.email-confirmation-issues');
|
||||
// Route::view('curated-onboarding', 'site.help.curated-onboarding')->name('help.curated-onboarding');
|
||||
});
|
||||
Route::get('newsroom/{year}/{month}/{slug}', 'NewsroomController@show');
|
||||
Route::get('newsroom/archive', 'NewsroomController@archive');
|
||||
|
|
Loading…
Reference in a new issue