Skip to content

Commit f467c3f

Browse files
committed
Improved user management in Admin CP
Fixes a few bugs from PR#17
1 parent 9d6563f commit f467c3f

File tree

5 files changed

+85
-61
lines changed

5 files changed

+85
-61
lines changed

app/Http/Controllers/Admin/AccountsController.php

Lines changed: 35 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use Alert;
66
use Mail;
7+
use Log;
78
use Pterodactyl\Models\User;
89
use Pterodactyl\Repositories\UserRepository;
910
use Pterodactyl\Models\Server;
@@ -40,7 +41,14 @@ public function getNew(Request $request)
4041

4142
public function getView(Request $request, $id)
4243
{
43-
return view('admin.accounts.view', ['user' => User::findOrFail($id), 'servers' => Server::where('owner', $id)->first()]);
44+
return view('admin.accounts.view', [
45+
'user' => User::findOrFail($id),
46+
'servers' => Server::select('servers.*', 'nodes.name as nodeName', 'locations.long as location')
47+
->join('nodes', 'servers.node', '=', 'nodes.id')
48+
->join('locations', 'nodes.location', '=', 'locations.id')
49+
->where('active', 1)
50+
->get(),
51+
]);
4452
}
4553

4654
public function getDelete(Request $request, $id)
@@ -55,22 +63,23 @@ public function getDelete(Request $request, $id)
5563
public function postNew(Request $request)
5664
{
5765
$this->validate($request, [
58-
'username' => 'required|min:4|unique:users,username',
5966
'email' => 'required|email|unique:users,email',
60-
'password' => 'required|confirmed|regex:((?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,})',
61-
'password_confirmation' => 'required'
67+
'password' => 'required|confirmed|regex:((?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,})'
6268
]);
6369

6470
try {
65-
6671
$user = new UserRepository;
6772
$userid = $user->create($request->input('username'), $request->input('email'), $request->input('password'));
6873

74+
if (!$userid) {
75+
throw new \Exception('Unable to create user, response was not an integer.');
76+
}
77+
6978
Alert::success('Account has been successfully created.')->flash();
7079
return redirect()->route('admin.accounts.view', ['id' => $userid]);
71-
7280
} catch (\Exception $e) {
73-
Alert::danger('An error occured while attempting to add a new user. Please check the logs or try again.')->flash();
81+
Log::error($e);
82+
Alert::danger('An error occured while attempting to add a new user. ' . $e->getMessage())->flash();
7483
return redirect()->route('admin.accounts.new');
7584
}
7685

@@ -81,38 +90,40 @@ public function postUpdate(Request $request)
8190
$this->validate($request, [
8291
'email' => 'required|email|unique:users,email,'.$request->input('user'),
8392
'root_admin' => 'required',
84-
'password' => 'required_with:password_confirmation',
93+
'password' => 'required_with:password_confirmation|confirmed',
8594
'password_confirmation' => 'required_with:password'
8695
]);
8796

8897
try {
8998

9099
$users = new UserRepository;
91-
$user = [];
92-
93-
$user['email'] = $request->input('email');
94-
$user['root_admin'] = $request->input('root_admin');
100+
$user = [
101+
'email' => $request->input('email'),
102+
'root_admin' => $request->input('root_admin')
103+
];
95104

96105
if(!empty($request->input('password'))) {
97106
$user['password'] = $request->input('password');
98107
}
99108

100-
$users->update($request->input('user'), $user);
109+
if(!$users->update($request->input('user'), $user)) {
110+
throw new \Exception('Unable to update user, response was not valid.');
111+
}
101112

102-
} catch (\Exception $e) {
103-
Alert::danger('An error occured while attempting to update a user. Please check the logs or try again.')->flash();
113+
if($request->input('email_user')) {
114+
Mail::send('emails.new_password', ['user' => User::findOrFail($request->input('user')), 'password' => $request->input('password')], function($message) use ($request) {
115+
$message->to($request->input('email'))->subject('Pterodactyl - Admin Reset Password');
116+
});
117+
}
118+
119+
Alert::success('User account was successfully updated.')->flash();
104120
return redirect()->route('admin.accounts.view', ['id' => $request->input('user')]);
105-
}
106121

107-
if($request->input('email_user')) {
108-
Mail::send('emails.new_password', ['user' => User::findOrFail($request->input('user')), 'password' => $request->input('password')], function($message) use ($request) {
109-
$message->to($request->input('email'))->subject('Pterodactyl - Admin Reset Password');
110-
});
122+
} catch (\Exception $e) {
123+
Log::error($e);
124+
Alert::danger('An error occured while attempting to update this user. ' . $e->getMessage())->flash();
125+
return redirect()->route('admin.accounts.view', ['id' => $request->input('user')]);
111126
}
112-
113-
Alert::success('A user was successfully updated.')->flash();
114-
return redirect()->route('admin.accounts.view', ['id' => $request->input('user')]);
115-
116127
}
117128

118129
}

app/Repositories/UserRepository.php

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -18,59 +18,47 @@ public function __construct()
1818
/**
1919
* Creates a user on the panel. Returns the created user's ID.
2020
*
21-
* @param string $username
2221
* @param string $email
2322
* @param string $password An unhashed version of the user's password.
24-
* @return integer
23+
* @return bool|integer
2524
*/
26-
public function create($username, $email, $password)
25+
public function create($email, $password)
2726
{
28-
2927
$user = new User;
3028
$uuid = new UuidService;
3129

3230
$user->uuid = $uuid->generate('users', 'uuid');
33-
34-
$user->username = $username;
3531
$user->email = $email;
3632
$user->password = Hash::make($password);
3733

38-
$user->save();
39-
40-
return $user->id;
41-
34+
return ($user->save()) ? $user->id : false;
4235
}
4336

4437
/**
45-
* Updates a user on the panel. Returns true if the update was successful.
38+
* Updates a user on the panel.
4639
*
47-
* @param string $username
48-
* @param string $email
49-
* @param string $password An unhashed version of the user's password.
40+
* @param integer $id
41+
* @param array $user An array of columns and their associated values to update for the user.
5042
* @return boolean
5143
*/
52-
public function update($id, $user)
44+
public function update($id, array $user)
5345
{
5446
if(array_key_exists('password', $user)) {
55-
$user['password'] = Hash::make($user['password']);
56-
}
47+
$user['password'] = Hash::make($user['password']);
48+
}
5749

58-
User::where('id', $id)->update($user);
59-
return true;
50+
return User::find($id)->update($user);
6051
}
6152

6253
/**
63-
* Deletes a user on the panel. Returns true if the deletion was successful.
54+
* Deletes a user on the panel, returns the number of records deleted.
6455
*
65-
* @param string $username
66-
* @param string $email
67-
* @param string $password An unhashed version of the user's password.
68-
* @return boolean
56+
* @param integer $id
57+
* @return integer
6958
*/
7059
public function delete($id)
7160
{
72-
User::destroy($id);
73-
return true;
61+
return User::destroy($id);
7462
}
7563

7664
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
use Illuminate\Database\Schema\Blueprint;
4+
use Illuminate\Database\Migrations\Migration;
5+
6+
class RemoveUsername extends Migration
7+
{
8+
/**
9+
* Run the migrations.
10+
*
11+
* @return void
12+
*/
13+
public function up()
14+
{
15+
Schema::table('users', function (Blueprint $table) {
16+
$table->dropColumn('username');
17+
});
18+
}
19+
20+
/**
21+
* Reverse the migrations.
22+
*
23+
* @return void
24+
*/
25+
public function down()
26+
{
27+
Schema::table('users', function (Blueprint $table) {
28+
$table->string('username')->after('uuid');
29+
});
30+
}
31+
}

resources/views/admin/accounts/new.blade.php

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,6 @@
2424
<h3>Create New Account</h3><hr />
2525
<form action="new" method="post">
2626
<fieldset>
27-
<div class="form-group">
28-
<label for="username" class="control-label">Username</label>
29-
<div>
30-
<input type="text" autocomplete="off" name="username" class="form-control" />
31-
</div>
32-
</div>
3327
<div class="form-group">
3428
<label for="email" class="control-label">Email</label>
3529
<div>

resources/views/admin/accounts/view.blade.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<ul class="breadcrumb">
1010
<li><a href="/admin">Admin Controls</a></li>
1111
<li><a href="/admin/accounts">Accounts</a></li>
12-
<li class="active">{{ $user->id }}</li>
12+
<li class="active">{{ $user->email }}</li>
1313
</ul>
1414
@if (count($errors) > 0)
1515
<div class="alert alert-danger">
@@ -109,10 +109,10 @@
109109
<tbody>
110110
@foreach($servers as $server)
111111
<tr>
112-
<td><a href="/server/{{ $server->uuidShort }}"><i class="fa fa-tachometer"></i></a></td>
113-
<td><a href="/admin/server/view/{{ $server->id }}">{{ $server->name }}</a></td>
114-
<td>{{ $server->node_name }}</td>
115-
<td>{{ $server->server_ip }}:{{ $server->server_port }}</td>
112+
<td><a href="/server/{{ $server->uuidShort }}/"><i class="fa fa-tachometer"></i></a></td>
113+
<td><a href="/admin/servers/view/{{ $server->id }}">{{ $server->name }}</a></td>
114+
<td>{{ $server->nodeName }}</td>
115+
<td><code>{{ $server->ip }}:{{ $server->port }}</code></td>
116116
<td>@if($server->active)<span class="label label-success">Enabled</span>@else<span class="label label-danger">Disabled</span>@endif</td>
117117
</td>
118118
@endforeach

0 commit comments

Comments
 (0)