Merge pull request #8 from ControlPanel-gg/development

Development
This commit is contained in:
AVMG 2021-06-06 12:13:50 +02:00 committed by GitHub
commit f60018e84a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 83 additions and 44 deletions

View file

@ -3,7 +3,6 @@
namespace App\Classes;
use App\Models\Egg;
use App\Models\Location;
use App\Models\Nest;
use App\Models\Node;
use App\Models\Server;
@ -14,9 +13,33 @@ use Illuminate\Support\Facades\Http;
class Pterodactyl
{
/**
* @return PendingRequest
*/
public static function client()
{
return Http::withHeaders([
'Authorization' => 'Bearer ' . env('PTERODACTYL_TOKEN', false),
'Content-type' => 'application/json',
'Accept' => 'Application/vnd.pterodactyl.v1+json',
])->baseUrl(env('PTERODACTYL_URL') . '/api');
}
/**
* Get user by pterodactyl id
* @param int $pterodactylId
* @return mixed
*/
public static function getUser(int $pterodactylId){
$response = self::client()->get("/application/users/{$pterodactylId}");
if ($response->failed()) return null;
return $response->json()['attributes'];
}
/**
* @param Node $node
* @return array|mixed|null
* @throws Exception
*/
public static function getFreeAllocations(Node $node)
{
@ -98,17 +121,6 @@ class Pterodactyl
return $response->json();
}
/**
* @return PendingRequest
*/
public static function client()
{
return Http::withHeaders([
'Authorization' => 'Bearer ' . env('PTERODACTYL_TOKEN', false),
'Content-type' => 'application/json',
'Accept' => 'Application/vnd.pterodactyl.v1+json',
])->baseUrl(env('PTERODACTYL_URL') . '/api');
}
/**
* @param String $route
@ -125,41 +137,43 @@ class Pterodactyl
* @param Node $node
* @return Response
*/
public static function createServer(Server $server , Egg $egg , Node $node)
public static function createServer(Server $server, Egg $egg, Node $node)
{
return self::client()->post("/application/servers", [
"name" => $server->name,
"external_id" => $server->id,
"user" => $server->user->pterodactyl_id,
"egg" => $egg->id,
"docker_image" => $egg->docker_image,
"startup" => $egg->startup,
"environment" => $egg->getEnvironmentVariables(),
"limits" => [
"name" => $server->name,
"external_id" => $server->id,
"user" => $server->user->pterodactyl_id,
"egg" => $egg->id,
"docker_image" => $egg->docker_image,
"startup" => $egg->startup,
"environment" => $egg->getEnvironmentVariables(),
"limits" => [
"memory" => $server->product->memory,
"swap" => $server->product->swap,
"disk" => $server->product->disk,
"io" => $server->product->io,
"cpu" => $server->product->cpu
"swap" => $server->product->swap,
"disk" => $server->product->disk,
"io" => $server->product->io,
"cpu" => $server->product->cpu
],
"feature_limits" => [
"databases" => $server->product->databases,
"backups" => $server->product->backups,
"databases" => $server->product->databases,
"backups" => $server->product->backups,
"allocations" => 1
],
"allocation" => [
"allocation" => [
"default" => Pterodactyl::getFreeAllocationId($node)
]
]);
}
public static function suspendServer(Server $server){
public static function suspendServer(Server $server)
{
$response = self::client()->post("/application/servers/$server->pterodactyl_id/suspend");
if ($response->failed()) throw self::getException();
return $response;
}
public static function unSuspendServer(Server $server){
public static function unSuspendServer(Server $server)
{
$response = self::client()->post("/application/servers/$server->pterodactyl_id/unsuspend");
if ($response->failed()) throw self::getException();
return $response;

View file

@ -2,8 +2,10 @@
namespace App\Http\Controllers\Admin;
use App\Classes\Pterodactyl;
use App\Http\Controllers\Controller;
use App\Models\User;
use Exception;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\View\Factory;
use Illuminate\Contracts\View\View;
@ -12,6 +14,7 @@ use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException;
class UserController extends Controller
{
@ -79,17 +82,25 @@ class UserController extends Controller
* @param Request $request
* @param User $user
* @return RedirectResponse
* @throws Exception
*/
public function update(Request $request, User $user)
{
$request->validate([
"name" => "required|string|min:4|max:30",
"email" => "required|string|email",
"credits" => "required|numeric|min:0|max:1000000",
"server_limit" => "required|numeric|min:0|max:1000000",
"role" => Rule::in(['admin', 'mod', 'client', 'member']),
"name" => "required|string|min:4|max:30",
"pterodactyl_id" => "required|numeric|unique:users,pterodactyl_id,{$user->pterodactyl_id}",
"email" => "required|string|email",
"credits" => "required|numeric|min:0|max:1000000",
"server_limit" => "required|numeric|min:0|max:1000000",
"role" => Rule::in(['admin', 'mod', 'client', 'member']),
]);
if (is_null(Pterodactyl::getUser($request->input('pterodactyl_id')))){
throw ValidationException::withMessages([
'pterodactyl_id' => ["User does not exists on pterodactyl's panel"]
]);
}
$user->update($request->all());
return redirect()->route('admin.users.index')->with('success', 'User updated!');
@ -146,7 +157,7 @@ class UserController extends Controller
/**
*
* @throws \Exception
* @throws Exception
*/
public function dataTable()
{

View file

@ -52,7 +52,7 @@ class WelcomeMessage extends Notification
<h5>Verification</h5>
<p>Please verify your email address to get " . Configuration::getValueByKey('CREDITS_REWARD_AFTER_VERIFY_EMAIL') . " extra credits and increase your server limit to " . Configuration::getValueByKey('SERVER_LIMIT_REWARD_AFTER_VERIFY_EMAIL') . "<br />You can also verify your discord account to get another " . Configuration::getValueByKey('CREDITS_REWARD_AFTER_VERIFY_DISCORD') . " credits and to increase your server limit again with " . Configuration::getValueByKey('SERVER_LIMIT_REWARD_AFTER_VERIFY_DISCORD') . "</p>
<h5>Information</h5>
<p>This dashboard can be used to create and delete servers.<br /> These servers can be used and managed thru our pterodactyl panel.<br /> If you have any questions, please join our Discord and #create-a-ticket.</p>
<p>This dashboard can be used to create and delete servers.<br /> These servers can be used and managed on our pterodactyl panel.<br /> If you have any questions, please join our Discord server and #create-a-ticket.</p>
<p>We hope you can enjoy this hosting experience and if you have any suggestions please let us know!</p>
<p>Regards,<br />" . config('app.name', 'Laravel') . "</p>
",

View file

@ -51,6 +51,20 @@
</div>
@enderror
</div>
<div class="form-group">
<label for="pterodactyl_id">Pterodactyl ID</label>
<input value="{{$user->pterodactyl_id}}" id="pterodactyl_id" name="pterodactyl_id" type="number"
class="form-control @error('pterodactyl_id') is-invalid @enderror" required="required">
@error('pterodactyl_id')
<div class="invalid-feedback">
{{$message}}
</div>
@enderror
<div class="text-muted">
This ID refers to the user account created on pterodactyl's panel. <br>
<small>Only edit this if you know what you're doing :)</small>
</div>
</div>
<div class="form-group">
<label for="credits">Credits</label>
<input value="{{$user->credits}}" id="credits" name="credits" step="any" min="0" max="1000000"

View file

@ -58,8 +58,8 @@
<span class="info-box-icon bg-warning elevation-1"><i class="fas fa-chart-line"></i></span>
<div class="info-box-content">
<span class="info-box-text">Usage</span>
<span class="info-box-number">{{number_format($useage, 2, '.', '')}} <sup>p/m</sup></span>
<span class="info-box-text">Credit usage</span>
<span class="info-box-number">{{number_format($useage, 2, '.', '')}} <sup>per month</sup></span>
</div>
<!-- /.info-box-content -->
</div>
@ -83,23 +83,23 @@
<div class="card-body">
<div class="alert alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<h5><a class="alert-link text-decoration-none" href="{{env('PTERODACTYL_URL' , 'http://localhost')}}"><i
<h5><a class="alert-link text-decoration-none" target="__blank" href="{{env('PTERODACTYL_URL' , 'http://localhost')}}"><i
class="fas fa-egg mr-2"></i>Pterodactyl Panel</a></h5>
Use your servers on our pterodactyl panel <small>(You can use the same login details)</small>
</div>
<div class="alert alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<h5><a class="alert-link text-decoration-none" href="{{env('PHPMYADMIN_URL' , 'http://localhost')}}"><i
<h5><a class="alert-link text-decoration-none" target="__blank" href="{{env('PHPMYADMIN_URL' , 'http://localhost')}}"><i
class="fas fa-database mr-2"></i>phpMyAdmin</a></h5>
View your database online using phpMyAdmin
</div>
<div class="alert alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<h5><a class="alert-link text-decoration-none" href="{{env('DISCORD_INVITE_URL')}}"><i
<h5><a class="alert-link text-decoration-none" target="__blank" href="{{env('DISCORD_INVITE_URL')}}"><i
class="fab fa-discord mr-2"></i>Discord</a></h5>
Need a helping hand? want to chat? got any questions? Join our discord!
Need a helping hand? Want to chat? Got any questions? Join our discord!
</div>
</div>
<!-- /.card-body -->

View file

@ -34,7 +34,7 @@
<a href="{{route('home')}}" class="nav-link">Home</a>
</li>
<li class="nav-item d-none d-sm-inline-block">
<a href="{{env('DISCORD_INVITE_URL')}}" class="nav-link">Discord</a>
<a href="{{env('DISCORD_INVITE_URL')}}" class="nav-link" target="__blank">Discord</a>
</li>
</ul>