Skip to content

Commit 26e476a

Browse files
committed
Push updates, removes repositories, begins moving functionality to services.
First integration tests included.
1 parent 5c2b9de commit 26e476a

File tree

14 files changed

+491
-101
lines changed

14 files changed

+491
-101
lines changed

app/Http/Controllers/Admin/UserController.php

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,27 +27,30 @@
2727

2828
use Alert;
2929
use Illuminate\Http\Request;
30-
use Pterodactyl\Contracts\Repositories\UserInterface;
30+
use Prologue\Alerts\AlertsMessageBag;
3131
use Pterodactyl\Exceptions\DisplayException;
3232
use Pterodactyl\Http\Requests\Admin\UserFormRequest;
3333
use Pterodactyl\Models\User;
3434
use Pterodactyl\Http\Controllers\Controller;
35+
use Pterodactyl\Services\UserService;
3536

3637
class UserController extends Controller
3738
{
3839
/**
39-
* @var \Pterodactyl\Repositories\Eloquent\UserRepository
40+
* @var \Pterodactyl\Services\UserService
4041
*/
41-
protected $repository;
42+
protected $service;
4243

4344
/**
4445
* UserController constructor.
4546
*
46-
* @param \Pterodactyl\Contracts\Repositories\UserInterface $repository
47+
* @param \Prologue\Alerts\AlertsMessageBag $alert
48+
* @param \Pterodactyl\Services\UserService $service
4749
*/
48-
public function __construct(UserInterface $repository)
50+
public function __construct(AlertsMessageBag $alert, UserService $service)
4951
{
50-
$this->repository = $repository;
52+
$this->alert = $alert;
53+
$this->service = $service;
5154
}
5255

5356
/**
@@ -58,7 +61,7 @@ public function __construct(UserInterface $repository)
5861
*/
5962
public function index(Request $request)
6063
{
61-
$users = $this->repository->withCount('servers', 'subuserOf');
64+
$users = User::withCount('servers', 'subuserOf');
6265

6366
if (! is_null($request->input('query'))) {
6467
$users->search($request->input('query'));
@@ -97,15 +100,17 @@ public function view(User $user)
97100
*
98101
* @param \Pterodactyl\Models\User $user
99102
* @return \Illuminate\Http\RedirectResponse
103+
*
104+
* @throws \Exception
100105
*/
101106
public function delete(User $user)
102107
{
103108
try {
104-
$this->repository->delete($user->id);
109+
$this->service->delete($user);
105110

106111
return redirect()->route('admin.users');
107112
} catch (DisplayException $ex) {
108-
Alert::danger($ex->getMessage())->flash();
113+
$this->alert->danger($ex->getMessage())->flash();
109114
}
110115

111116
return redirect()->route('admin.users.view', $user->id);
@@ -116,11 +121,14 @@ public function delete(User $user)
116121
*
117122
* @param \Pterodactyl\Http\Requests\Admin\UserFormRequest $request
118123
* @return \Illuminate\Http\RedirectResponse
124+
*
125+
* @throws \Exception
126+
* @throws \Throwable
119127
*/
120128
public function store(UserFormRequest $request)
121129
{
122-
$user = $this->repository->create($request->normalize());
123-
Alert::success('Account has been successfully created.')->flash();
130+
$user = $this->service->create($request->normalize());
131+
$this->alert->success('Account has been successfully created.')->flash();
124132

125133
return redirect()->route('admin.users.view', $user->id);
126134
}
@@ -134,7 +142,8 @@ public function store(UserFormRequest $request)
134142
*/
135143
public function update(UserFormRequest $request, User $user)
136144
{
137-
$this->repository->update($user->id, $request->normalize());
145+
$this->service->update($user, $request->normalize());
146+
$this->alert->success('User account has been updated.')->flash();
138147

139148
return redirect()->route('admin.users.view', $user->id);
140149
}
@@ -147,7 +156,7 @@ public function update(UserFormRequest $request, User $user)
147156
*/
148157
public function json(Request $request)
149158
{
150-
return $this->repository->search($request->input('q'))->all([
159+
return User::search($request->input('q'))->all([
151160
'id', 'email', 'username', 'name_first', 'name_last',
152161
])->transform(function ($item) {
153162
$item->md5 = md5(strtolower($item->email));

app/Http/Requests/Admin/UserFormRequest.php

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
namespace Pterodactyl\Http\Requests\Admin;
2626

2727
use Pterodactyl\Models\User;
28-
use Illuminate\Support\Facades\Hash;
2928
use Pterodactyl\Contracts\Repositories\UserInterface;
3029

3130
class UserFormRequest extends AdminFormRequest
@@ -45,21 +44,21 @@ public function rules()
4544
{
4645
if ($this->method() === 'PATCH') {
4746
return [
48-
'email' => 'sometimes|required|email|unique:users,email,' . $this->user->id,
49-
'username' => 'sometimes|required|alpha_dash|between:1,255|unique:users,username, ' . $this->user->id . '|' . User::USERNAME_RULES,
50-
'name_first' => 'sometimes|required|string|between:1,255',
51-
'name_last' => 'sometimes|required|string|between:1,255',
47+
'email' => 'required|email|unique:users,email,' . $this->user->id,
48+
'username' => 'required|alpha_dash|between:1,255|unique:users,username, ' . $this->user->id . '|' . User::USERNAME_RULES,
49+
'name_first' => 'required|string|between:1,255',
50+
'name_last' => 'required|string|between:1,255',
5251
'password' => 'sometimes|nullable|' . User::PASSWORD_RULES,
53-
'root_admin' => 'sometimes|required|boolean',
54-
'language' => 'sometimes|required|string|min:1|max:5',
55-
'use_totp' => 'sometimes|required|boolean',
56-
'totp_secret' => 'sometimes|required|size:16',
52+
'root_admin' => 'required|boolean',
53+
// 'language' => 'sometimes|required|string|min:1|max:5',
54+
// 'use_totp' => 'sometimes|required|boolean',
55+
// 'totp_secret' => 'sometimes|required|size:16',
5756
];
5857
}
5958

6059
return [
61-
'email' => 'required|email|unique:users,email,' . $this->user->id,
62-
'username' => 'required|alpha_dash|between:1,255|unique:users,username,' . $this->user->id . '|' . User::USERNAME_RULES,
60+
'email' => 'required|email|unique:users,email',
61+
'username' => 'required|alpha_dash|between:1,255|unique:users,username|' . User::USERNAME_RULES,
6362
'name_first' => 'required|string|between:1,255',
6463
'name_last' => 'required|string|between:1,255',
6564
'password' => 'sometimes|nullable|' . User::PASSWORD_RULES,
@@ -70,8 +69,11 @@ public function rules()
7069

7170
public function normalize()
7271
{
73-
if ($this->has('password')) {
74-
$this->merge(['password' => Hash::make($this->input('password'))]);
72+
if ($this->method === 'PATCH') {
73+
return array_merge(
74+
$this->intersect('password'),
75+
$this->only(['email', 'username', 'name_first', 'name_last', 'root_admin'])
76+
);
7577
}
7678

7779
return parent::normalize();

app/Observers/UserObserver.php

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,9 @@
2424

2525
namespace Pterodactyl\Observers;
2626

27-
use DB;
28-
use Hash;
29-
use Carbon;
3027
use Pterodactyl\Events;
3128
use Pterodactyl\Models\User;
32-
use Pterodactyl\Notifications\AccountCreated;
33-
use Pterodactyl\Services\UuidService;
29+
use Pterodactyl\Services\Components\UuidService;
3430

3531
class UserObserver
3632
{
@@ -49,7 +45,7 @@ public function __construct(UuidService $uuid)
4945
*/
5046
public function creating(User $user)
5147
{
52-
$user->uuid = $this->uuid->generate();
48+
$user->uuid = $this->uuid->generate('users', 'uuid');
5349

5450
event(new Events\User\Creating($user));
5551
}
@@ -62,22 +58,6 @@ public function creating(User $user)
6258
*/
6359
public function created(User $user)
6460
{
65-
dd($user);
66-
if ($user->password === 'unset') {
67-
$token = hash_hmac('sha256', str_random(40), config('app.key'));
68-
DB::table('password_resets')->insert([
69-
'email' => $user->email,
70-
'token' => Hash::make($token),
71-
'created_at' => Carbon::now()->toDateTimeString(),
72-
]);
73-
}
74-
75-
$user->notify(new AccountCreated([
76-
'name' => $user->name_first,
77-
'username' => $user->username,
78-
'token' => (isset($token)) ? $token : null,
79-
]));
80-
8161
event(new Events\User\Created($user));
8262
}
8363

app/Providers/RouteServiceProvider.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use Illuminate\Support\Facades\Route;
66
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
7+
use Pterodactyl\Models\User;
78

89
class RouteServiceProvider extends ServiceProvider
910
{
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
* SOFTWARE.
2323
*/
2424

25-
namespace Pterodactyl\Services;
25+
namespace Pterodactyl\Services\Components;
2626

2727
use DB;
2828
use Uuid;

0 commit comments

Comments
 (0)