Skip to content

Commit 5f1bfcf

Browse files
committed
Much cleaner code for updating user details front-end
1 parent 9e54dab commit 5f1bfcf

File tree

6 files changed

+148
-101
lines changed

6 files changed

+148
-101
lines changed

app/Http/Controllers/Base/AccountController.php

Lines changed: 38 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,13 @@
2525

2626
namespace Pterodactyl\Http\Controllers\Base;
2727

28+
use Log;
2829
use Alert;
2930
use Illuminate\Http\Request;
3031
use Pterodactyl\Models\User;
31-
use Pterodactyl\Exceptions\DisplayException;
32+
use Pterodactyl\Repositories\UserRepository;
3233
use Pterodactyl\Http\Controllers\Controller;
34+
use Pterodactyl\Exceptions\DisplayValidationException;
3335

3436
class AccountController extends Controller
3537
{
@@ -45,61 +47,54 @@ public function index(Request $request)
4547
}
4648

4749
/**
48-
* Update an account email.
49-
*
50+
* Update details for a users account.
5051
* @param \Illuminate\Http\Request $request
51-
* @return \Illuminate\Http\Response
52+
* @return void
5253
*/
53-
public function email(Request $request)
54+
public function update(Request $request)
5455
{
55-
$this->validate($request, [
56-
'new_email' => 'required|email',
57-
'password' => 'required',
58-
]);
59-
60-
$user = $request->user();
56+
$data = [];
6157

62-
if (! password_verify($request->input('password'), $user->password)) {
63-
Alert::danger('The password provided was not valid for this account.')->flash();
64-
65-
return redirect()->route('account');
66-
}
58+
// Request to update account Password
59+
if ($request->input('do_action') === 'password') {
60+
$this->validate($request, [
61+
'current_password' => 'required',
62+
'new_password' => 'required|confirmed|' . User::PASSWORD_RULES,
63+
'new_password_confirmation' => 'required',
64+
]);
6765

68-
$user->email = $request->input('new_email');
69-
$user->save();
66+
$data['password'] = $request->input('new_password');
7067

71-
Alert::success('Your email address has successfully been updated.')->flash();
68+
// Request to update account Email
69+
} else if ($request->input('do_action') === 'email') {
70+
$data['email'] = $request->input('new_email');
7271

73-
return redirect()->route('account');
74-
}
72+
// Request to update account Identity
73+
} else if ($request->input('do_action') === 'identity') {
74+
$data = $request->only(['name_first', 'name_last', 'username']);
7575

76-
/**
77-
* Update an account password.
78-
*
79-
* @param \Illuminate\Http\Request $request
80-
* @return \Illuminate\Http\Response
81-
*/
82-
public function password(Request $request)
83-
{
84-
$this->validate($request, [
85-
'current_password' => 'required',
86-
'new_password' => 'required|confirmed|different:current_password|' . User::PASSWORD_RULES,
87-
'new_password_confirmation' => 'required',
88-
]);
89-
90-
$user = $request->user();
91-
92-
if (! password_verify($request->input('current_password'), $user->password)) {
93-
Alert::danger('The password provided was not valid for this account.')->flash();
76+
// Unknown, hit em with a 404
77+
} else {
78+
return abort(404);
79+
}
9480

81+
if (
82+
in_array($request->input('do_action'), ['email', 'password'])
83+
&& ! password_verify($request->input('password'), $request->user()->password)
84+
) {
85+
Alert::danger(trans('base.account.invalid_pass'))->flash();
9586
return redirect()->route('account');
9687
}
9788

9889
try {
99-
$user->setPassword($request->input('new_password'));
100-
Alert::success('Your password has successfully been updated.')->flash();
101-
} catch (DisplayException $e) {
102-
Alert::danger($e->getMessage())->flash();
90+
$repo = new UserRepository;
91+
$repo->update($request->user()->id, $data);
92+
Alert::success('Your account details were successfully updated.')->flash();
93+
} catch (DisplayValidationException $ex) {
94+
return redirect()->route('account')->withErrors(json_decode($ex->getMessage()));
95+
} catch (\Exception $ex) {
96+
Log::error($ex);
97+
Alert::danger(trans('base.account.exception'))->flash();
10398
}
10499

105100
return redirect()->route('account');

app/Http/Routes/BaseRoutes.php

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,8 @@ public function map(Router $router)
6363
'as' => 'account',
6464
'uses' => 'Base\AccountController@index',
6565
]);
66-
$router->post('/password', [
67-
'as' => 'account.password',
68-
'uses' => 'Base\AccountController@password',
69-
]);
70-
$router->post('/email', [
71-
'as' => 'account.email',
72-
'uses' => 'Base\AccountController@email',
66+
$router->post('/', [
67+
'uses' => 'Base\AccountController@update',
7368
]);
7469
});
7570

app/Repositories/UserRepository.php

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -154,10 +154,6 @@ public function update($id, array $data)
154154
unset($data['password']);
155155
}
156156

157-
if (! empty($data['root_admin'])) {
158-
$user->root_admin = $data['root_admin'];
159-
}
160-
161157
$user->fill($data);
162158

163159
return $user->save();

public/themes/pterodactyl/css/pterodactyl.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,3 +121,7 @@ td.has-progress {
121121
.box-header > .form-group > div > p.small {
122122
margin: 0;
123123
}
124+
125+
.no-margin {
126+
margin: 0 !important;
127+
}

resources/lang/en/base.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,12 @@
163163
'new_password' => 'New Password',
164164
'new_password_again' => 'Repeat New Password',
165165
'new_email' => 'New Email Address',
166+
'first_name' => 'First Name',
167+
'last_name' => 'Last Name',
168+
'update_identitity' => 'Update Identity',
169+
'username_help' => 'Your username must be unique to your account, and may only contain the following characters: :requirements.',
170+
'invalid_pass' => 'The password provided was not valid for this account.',
171+
'exception' => 'An error occurred while attempting to update your account.',
166172
],
167173
'security' => [
168174
'header' => 'Account Security',

resources/themes/pterodactyl/base/account.blade.php

Lines changed: 98 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -34,64 +34,115 @@
3434
@section('content')
3535
<div class="row">
3636
<div class="col-sm-6">
37-
<div class="box">
38-
<div class="box-header with-border">
39-
<h3 class="box-title">@lang('base.account.update_pass')</h3>
40-
</div>
41-
<form action="{{ route('account.password') }}" method="post">
42-
<div class="box-body">
43-
<div class="form-group">
44-
<label for="current_password" class="control-label">@lang('base.account.current_password')</label>
45-
<div>
46-
<input type="password" class="form-control" name="current_password" />
47-
</div>
37+
<div class="row">
38+
<div class="col-xs-12">
39+
<div class="box">
40+
<div class="box-header with-border">
41+
<h3 class="box-title">@lang('base.account.update_pass')</h3>
4842
</div>
49-
<div class="form-group">
50-
<label for="new_password" class="control-label">@lang('base.account.new_password')</label>
51-
<div>
52-
<input type="password" class="form-control" name="new_password" />
53-
<p class="text-muted"><small>@lang('auth.password_requirements')</small></p>
43+
<form action="{{ route('account') }}" method="post">
44+
<div class="box-body">
45+
<div class="form-group">
46+
<label for="current_password" class="control-label">@lang('base.account.current_password')</label>
47+
<div>
48+
<input type="password" class="form-control" name="current_password" />
49+
</div>
50+
</div>
51+
<div class="form-group">
52+
<label for="new_password" class="control-label">@lang('base.account.new_password')</label>
53+
<div>
54+
<input type="password" class="form-control" name="new_password" />
55+
<p class="text-muted small no-margin">@lang('auth.password_requirements')</p>
56+
</div>
57+
</div>
58+
<div class="form-group">
59+
<label for="new_password_again" class="control-label">@lang('base.account.new_password_again')</label>
60+
<div>
61+
<input type="password" class="form-control" name="new_password_confirmation" />
62+
</div>
63+
</div>
5464
</div>
55-
</div>
56-
<div class="form-group">
57-
<label for="new_password_again" class="control-label">@lang('base.account.new_password_again')</label>
58-
<div>
59-
<input type="password" class="form-control" name="new_password_confirmation" />
65+
<div class="box-footer">
66+
{!! csrf_field() !!}
67+
<input type="hidden" name="do_action" value="password" />
68+
<input type="submit" class="btn btn-primary btn-sm" value="@lang('base.account.update_pass')" />
6069
</div>
61-
</div>
70+
</form>
6271
</div>
63-
<div class="box-footer">
64-
{!! csrf_field() !!}
65-
<input type="submit" class="btn btn-primary btn-sm" value="@lang('base.account.update_pass')" />
66-
</div>
67-
</form>
72+
</div>
6873
</div>
6974
</div>
7075
<div class="col-sm-6">
71-
<div class="box">
72-
<div class="box-header with-border">
73-
<h3 class="box-title">@lang('base.account.update_email')</h3>
74-
</div>
75-
<form action="{{ route('account.email') }}" method="post">
76-
<div class="box-body">
77-
<div class="form-group">
78-
<label for="new_email" class="control-label">@lang('base.account.new_email')</label>
79-
<div>
80-
<input type="text" class="form-control" name="new_email" />
76+
<div class="row">
77+
<div class="col-xs-12">
78+
<div class="box box-primary">
79+
<form action="{{ route('account') }}" method="POST">
80+
<div class="box-header with-border">
81+
<h3 class="box-title">@lang('base.account.update_identitity')</h3>
8182
</div>
82-
</div>
83-
<div class="form-group">
84-
<label for="password" class="control-label">@lang('base.account.current_password')</label>
85-
<div>
86-
<input type="password" class="form-control" name="password" />
83+
<div class="box-body">
84+
<div class="row">
85+
<div class="form-group col-sm-6">
86+
<label for="first_name" class="control-label">@lang('base.account.first_name')</label>
87+
<div>
88+
<input type="text" class="form-control" name="name_first" value="{{ Auth::user()->name_first }}" />
89+
</div>
90+
</div>
91+
<div class="form-group col-sm-6">
92+
<label for="last_name" class="control-label">@lang('base.account.last_name')</label>
93+
<div>
94+
<input type="text" class="form-control" name="name_last" value="{{ Auth::user()->name_last }}" />
95+
</div>
96+
</div>
97+
</div>
98+
<div class="row">
99+
<div class="form-group col-xs-12">
100+
<label for="password" class="control-label">@lang('strings.username')</label>
101+
<div>
102+
<input type="text" class="form-control" name="username" value="{{ Auth::user()->username }}" />
103+
<p class="text-muted small no-margin">@lang('base.account.username_help', [ 'requirements' => '<code>a-z A-Z 0-9 _ - .</code>'])</p>
104+
</div>
105+
</div>
106+
</div>
87107
</div>
88-
</div>
108+
<div class="box-footer with-border">
109+
{!! csrf_field() !!}
110+
<input type="hidden" name="do_action" value="identity" />
111+
<button type="submit" class="btn btn-sm btn-primary">@lang('base.account.update_identitity')</button>
112+
</div>
113+
</form>
89114
</div>
90-
<div class="box-footer">
91-
{!! csrf_field() !!}
92-
<input type="submit" class="btn btn-primary btn-sm" value="@lang('base.account.update_email')" />
115+
</div>
116+
</div>
117+
<div class="row">
118+
<div class="col-xs-12">
119+
<div class="box">
120+
<div class="box-header with-border">
121+
<h3 class="box-title">@lang('base.account.update_email')</h3>
122+
</div>
123+
<form action="{{ route('account') }}" method="post">
124+
<div class="box-body">
125+
<div class="form-group">
126+
<label for="new_email" class="control-label">@lang('base.account.new_email')</label>
127+
<div>
128+
<input type="email" class="form-control" name="new_email" />
129+
</div>
130+
</div>
131+
<div class="form-group">
132+
<label for="password" class="control-label">@lang('base.account.current_password')</label>
133+
<div>
134+
<input type="password" class="form-control" name="password" />
135+
</div>
136+
</div>
137+
</div>
138+
<div class="box-footer">
139+
{!! csrf_field() !!}
140+
<input type="hidden" name="do_action" value="email" />
141+
<input type="submit" class="btn btn-primary btn-sm" value="@lang('base.account.update_email')" />
142+
</div>
143+
</form>
93144
</div>
94-
</form>
145+
</div>
95146
</div>
96147
</div>
97148
</div>

0 commit comments

Comments
 (0)