-
-
Notifications
You must be signed in to change notification settings - Fork 87
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
refactor: migrate settings page back-end code to controllers (#2596)
- Loading branch information
1 parent
21495c0
commit 9d67b54
Showing
53 changed files
with
1,402 additions
and
512 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,121 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace App\Community\Controllers; | ||
|
||
use App\Community\Data\UpdateEmailData; | ||
use App\Community\Data\UpdatePasswordData; | ||
use App\Community\Data\UpdateProfileData; | ||
use App\Community\Data\UpdateWebsitePrefsData; | ||
use App\Community\Enums\ArticleType; | ||
use App\Community\Requests\ResetConnectApiKeyRequest; | ||
use App\Community\Requests\ResetWebApiKeyRequest; | ||
use App\Community\Requests\UpdateEmailRequest; | ||
use App\Community\Requests\UpdatePasswordRequest; | ||
use App\Community\Requests\UpdateProfileRequest; | ||
use App\Community\Requests\UpdateWebsitePrefsRequest; | ||
use App\Enums\Permissions; | ||
use App\Http\Controller; | ||
use App\Models\User; | ||
use Illuminate\Contracts\View\View; | ||
use Illuminate\Http\JsonResponse; | ||
use Illuminate\Http\Request; | ||
|
||
class UserSettingsController extends Controller | ||
{ | ||
/** | ||
* Show the form for editing the specified resource. | ||
*/ | ||
public function edit(Request $request, string $section = 'profile'): View | ||
{ | ||
$this->authorize('updateSettings', $section); | ||
|
||
if (!view()->exists("settings.$section")) { | ||
abort(404, 'Not found'); | ||
} | ||
|
||
return view("settings.$section"); | ||
} | ||
|
||
public function updatePassword(UpdatePasswordRequest $request): JsonResponse | ||
{ | ||
$data = UpdatePasswordData::fromRequest($request); | ||
|
||
/** @var User $user */ | ||
$user = $request->user(); | ||
|
||
changePassword($user->username, $data->newPassword); | ||
generateAppToken($user->username, $tokenInOut); | ||
|
||
return response()->json(['success' => true]); | ||
} | ||
|
||
public function updateEmail(UpdateEmailRequest $request): JsonResponse | ||
{ | ||
$data = UpdateEmailData::fromRequest($request); | ||
|
||
/** @var User $user */ | ||
$user = $request->user(); | ||
|
||
// The user will need to reconfirm their email address. | ||
$user->EmailAddress = $data->newEmail; | ||
$user->setAttribute('Permissions', Permissions::Unregistered); | ||
$user->email_verified_at = null; | ||
$user->save(); | ||
|
||
// TODO move this to an action, use Fortify, do something else. | ||
// sendValidationEmail cannot be invoked while under test. | ||
if (app()->environment() !== 'testing') { | ||
sendValidationEmail($user, $data->newEmail); | ||
} | ||
|
||
addArticleComment( | ||
'Server', | ||
ArticleType::UserModeration, | ||
$user->id, | ||
"{$user->username} changed their email address" | ||
); | ||
|
||
return response()->json(['success' => true]); | ||
} | ||
|
||
public function updateProfile(UpdateProfileRequest $request): JsonResponse | ||
{ | ||
$data = UpdateProfileData::fromRequest($request); | ||
|
||
/** @var User $user */ | ||
$user = $request->user(); | ||
|
||
$user->update($data->toArray()); | ||
|
||
return response()->json(['success' => true]); | ||
} | ||
|
||
// TODO migrate to $user->preferences blob | ||
public function updatePreferences(UpdateWebsitePrefsRequest $request): JsonResponse | ||
{ | ||
$data = UpdateWebsitePrefsData::fromRequest($request); | ||
|
||
/** @var User $user */ | ||
$user = $request->user(); | ||
|
||
$user->update($data->toArray()); | ||
|
||
return response()->json(['success' => true]); | ||
} | ||
|
||
public function resetWebApiKey(ResetWebApiKeyRequest $request): JsonResponse | ||
{ | ||
$newKey = generateAPIKey($request->user()->username); | ||
|
||
return response()->json(['newKey' => $newKey]); | ||
} | ||
|
||
public function resetConnectApiKey(ResetConnectApiKeyRequest $request): JsonResponse | ||
{ | ||
generateAppToken($request->user()->username, $newToken); | ||
|
||
return response()->json(['success' => true]); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace App\Community\Data; | ||
|
||
use App\Community\Requests\UpdateEmailRequest; | ||
use Spatie\LaravelData\Data; | ||
|
||
class UpdateEmailData extends Data | ||
{ | ||
public function __construct( | ||
public string $newEmail, | ||
) { | ||
} | ||
|
||
public static function fromRequest(UpdateEmailRequest $request): self | ||
{ | ||
return new self( | ||
newEmail: $request->newEmail, | ||
); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace App\Community\Data; | ||
|
||
use App\Community\Requests\UpdatePasswordRequest; | ||
use Spatie\LaravelData\Data; | ||
|
||
class UpdatePasswordData extends Data | ||
{ | ||
public function __construct( | ||
public string $newPassword, | ||
) { | ||
} | ||
|
||
public static function fromRequest(UpdatePasswordRequest $request): self | ||
{ | ||
return new self( | ||
newPassword: $request->newPassword, | ||
); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace App\Community\Data; | ||
|
||
use App\Community\Requests\UpdateProfileRequest; | ||
use App\Models\User; | ||
use Spatie\LaravelData\Data; | ||
|
||
class UpdateProfileData extends Data | ||
{ | ||
public function __construct( | ||
public string $motto, | ||
public bool $userWallActive, | ||
) { | ||
} | ||
|
||
public static function fromRequest(UpdateProfileRequest $request): self | ||
{ | ||
/** @var User $user */ | ||
$user = $request->user(); | ||
|
||
return new self( | ||
motto: $request->motto ?? $user->Motto, | ||
userWallActive: $request->userWallActive ?? $user->UserWallActive, | ||
); | ||
} | ||
|
||
public function toArray(): array | ||
{ | ||
return [ | ||
'Motto' => $this->motto, | ||
'UserWallActive' => $this->userWallActive, | ||
]; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace App\Community\Data; | ||
|
||
use App\Community\Requests\UpdateWebsitePrefsRequest; | ||
use Spatie\LaravelData\Data; | ||
|
||
class UpdateWebsitePrefsData extends Data | ||
{ | ||
public function __construct( | ||
public int $websitePrefs, | ||
) { | ||
} | ||
|
||
public static function fromRequest(UpdateWebsitePrefsRequest $request): self | ||
{ | ||
return new self( | ||
websitePrefs: $request->websitePrefs, | ||
); | ||
} | ||
|
||
public function toArray(): array | ||
{ | ||
return [ | ||
'websitePrefs' => $this->websitePrefs, | ||
]; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace App\Community\Requests; | ||
|
||
use App\Models\User; | ||
use Illuminate\Foundation\Http\FormRequest; | ||
|
||
class ResetConnectApiKeyRequest extends FormRequest | ||
{ | ||
public function authorize(): bool | ||
{ | ||
/** @var User $user */ | ||
$user = $this->user(); | ||
|
||
return $user->can('manipulateApiKeys', $user); | ||
} | ||
|
||
public function rules(): array | ||
{ | ||
return []; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace App\Community\Requests; | ||
|
||
use App\Models\User; | ||
use Illuminate\Foundation\Http\FormRequest; | ||
|
||
class ResetWebApiKeyRequest extends FormRequest | ||
{ | ||
public function authorize(): bool | ||
{ | ||
/** @var User $user */ | ||
$user = $this->user(); | ||
|
||
return $user->can('manipulateApiKeys', $user); | ||
} | ||
|
||
public function rules(): array | ||
{ | ||
return []; | ||
} | ||
} |
Oops, something went wrong.