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;
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

@ -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"