mirror of
https://github.com/HDInnovations/UNIT3D-Community-Edition.git
synced 2026-04-22 18:20:31 -05:00
(Update) Refactor Seedbox System 🚀
This commit is contained in:
@@ -14,7 +14,7 @@
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use App\Models\Peer;
|
||||
use App\Models\Client;
|
||||
use App\Models\Seedbox;
|
||||
use App\Models\Torrent;
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
@@ -44,7 +44,7 @@ class AutoHighspeedTag extends Command
|
||||
{
|
||||
DB::table('torrents')->update(['highspeed' => 0]);
|
||||
|
||||
$seedbox_users = Client::select(['user_id'])->get()->toArray();
|
||||
$seedbox_users = Seedbox::select(['user_id'])->get()->toArray();
|
||||
|
||||
if (is_array($seedbox_users) && count($seedbox_users) > 0) {
|
||||
$torid = Peer::select(['torrent_id'])->whereIn('user_id', $seedbox_users)->where('seeder', '=', 1)->get()->toArray();
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
<?php
|
||||
/**
|
||||
* NOTICE OF LICENSE.
|
||||
*
|
||||
* UNIT3D is open-sourced software licensed under the GNU General Public License v3.0
|
||||
* The details is bundled with this project in the file LICENSE.txt.
|
||||
*
|
||||
* @project UNIT3D
|
||||
*
|
||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html/ GNU Affero General Public License v3.0
|
||||
* @author HDVinnie
|
||||
*/
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\User;
|
||||
use App\Models\Seedbox;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class SeedboxController extends Controller
|
||||
{
|
||||
/**
|
||||
* Get A Users Registered Seedboxes.
|
||||
*
|
||||
* @param $username
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
||||
*/
|
||||
public function index(Request $request, $username)
|
||||
{
|
||||
$user = User::where('username', '=', $username)->firstOrFail();
|
||||
|
||||
abort_unless(($request->user()->group->is_modo || $request->user()->id == $user->id), 403);
|
||||
|
||||
$seedboxes = Seedbox::where('user_id', '=', $user->id)->paginate(25);
|
||||
|
||||
return view('seedbox.index', ['user' => $user, 'seedboxes' => $seedboxes]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store A Seedbox.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param $username
|
||||
*
|
||||
* @return Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
protected function store(Request $request, $username)
|
||||
{
|
||||
$user = $request->user();
|
||||
|
||||
$seedbox = new Seedbox();
|
||||
$seedbox->user_id = $user->id;
|
||||
$seedbox->name = $request->input('name');
|
||||
$seedbox->ip = $request->input('ip');
|
||||
|
||||
$v = validator($seedbox->toArray(), [
|
||||
'name' => 'required|alpha_num',
|
||||
'ip' => 'required|unique:clients,ip',
|
||||
]);
|
||||
|
||||
if ($v->fails()) {
|
||||
return redirect()->route('seedboxes.index', ['username' => $user->username])
|
||||
->withErrors($v->errors());
|
||||
} else {
|
||||
$seedbox->save();
|
||||
|
||||
// Activity Log
|
||||
\LogActivity::addToLog("Member {$user->username} has added a new seedbox to there account.");
|
||||
|
||||
return redirect()->route('seedboxes.index', ['username' => $user->username])
|
||||
->withSuccess('Seedbox Has Been Successfully Added!');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete A Seedbox.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param $username
|
||||
* @param $id
|
||||
*
|
||||
* @return Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
protected function destroy(Request $request, $username, $id)
|
||||
{
|
||||
$user = $request->user();
|
||||
$seedbox = Seedbox::findOrFail($id);
|
||||
|
||||
abort_unless(($user->group->is_modo || $user->id == $seedbox->user_id), 403);
|
||||
|
||||
$seedbox->delete();
|
||||
|
||||
return redirect()->route('seedboxes.index', ['username' => $user->username])
|
||||
->withSuccess('Seedbox Has Been Successfully Deleted');
|
||||
}
|
||||
}
|
||||
@@ -16,9 +16,9 @@ namespace App\Http\Controllers\Staff;
|
||||
use App\Models\Peer;
|
||||
use App\Models\User;
|
||||
use App\Models\Group;
|
||||
use App\Models\Client;
|
||||
use App\Models\Report;
|
||||
use App\Models\Torrent;
|
||||
use App\Models\Seedbox;
|
||||
use App\Models\Application;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Helpers\SystemInformation;
|
||||
@@ -53,8 +53,8 @@ class HomeController extends Controller
|
||||
$leechers = Peer::where('seeder', '=', 0)->count();
|
||||
|
||||
// Seedbox Info
|
||||
$seedboxes = Client::count();
|
||||
$highspeed_users = Client::count();
|
||||
$seedboxes = Seedbox::count();
|
||||
$highspeed_users = Seedbox::count();
|
||||
$highspeed_torrents = Torrent::where('highspeed', '=', 1)->count();
|
||||
|
||||
// User Info
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
namespace App\Http\Controllers\Staff;
|
||||
|
||||
use App\Models\Client;
|
||||
use App\Models\Seedbox;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
|
||||
@@ -26,7 +26,7 @@ class SeedboxController extends Controller
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$seedboxes = Client::with('user')->latest()->paginate(50);
|
||||
$seedboxes = Seedbox::with('user')->latest()->paginate(50);
|
||||
|
||||
return view('Staff.seedbox.index', ['seedboxes' => $seedboxes]);
|
||||
}
|
||||
@@ -41,7 +41,7 @@ class SeedboxController extends Controller
|
||||
public function destroy(Request $request, $id)
|
||||
{
|
||||
$user = $request->user();
|
||||
$seedbox = Client::findOrFail($id);
|
||||
$seedbox = Seedbox::findOrFail($id);
|
||||
|
||||
abort_unless($user->group->is_modo, 403);
|
||||
$seedbox->delete();
|
||||
|
||||
@@ -22,7 +22,6 @@ use App\Models\Post;
|
||||
use App\Models\User;
|
||||
use App\Models\Group;
|
||||
use App\Models\Topic;
|
||||
use App\Models\Client;
|
||||
use App\Models\Follow;
|
||||
use App\Models\Invite;
|
||||
use App\Models\History;
|
||||
@@ -1163,102 +1162,6 @@ class UserController extends Controller
|
||||
return view('user.notification', ['user' => $user, 'groups'=> $groups]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get A Users Seedboxes/Clients.
|
||||
*
|
||||
* @param $username
|
||||
* @param $id
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
||||
*/
|
||||
public function clients(Request $request, $username, $id)
|
||||
{
|
||||
$user = User::where('id', '=', $id)->firstOrFail();
|
||||
|
||||
abort_unless(($request->user()->group->is_modo || $request->user()->id == $user->id), 403);
|
||||
|
||||
$cli = Client::where('user_id', '=', $user->id)->get();
|
||||
|
||||
return view('user.clients', ['user' => $user, 'clients' => $cli, 'route' => 'client']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add A Seedbox/Client.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param $username
|
||||
* @param $id
|
||||
*
|
||||
* @return Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
protected function authorizeClient(Request $request, $username, $id)
|
||||
{
|
||||
$v = validator($request->all(), [
|
||||
'password' => 'required',
|
||||
'ip' => 'required|ipv4|unique:clients,ip',
|
||||
'client_name' => 'required|alpha_num',
|
||||
]);
|
||||
|
||||
$user = auth()->user();
|
||||
if ($v->passes()) {
|
||||
if (Hash::check($request->input('password'), $user->password)) {
|
||||
if (Client::where('user_id', '=', $user->id)->get()->count() >= config('other.max_cli')) {
|
||||
return redirect()->route('user_clients', ['username' => $user->username, 'id' => $user->id])
|
||||
->withErrors('Max Clients Reached!');
|
||||
}
|
||||
$cli = new Client();
|
||||
$cli->user_id = $user->id;
|
||||
$cli->name = $request->input('client_name');
|
||||
$cli->ip = $request->input('ip');
|
||||
$cli->save();
|
||||
|
||||
// Activity Log
|
||||
\LogActivity::addToLog("Member {$user->username} has added a new seedbox to there account.");
|
||||
|
||||
return redirect()->route('user_clients', ['username' => $user->username, 'id' => $user->id])
|
||||
->withSuccess('Client Has Been Added!');
|
||||
} else {
|
||||
return redirect()->route('user_clients', ['username' => $user->username, 'id' => $user->id])
|
||||
->withErrors('Password Invalid!');
|
||||
}
|
||||
} else {
|
||||
return redirect()->route('user_clients', ['username' => $user->username, 'id' => $user->id])
|
||||
->withErrors('All required values not received or IP is already registered by a member.');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete A Seedbox/Client.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param $username
|
||||
* @param $id
|
||||
*
|
||||
* @return Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
protected function removeClient(Request $request, $username, $id)
|
||||
{
|
||||
$v = validator($request->all(), [
|
||||
'cliid' => 'required|exists:clients,id',
|
||||
'userid' => 'required|exists:users,id',
|
||||
]);
|
||||
|
||||
$user = auth()->user();
|
||||
if ($v->passes()) {
|
||||
$cli = Client::where('id', '=', $request->input('cliid'));
|
||||
$cli->delete();
|
||||
|
||||
// Activity Log
|
||||
\LogActivity::addToLog("Member {$user->username} has removed a seedbox from there account.");
|
||||
|
||||
return redirect()->route('user_clients', ['username' => $user->username, 'id' => $user->id])
|
||||
->withSuccess('Client Has Been Removed!');
|
||||
} else {
|
||||
return redirect()->route('user_clients', ['username' => $user->username, 'id' => $user->id])
|
||||
->withErrors('Unable to remove this client.');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get A Users Warnings.
|
||||
*
|
||||
|
||||
@@ -16,10 +16,17 @@ namespace App\Models;
|
||||
use App\Traits\Encryptable;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Client extends Model
|
||||
class Seedbox extends Model
|
||||
{
|
||||
use Encryptable;
|
||||
|
||||
/**
|
||||
* The Database Table Used By The Model.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $table = 'clients';
|
||||
|
||||
/**
|
||||
* The Attributes That Are Encrypted.
|
||||
*
|
||||
@@ -131,16 +131,6 @@ return [
|
||||
'Owner',
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Max Seedbox Records (USER)
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Users max seedboxs allowed
|
||||
|
|
||||
*/
|
||||
'max_cli' => 6,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Users Stats
|
||||
|
||||
@@ -0,0 +1,112 @@
|
||||
@extends('layout.default')
|
||||
|
||||
@section('title')
|
||||
<title>{{ $user->username }} - @lang('user.seedboxes') - {{ config('other.title') }}</title>
|
||||
@endsection
|
||||
|
||||
@section('breadcrumb')
|
||||
<li>
|
||||
<a href="{{ route('profile', ['username' => $user->slug, 'id' => $user->id]) }}" itemprop="url"
|
||||
class="l-breadcrumb-item-link">
|
||||
<span itemprop="title" class="l-breadcrumb-item-link-title">{{ $user->username }}</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{ route('seedboxes.index', ['username' => $user->username]) }}" itemprop="url"
|
||||
class="l-breadcrumb-item-link">
|
||||
<span itemprop="title" class="l-breadcrumb-item-link-title">{{ $user->username }} @lang('user.seedboxes')</span>
|
||||
</a>
|
||||
</li>
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
<div class="container">
|
||||
<div class="block">
|
||||
@include('user.buttons.client')
|
||||
<div class="header gradient red">
|
||||
<div class="inner_content">
|
||||
<h1>{{ $user->username }} @lang('user.seedboxes')</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="some-padding">
|
||||
<div class="well">
|
||||
<p class="lead text-orange text-center"><i class="{{ config('other.font-awesome') }} fa-exclamation-triangle"></i>
|
||||
<strong>{{ strtoupper(trans('user.disclaimer')) }}</strong> <i
|
||||
class="{{ config('other.font-awesome') }} fa-exclamation-triangle"></i></p>
|
||||
<p class="lead text-orange text-center">@lang('user.disclaimer-info')
|
||||
<br><strong>@lang('user.disclaimer-info-bordered')</strong></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="table-responsive">
|
||||
<button class="btn btn-md btn-success" data-toggle="modal" data-target="#seedbox">
|
||||
<i class="{{ config('other.font-awesome') }} fa-plus"></i> Add New Seedbox
|
||||
</button>
|
||||
<table class="table table-condensed table-bordered table-striped table-hover">
|
||||
<tr>
|
||||
<th>@lang('torrent.agent')</th>
|
||||
<th>IP</th>
|
||||
<th>@lang('common.added')</th>
|
||||
<th>@lang('common.remove')</th>
|
||||
</tr>
|
||||
@foreach ($seedboxes as $seedbox)
|
||||
<tr>
|
||||
<td>{{ $seedbox->name }}</td>
|
||||
<td>{{ $seedbox->ip }}</td>
|
||||
<td>{{ $seedbox->created_at }}</td>
|
||||
<td>
|
||||
<form role="form" method="POST" action="{{ route('seedboxes.destroy', ['username' => $user->username, 'id' => $seedbox->id]) }}">
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
<button type="submit" class="btn btn-danger">
|
||||
<i class="{{ config('other.font-awesome') }} fa-trash"></i> @lang('common.delete')
|
||||
</button>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</table>
|
||||
<div class="text-center">
|
||||
{{ $seedboxes->links() }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Add Seedbox Modal --}}
|
||||
<div class="modal fade" id="seedbox" tabindex="-1" role="dialog" aria-labelledby="seedbox">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="@lang('common.close')"><span
|
||||
aria-hidden="true">×</span></button>
|
||||
<h2><i class="{{ config('other.font-awesome') }} fa-server"></i> @lang('user.add-seedbox')</h2>
|
||||
</div>
|
||||
<form role="form" method="POST" action="{{ route('seedboxes.store', ['username' => $user->username]) }}">
|
||||
@csrf
|
||||
<div class="modal-body text-center">
|
||||
<p>Enter Seedbox Details</p>
|
||||
<fieldset>
|
||||
<div class="form-group">
|
||||
<input type="text" name="name" class="form-control"
|
||||
placeholder="Seedbox Name" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<input type="text" name="ip" class="form-control" minlength="7" maxlength="15" size="15"
|
||||
pattern="^((\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$"
|
||||
placeholder="@lang('user.client-ip-address')" required>
|
||||
</div>
|
||||
</fieldset>
|
||||
<br>
|
||||
<div class="btns">
|
||||
<button type="button" class="btn btn-md btn-warning" data-dismiss="modal">@lang('common.cancel')</button>
|
||||
<button type="submit" class="btn btn-md btn-success">@lang('common.submit')</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{-- /Add Seedbox Modal --}}
|
||||
@endsection
|
||||
@@ -8,7 +8,7 @@
|
||||
<a href="{{ route('user_wishlist', ['slug' => $user->slug, 'id' => $user->id]) }}" class="btn btn-sm btn-primary">
|
||||
@lang('user.wishlist')
|
||||
</a>
|
||||
<a href="{{ route('user_clients', ['username' => $user->slug, 'id' => $user->id]) }}">
|
||||
<a href="{{ route('seedboxes.index', ['username' => $user->username]) }}">
|
||||
<button class="btn btn-sm btn-primary">
|
||||
@lang('user.seedboxes')</button>
|
||||
</a>
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<a href="{{ route('user_wishlist', ['slug' => $user->slug, 'id' => $user->id]) }}" class="btn btn-sm btn-primary">
|
||||
@lang('user.wishlist')
|
||||
</a>
|
||||
<a href="{{ route('user_clients', ['username' => $user->slug, 'id' => $user->id]) }}">
|
||||
<a href="{{ route('seedboxes.index', ['username' => $user->username]) }}">
|
||||
<button class="btn btn-sm btn-primary">
|
||||
@lang('user.seedboxes')</button>
|
||||
</a>
|
||||
|
||||
@@ -1,105 +0,0 @@
|
||||
@extends('layout.default')
|
||||
|
||||
@section('title')
|
||||
<title>{{ $user->username }} - @lang('user.seedboxes') - {{ config('other.title') }}</title>
|
||||
@endsection
|
||||
|
||||
@section('breadcrumb')
|
||||
<li>
|
||||
<a href="{{ route('profile', ['username' => $user->slug, 'id' => $user->id]) }}" itemprop="url"
|
||||
class="l-breadcrumb-item-link">
|
||||
<span itemprop="title" class="l-breadcrumb-item-link-title">{{ $user->username }}</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{ route('user_clients', ['slug' => $user->slug, 'id' => $user->id]) }}" itemprop="url"
|
||||
class="l-breadcrumb-item-link">
|
||||
<span itemprop="title" class="l-breadcrumb-item-link-title">{{ $user->username }} @lang('user.seedboxes')</span>
|
||||
</a>
|
||||
</li>
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
<div class="container-fluid">
|
||||
<div class="block">
|
||||
@include('user.buttons.client')
|
||||
<div class="header gradient red">
|
||||
<div class="inner_content">
|
||||
<h1>{{ $user->username }} @lang('user.seedboxes')</h1>
|
||||
</div>
|
||||
</div>
|
||||
<div class="some-padding">
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-sm-2 col-sm-offset-1">
|
||||
<div class="well well-sm mt-0">
|
||||
<h3>@lang('user.add-seedbox')</h3>
|
||||
<form role="form" method="POST" action="{{ route('addcli', ['username' => $user->username, 'id' => $user->id]) }}">
|
||||
@csrf
|
||||
<div class="form-group input-group">
|
||||
<input type="password" name="password" class="form-control"
|
||||
placeholder="@lang('user.current-password')" required>
|
||||
</div>
|
||||
<div class="form-group input-group">
|
||||
<input type="text" name="ip" class="form-control"
|
||||
placeholder="@lang('user.client-ip-address')" required>
|
||||
</div>
|
||||
<div class="form-group input-group">
|
||||
<input type="text" name="client_name" class="form-control"
|
||||
placeholder="@lang('user.username-seedbox')" required>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<button type="submit" class="btn btn-primary btn-sm">@lang('common.submit')</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-8">
|
||||
<div class="well well-sm mt-0">
|
||||
<p class="lead text-orange text-center"><i class="{{ config('other.font-awesome') }} fa-exclamation-triangle"></i>
|
||||
<strong>{{ strtoupper(trans('user.disclaimer')) }}</strong> <i
|
||||
class="{{ config('other.font-awesome') }} fa-exclamation-triangle"></i></p>
|
||||
<p class="lead text-orange text-center">@lang('user.disclaimer-info')
|
||||
<br><strong>@lang('user.disclaimer-info-bordered')</strong></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="container box">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-condensed table-bordered table-striped table-hover">
|
||||
<tr>
|
||||
<th>@lang('torrent.agent')</th>
|
||||
<th>IP</th>
|
||||
<th>@lang('common.added')</th>
|
||||
<th>@lang('common.remove')</th>
|
||||
</tr>
|
||||
@if (count($clients) > 0)
|
||||
@foreach ($clients as $client)
|
||||
<tr>
|
||||
<td>{{ $client->name }}</td>
|
||||
<td>{{ $client->ip }}</td>
|
||||
<td>{{ $client->created_at }}</td>
|
||||
<td>
|
||||
<form role="form" method="POST" action="{{ route('rmcli', ['username' => $user->username, 'id' => $user->id]) }}">
|
||||
@csrf
|
||||
<input type='hidden' name="cliid" value="{{ $client->id }}">
|
||||
<input type="hidden" name="userid" value="{{ $user->id }}">
|
||||
<button type="submit" class="btn btn-danger">@lang('common.delete')</button>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
@endif
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
+4
-4
@@ -315,10 +315,10 @@ Route::group(['middleware' => 'language'], function () {
|
||||
// User Language
|
||||
Route::get('/{locale}/back', 'LanguageController@home')->name('back');
|
||||
|
||||
// User Clients
|
||||
Route::get('/{username}.{id}/clients', 'UserController@clients')->name('user_clients');
|
||||
Route::post('/{username}.{id}/addcli', 'UserController@authorizeClient')->name('addcli');
|
||||
Route::post('/{username}.{id}/rmcli', 'UserController@removeClient')->name('rmcli');
|
||||
// User Seedboxes
|
||||
Route::get('/{username}/seedboxes', 'SeedboxController@index')->name('seedboxes.index');
|
||||
Route::post('/{username}/seedboxes/store', 'SeedboxController@store')->name('seedboxes.store');
|
||||
Route::delete('/{username}/seedboxes/destroy/{id}', 'SeedboxController@destroy')->name('seedboxes.destroy');
|
||||
|
||||
// Invite System
|
||||
Route::get('/invite', 'InviteController@invite')->name('invite');
|
||||
|
||||
Reference in New Issue
Block a user