diff --git a/app/Classes/Pterodactyl.php b/app/Classes/Pterodactyl.php index 3905552b..3d95abaa 100644 --- a/app/Classes/Pterodactyl.php +++ b/app/Classes/Pterodactyl.php @@ -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; diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index 00922bcf..95eee5a4 100644 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -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() { diff --git a/app/Notifications/WelcomeMessage.php b/app/Notifications/WelcomeMessage.php index bb2b6de8..d74390a2 100644 --- a/app/Notifications/WelcomeMessage.php +++ b/app/Notifications/WelcomeMessage.php @@ -52,7 +52,7 @@ class WelcomeMessage extends Notification
Verification

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') . "
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') . "

Information
-

This dashboard can be used to create and delete servers.
These servers can be used and managed thru our pterodactyl panel.
If you have any questions, please join our Discord and #create-a-ticket.

+

This dashboard can be used to create and delete servers.
These servers can be used and managed on our pterodactyl panel.
If you have any questions, please join our Discord server and #create-a-ticket.

We hope you can enjoy this hosting experience and if you have any suggestions please let us know!

Regards,
" . config('app.name', 'Laravel') . "

", diff --git a/resources/views/admin/users/edit.blade.php b/resources/views/admin/users/edit.blade.php index 865ad3b1..583d77a3 100644 --- a/resources/views/admin/users/edit.blade.php +++ b/resources/views/admin/users/edit.blade.php @@ -51,6 +51,20 @@ @enderror +
+ + + @error('pterodactyl_id') +
+ {{$message}} +
+ @enderror +
+ This ID refers to the user account created on pterodactyl's panel.
+ Only edit this if you know what you're doing :) +
+
- Usage - {{number_format($useage, 2, '.', '')}} p/m + Credit usage + {{number_format($useage, 2, '.', '')}} per month
@@ -83,23 +83,23 @@
-
Pterodactyl Panel
Use your servers on our pterodactyl panel (You can use the same login details)
-
phpMyAdmin
View your database online using phpMyAdmin
-
Discord
- 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!
diff --git a/resources/views/layouts/main.blade.php b/resources/views/layouts/main.blade.php index 808b9858..6d1d649f 100644 --- a/resources/views/layouts/main.blade.php +++ b/resources/views/layouts/main.blade.php @@ -34,7 +34,7 @@ Home