(Update) Refactor Seedbox System 🚀

This commit is contained in:
HDVinnie
2019-05-15 23:10:44 -04:00
parent ae35e64ff0
commit ad2e4c0a11
12 changed files with 231 additions and 227 deletions
+2 -2
View File
@@ -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();
-97
View File
@@ -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.
*
-10
View File
@@ -131,16 +131,6 @@ return [
'Owner',
],
/*
|--------------------------------------------------------------------------
| Max Seedbox Records (USER)
|--------------------------------------------------------------------------
|
| Users max seedboxs allowed
|
*/
'max_cli' => 6,
/*
|--------------------------------------------------------------------------
| Default Users Stats
+112
View File
@@ -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')
&nbsp;<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">&times;</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
+1 -1
View File
@@ -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 -1
View File
@@ -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>
-105
View File
@@ -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')
&nbsp;<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
View File
@@ -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');