Skip to content

Commit d644a53

Browse files
committed
Update users & locations to use new permissions format
1 parent a31e587 commit d644a53

File tree

15 files changed

+355
-72
lines changed

15 files changed

+355
-72
lines changed

app/Http/Controllers/API/Admin/Locations/LocationController.php

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,19 @@
33
namespace Pterodactyl\Http\Controllers\API\Admin\Locations;
44

55
use Spatie\Fractal\Fractal;
6-
use Illuminate\Http\Request;
76
use Illuminate\Http\Response;
87
use Pterodactyl\Models\Location;
98
use Illuminate\Http\JsonResponse;
109
use Pterodactyl\Http\Controllers\Controller;
11-
use Pterodactyl\Http\Requests\Admin\LocationFormRequest;
1210
use League\Fractal\Pagination\IlluminatePaginatorAdapter;
1311
use Pterodactyl\Services\Locations\LocationUpdateService;
1412
use Pterodactyl\Services\Locations\LocationCreationService;
1513
use Pterodactyl\Services\Locations\LocationDeletionService;
1614
use Pterodactyl\Transformers\Api\Admin\LocationTransformer;
1715
use Pterodactyl\Contracts\Repository\LocationRepositoryInterface;
16+
use Pterodactyl\Http\Requests\API\Admin\Locations\GetLocationsRequest;
17+
use Pterodactyl\Http\Requests\API\Admin\Locations\DeleteLocationRequest;
18+
use Pterodactyl\Http\Requests\API\Admin\Locations\UpdateLocationRequest;
1819

1920
class LocationController extends Controller
2021
{
@@ -69,15 +70,15 @@ public function __construct(
6970
/**
7071
* Return all of the locations currently registered on the Panel.
7172
*
72-
* @param \Illuminate\Http\Request $request
73+
* @param \Pterodactyl\Http\Requests\API\Admin\Locations\GetLocationsRequest $request
7374
* @return array
7475
*/
75-
public function index(Request $request): array
76+
public function index(GetLocationsRequest $request): array
7677
{
7778
$locations = $this->repository->paginated(100);
7879

7980
return $this->fractal->collection($locations)
80-
->transformWith(new LocationTransformer($request))
81+
->transformWith((new LocationTransformer)->setKey($request->key()))
8182
->withResourceName('location')
8283
->paginateWith(new IlluminatePaginatorAdapter($locations))
8384
->toArray();
@@ -86,59 +87,67 @@ public function index(Request $request): array
8687
/**
8788
* Return a single location.
8889
*
89-
* @param \Illuminate\Http\Request $request
90-
* @param \Pterodactyl\Models\Location $location
90+
* @param \Pterodactyl\Http\Controllers\API\Admin\Locations\GetLocationRequest $request
91+
* @param \Pterodactyl\Models\Location $location
9192
* @return array
9293
*/
93-
public function view(Request $request, Location $location): array
94+
public function view(GetLocationRequest $request, Location $location): array
9495
{
9596
return $this->fractal->item($location)
96-
->transformWith(new LocationTransformer($request))
97+
->transformWith((new LocationTransformer)->setKey($request->key()))
9798
->withResourceName('location')
9899
->toArray();
99100
}
100101

101102
/**
102-
* @param \Pterodactyl\Http\Requests\Admin\LocationFormRequest $request
103+
* Store a new location on the Panel and return a HTTP/201 response code with the
104+
* new location attached.
105+
*
106+
* @param \Pterodactyl\Http\Controllers\API\Admin\Locations\StoreLocationRequest $request
103107
* @return \Illuminate\Http\JsonResponse
104108
*
105109
* @throws \Pterodactyl\Exceptions\Model\DataValidationException
106110
*/
107-
public function store(LocationFormRequest $request): JsonResponse
111+
public function store(StoreLocationRequest $request): JsonResponse
108112
{
109-
$location = $this->creationService->handle($request->normalize());
113+
$location = $this->creationService->handle($request->validated());
110114

111115
return $this->fractal->item($location)
112-
->transformWith(new LocationTransformer($request))
116+
->transformWith((new LocationTransformer)->setKey($request->key()))
113117
->withResourceName('location')
114118
->respond(201);
115119
}
116120

117121
/**
118-
* @param \Pterodactyl\Http\Requests\Admin\LocationFormRequest $request
119-
* @param \Pterodactyl\Models\Location $location
122+
* Update a location on the Panel and return the updated record to the user.
123+
*
124+
* @param \Pterodactyl\Http\Requests\API\Admin\Locations\UpdateLocationRequest $request
125+
* @param \Pterodactyl\Models\Location $location
120126
* @return array
121127
*
122128
* @throws \Pterodactyl\Exceptions\Model\DataValidationException
123129
* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
124130
*/
125-
public function update(LocationFormRequest $request, Location $location): array
131+
public function update(UpdateLocationRequest $request, Location $location): array
126132
{
127-
$location = $this->updateService->handle($location, $request->normalize());
133+
$location = $this->updateService->handle($location, $request->validated());
128134

129135
return $this->fractal->item($location)
130-
->transformWith(new LocationTransformer($request))
136+
->transformWith((new LocationTransformer)->setKey($request->key()))
131137
->withResourceName('location')
132138
->toArray();
133139
}
134140

135141
/**
136-
* @param \Pterodactyl\Models\Location $location
142+
* Delete a location from the Panel.
143+
*
144+
* @param \Pterodactyl\Http\Requests\API\Admin\Locations\DeleteLocationRequest $request
145+
* @param \Pterodactyl\Models\Location $location
137146
* @return \Illuminate\Http\Response
138147
*
139148
* @throws \Pterodactyl\Exceptions\Service\Location\HasActiveNodesException
140149
*/
141-
public function delete(Location $location): Response
150+
public function delete(DeleteLocationRequest $request, Location $location): Response
142151
{
143152
$this->deletionService->handle($location);
144153

app/Http/Controllers/API/Admin/Users/UserController.php

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,14 @@
1111
use Pterodactyl\Services\Users\UserUpdateService;
1212
use Pterodactyl\Services\Users\UserCreationService;
1313
use Pterodactyl\Services\Users\UserDeletionService;
14-
use Pterodactyl\Http\Requests\Admin\UserFormRequest;
1514
use Pterodactyl\Transformers\Api\Admin\UserTransformer;
1615
use League\Fractal\Pagination\IlluminatePaginatorAdapter;
1716
use Pterodactyl\Contracts\Repository\UserRepositoryInterface;
1817
use Pterodactyl\Http\Requests\API\Admin\Users\GetUserRequest;
1918
use Pterodactyl\Http\Requests\API\Admin\Users\GetUsersRequest;
19+
use Pterodactyl\Http\Requests\API\Admin\Users\StoreUserRequest;
20+
use Pterodactyl\Http\Requests\API\Admin\Users\DeleteUserRequest;
21+
use Pterodactyl\Http\Requests\API\Admin\Users\UpdateUserRequest;
2022

2123
class UserController extends Controller
2224
{
@@ -111,17 +113,17 @@ public function view(GetUserRequest $request, User $user): array
111113
* Revocation errors are returned under the 'revocation_errors' key in the response
112114
* meta. If there are no errors this is an empty array.
113115
*
114-
* @param \Pterodactyl\Http\Requests\Admin\UserFormRequest $request
115-
* @param \Pterodactyl\Models\User $user
116+
* @param \Pterodactyl\Http\Requests\API\Admin\Users\UpdateUserRequest $request
117+
* @param \Pterodactyl\Models\User $user
116118
* @return array
117119
*
118120
* @throws \Pterodactyl\Exceptions\Model\DataValidationException
119121
* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
120122
*/
121-
public function update(UserFormRequest $request, User $user): array
123+
public function update(UpdateUserRequest $request, User $user): array
122124
{
123125
$this->updateService->setUserLevel(User::USER_LEVEL_ADMIN);
124-
$collection = $this->updateService->handle($user, $request->normalize());
126+
$collection = $this->updateService->handle($user, $request->validated());
125127

126128
$errors = [];
127129
if (! empty($collection->get('exceptions'))) {
@@ -138,7 +140,7 @@ public function update(UserFormRequest $request, User $user): array
138140
}
139141

140142
$response = $this->fractal->item($collection->get('model'))
141-
->transformWith(new UserTransformer($request))
143+
->transformWith((new UserTransformer)->setKey($request->key()))
142144
->withResourceName('user');
143145

144146
if (count($errors) > 0) {
@@ -154,18 +156,18 @@ public function update(UserFormRequest $request, User $user): array
154156
* Store a new user on the system. Returns the created user and a HTTP/201
155157
* header on successful creation.
156158
*
157-
* @param \Pterodactyl\Http\Requests\Admin\UserFormRequest $request
159+
* @param \Pterodactyl\Http\Requests\API\Admin\Users\StoreUserRequest $request
158160
* @return \Illuminate\Http\JsonResponse
159161
*
160162
* @throws \Exception
161163
* @throws \Pterodactyl\Exceptions\Model\DataValidationException
162164
*/
163-
public function store(UserFormRequest $request): JsonResponse
165+
public function store(StoreUserRequest $request): JsonResponse
164166
{
165-
$user = $this->creationService->handle($request->normalize());
167+
$user = $this->creationService->handle($request->validated());
166168

167169
return $this->fractal->item($user)
168-
->transformWith(new UserTransformer($request))
170+
->transformWith((new UserTransformer)->setKey($request->key()))
169171
->withResourceName('user')
170172
->addMeta([
171173
'link' => route('api.admin.user.view', ['user' => $user->id]),
@@ -177,12 +179,13 @@ public function store(UserFormRequest $request): JsonResponse
177179
* Handle a request to delete a user from the Panel. Returns a HTTP/204 response
178180
* on successful deletion.
179181
*
180-
* @param \Pterodactyl\Models\User $user
182+
* @param \Pterodactyl\Http\Requests\API\Admin\Users\DeleteUserRequest $request
183+
* @param \Pterodactyl\Models\User $user
181184
* @return \Illuminate\Http\Response
182185
*
183186
* @throws \Pterodactyl\Exceptions\DisplayException
184187
*/
185-
public function delete(User $user): Response
188+
public function delete(DeleteUserRequest $request, User $user): Response
186189
{
187190
$this->deletionService->handle($user);
188191

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
namespace Pterodactyl\Http\Requests\API\Admin\Locations;
4+
5+
use Pterodactyl\Models\Location;
6+
use Pterodactyl\Services\Acl\Api\AdminAcl;
7+
use Pterodactyl\Http\Requests\API\Admin\ApiAdminRequest;
8+
9+
class DeleteLocationRequest extends ApiAdminRequest
10+
{
11+
/**
12+
* @var string
13+
*/
14+
protected $resource = AdminAcl::RESOURCE_LOCATIONS;
15+
16+
/**
17+
* @var int
18+
*/
19+
protected $permission = AdminAcl::WRITE;
20+
21+
/**
22+
* Determine if the requested location exists on the Panel.
23+
*
24+
* @return bool
25+
*/
26+
public function resourceExists(): bool
27+
{
28+
$location = $this->route()->parameter('location');
29+
30+
return $location instanceof Location && $location->exists;
31+
}
32+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
namespace Pterodactyl\Http\Controllers\API\Admin\Locations;
4+
5+
use Pterodactyl\Models\Location;
6+
use Pterodactyl\Http\Requests\API\Admin\Locations\GetLocationsRequest;
7+
8+
class GetLocationRequest extends GetLocationsRequest
9+
{
10+
/**
11+
* Determine if the requested location exists on the Panel.
12+
*
13+
* @return bool
14+
*/
15+
public function resourceExists(): bool
16+
{
17+
$location = $this->route()->parameter('location');
18+
19+
return $location instanceof Location && $location->exists;
20+
}
21+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
namespace Pterodactyl\Http\Requests\API\Admin\Locations;
4+
5+
use Pterodactyl\Services\Acl\Api\AdminAcl;
6+
use Pterodactyl\Http\Requests\API\Admin\ApiAdminRequest;
7+
8+
class GetLocationsRequest extends ApiAdminRequest
9+
{
10+
/**
11+
* @var string
12+
*/
13+
protected $resource = AdminAcl::RESOURCE_LOCATIONS;
14+
15+
/**
16+
* @var int
17+
*/
18+
protected $permission = AdminAcl::READ;
19+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php
2+
3+
namespace Pterodactyl\Http\Controllers\API\Admin\Locations;
4+
5+
use Pterodactyl\Models\Location;
6+
use Pterodactyl\Services\Acl\Api\AdminAcl;
7+
use Pterodactyl\Http\Requests\API\Admin\ApiAdminRequest;
8+
9+
class StoreLocationRequest extends ApiAdminRequest
10+
{
11+
/**
12+
* @var string
13+
*/
14+
protected $resource = AdminAcl::RESOURCE_LOCATIONS;
15+
16+
/**
17+
* @var int
18+
*/
19+
protected $permission = AdminAcl::WRITE;
20+
21+
/**
22+
* Rules to validate the request aganist.
23+
*
24+
* @return array
25+
*/
26+
public function rules(): array
27+
{
28+
return collect(Location::getCreateRules())->only([
29+
'long',
30+
'short',
31+
])->toArray();
32+
}
33+
34+
/**
35+
* Rename fields to be more clear in error messages.
36+
*
37+
* @return array
38+
*/
39+
public function attributes()
40+
{
41+
return [
42+
'long' => 'Location Description',
43+
'short' => 'Location Identifier',
44+
];
45+
}
46+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
namespace Pterodactyl\Http\Requests\API\Admin\Locations;
4+
5+
use Pterodactyl\Models\Location;
6+
use Pterodactyl\Http\Controllers\API\Admin\Locations\StoreLocationRequest;
7+
8+
class UpdateLocationRequest extends StoreLocationRequest
9+
{
10+
/**
11+
* Determine if the requested location exists on the Panel.
12+
*
13+
* @return bool
14+
*/
15+
public function resourceExists(): bool
16+
{
17+
$location = $this->route()->parameter('location');
18+
19+
return $location instanceof Location && $location->exists;
20+
}
21+
22+
/**
23+
* Rules to validate this request aganist.
24+
*
25+
* @return array
26+
*/
27+
public function rules(): array
28+
{
29+
$locationId = $this->route()->parameter('location')->id;
30+
31+
return collect(Location::getUpdateRulesForId($locationId))->only([
32+
'short',
33+
'long',
34+
]);
35+
}
36+
}

0 commit comments

Comments
 (0)