added the ability to edit users pterodactyl id

This commit is contained in:
AVMG20 2021-06-06 12:11:35 +02:00
parent b306c48898
commit 7c644b3960
3 changed files with 75 additions and 36 deletions

View file

@ -3,7 +3,6 @@
namespace App\Classes; namespace App\Classes;
use App\Models\Egg; use App\Models\Egg;
use App\Models\Location;
use App\Models\Nest; use App\Models\Nest;
use App\Models\Node; use App\Models\Node;
use App\Models\Server; use App\Models\Server;
@ -14,9 +13,33 @@ use Illuminate\Support\Facades\Http;
class Pterodactyl 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 * @param Node $node
* @return array|mixed|null * @return array|mixed|null
* @throws Exception
*/ */
public static function getFreeAllocations(Node $node) public static function getFreeAllocations(Node $node)
{ {
@ -98,17 +121,6 @@ class Pterodactyl
return $response->json(); 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 * @param String $route
@ -125,41 +137,43 @@ class Pterodactyl
* @param Node $node * @param Node $node
* @return Response * @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", [ return self::client()->post("/application/servers", [
"name" => $server->name, "name" => $server->name,
"external_id" => $server->id, "external_id" => $server->id,
"user" => $server->user->pterodactyl_id, "user" => $server->user->pterodactyl_id,
"egg" => $egg->id, "egg" => $egg->id,
"docker_image" => $egg->docker_image, "docker_image" => $egg->docker_image,
"startup" => $egg->startup, "startup" => $egg->startup,
"environment" => $egg->getEnvironmentVariables(), "environment" => $egg->getEnvironmentVariables(),
"limits" => [ "limits" => [
"memory" => $server->product->memory, "memory" => $server->product->memory,
"swap" => $server->product->swap, "swap" => $server->product->swap,
"disk" => $server->product->disk, "disk" => $server->product->disk,
"io" => $server->product->io, "io" => $server->product->io,
"cpu" => $server->product->cpu "cpu" => $server->product->cpu
], ],
"feature_limits" => [ "feature_limits" => [
"databases" => $server->product->databases, "databases" => $server->product->databases,
"backups" => $server->product->backups, "backups" => $server->product->backups,
"allocations" => 1 "allocations" => 1
], ],
"allocation" => [ "allocation" => [
"default" => Pterodactyl::getFreeAllocationId($node) "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"); $response = self::client()->post("/application/servers/$server->pterodactyl_id/suspend");
if ($response->failed()) throw self::getException(); if ($response->failed()) throw self::getException();
return $response; return $response;
} }
public static function unSuspendServer(Server $server){ public static function unSuspendServer(Server $server)
{
$response = self::client()->post("/application/servers/$server->pterodactyl_id/unsuspend"); $response = self::client()->post("/application/servers/$server->pterodactyl_id/unsuspend");
if ($response->failed()) throw self::getException(); if ($response->failed()) throw self::getException();
return $response; return $response;

View file

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

View file

@ -51,6 +51,20 @@
</div> </div>
@enderror @enderror
</div> </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"> <div class="form-group">
<label for="credits">Credits</label> <label for="credits">Credits</label>
<input value="{{$user->credits}}" id="credits" name="credits" step="any" min="0" max="1000000" <input value="{{$user->credits}}" id="credits" name="credits" step="any" min="0" max="1000000"