mirror of
				https://github.com/pelican-dev/panel.git
				synced 2025-11-04 10:56:52 +01:00 
			
		
		
		
	Add api endpoint for updating username (#1826)
This commit is contained in:
		
							parent
							
								
									6d83c6d908
								
							
						
					
					
						commit
						1f26750a2a
					
				@ -5,6 +5,7 @@ namespace App\Http\Controllers\Api\Client;
 | 
			
		||||
use App\Facades\Activity;
 | 
			
		||||
use App\Http\Requests\Api\Client\Account\UpdateEmailRequest;
 | 
			
		||||
use App\Http\Requests\Api\Client\Account\UpdatePasswordRequest;
 | 
			
		||||
use App\Http\Requests\Api\Client\Account\UpdateUsernameRequest;
 | 
			
		||||
use App\Services\Users\UserUpdateService;
 | 
			
		||||
use App\Transformers\Api\Client\UserTransformer;
 | 
			
		||||
use Illuminate\Auth\AuthManager;
 | 
			
		||||
@ -36,6 +37,25 @@ class AccountController extends ClientApiController
 | 
			
		||||
            ->toArray();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Update username
 | 
			
		||||
     *
 | 
			
		||||
     * Update the authenticated user's username.
 | 
			
		||||
     */
 | 
			
		||||
    public function updateUsername(UpdateUsernameRequest $request): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
        $original = $request->user()->username;
 | 
			
		||||
        $this->updateService->handle($request->user(), $request->validated());
 | 
			
		||||
 | 
			
		||||
        if ($original !== $request->input('username')) {
 | 
			
		||||
            Activity::event('user:account.username-changed')
 | 
			
		||||
                ->property(['old' => $original, 'new' => $request->input('username')])
 | 
			
		||||
                ->log();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return new JsonResponse([], Response::HTTP_NO_CONTENT);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Update email
 | 
			
		||||
     *
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,38 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace App\Http\Requests\Api\Client\Account;
 | 
			
		||||
 | 
			
		||||
use App\Exceptions\Http\Base\InvalidPasswordProvidedException;
 | 
			
		||||
use App\Http\Requests\Api\Client\ClientApiRequest;
 | 
			
		||||
use App\Models\User;
 | 
			
		||||
use Illuminate\Container\Container;
 | 
			
		||||
use Illuminate\Contracts\Hashing\Hasher;
 | 
			
		||||
 | 
			
		||||
class UpdateUsernameRequest extends ClientApiRequest
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @throws InvalidPasswordProvidedException
 | 
			
		||||
     */
 | 
			
		||||
    public function authorize(): bool
 | 
			
		||||
    {
 | 
			
		||||
        if (!parent::authorize()) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $hasher = Container::getInstance()->make(Hasher::class);
 | 
			
		||||
 | 
			
		||||
        // Verify password matches when changing password or email.
 | 
			
		||||
        if (!$hasher->check($this->input('password'), $this->user()->password)) {
 | 
			
		||||
            throw new InvalidPasswordProvidedException(trans('validation.internal.invalid_password'));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function rules(): array
 | 
			
		||||
    {
 | 
			
		||||
        $rules = User::getRulesForUpdate($this->user());
 | 
			
		||||
 | 
			
		||||
        return ['username' => $rules['username']];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -21,6 +21,7 @@ return [
 | 
			
		||||
    ],
 | 
			
		||||
    'user' => [
 | 
			
		||||
        'account' => [
 | 
			
		||||
            'username-changed' => 'Changed username from <b>:old</b> to <b>:new</b>',
 | 
			
		||||
            'email-changed' => 'Changed email from <b>:old</b> to <b>:new</b>',
 | 
			
		||||
            'password-changed' => 'Changed password',
 | 
			
		||||
        ],
 | 
			
		||||
 | 
			
		||||
@ -21,6 +21,7 @@ Route::get('/permissions', [Client\ClientController::class, 'permissions']);
 | 
			
		||||
Route::prefix('/account')->middleware(AccountSubject::class)->group(function () {
 | 
			
		||||
    Route::get('/', [Client\AccountController::class, 'index'])->name('api:client.account');
 | 
			
		||||
 | 
			
		||||
    Route::put('/username', [Client\AccountController::class, 'updateUsername'])->name('api:client.account.update-username');
 | 
			
		||||
    Route::put('/email', [Client\AccountController::class, 'updateEmail'])->name('api:client.account.update-email');
 | 
			
		||||
    Route::put('/password', [Client\AccountController::class, 'updatePassword'])->name('api:client.account.update-password');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user