Forráskód Böngészése

Merge pull request #8 from ControlPanel-gg/development

Development
AVMG 4 éve
szülő
commit
f60018e84a

+ 44 - 30
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;

+ 17 - 6
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()
     {

+ 1 - 1
app/Notifications/WelcomeMessage.php

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

+ 14 - 0
resources/views/admin/users/edit.blade.php

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

+ 6 - 6
resources/views/home.blade.php

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

+ 1 - 1
resources/views/layouts/main.blade.php

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