koel/app/Http/Controllers/API/ProfileController.php

60 lines
1.6 KiB
PHP
Raw Normal View History

2016-05-30 05:50:59 +00:00
<?php
namespace App\Http\Controllers\API;
2022-07-29 06:47:10 +00:00
use App\Http\Controllers\Controller;
2016-05-30 05:50:59 +00:00
use App\Http\Requests\API\ProfileUpdateRequest;
2022-06-10 10:47:46 +00:00
use App\Http\Resources\UserResource;
2020-09-13 22:04:07 +00:00
use App\Models\User;
use App\Services\TokenManager;
2020-09-13 22:04:07 +00:00
use Illuminate\Contracts\Auth\Authenticatable;
2022-06-10 10:47:46 +00:00
use Illuminate\Contracts\Hashing\Hasher;
use Illuminate\Validation\ValidationException;
2016-05-30 05:50:59 +00:00
class ProfileController extends Controller
{
2022-06-10 10:47:46 +00:00
/** @param User $user */
public function __construct(
private Hasher $hash,
private TokenManager $tokenManager,
private ?Authenticatable $user
) {
2018-08-22 19:46:36 +00:00
}
2020-09-13 22:04:07 +00:00
public function show()
{
2022-06-10 10:47:46 +00:00
return UserResource::make($this->user);
}
2016-05-30 05:50:59 +00:00
public function update(ProfileUpdateRequest $request)
{
if (config('koel.misc.demo')) {
2022-06-10 10:47:46 +00:00
return response()->noContent();
}
throw_unless(
2022-06-10 10:47:46 +00:00
$this->hash->check($request->current_password, $this->user->password),
ValidationException::withMessages(['current_password' => 'Invalid current password'])
);
2016-05-30 05:50:59 +00:00
$data = $request->only('name', 'email');
if ($request->new_password) {
$data['password'] = $this->hash->make($request->new_password);
2016-05-30 05:50:59 +00:00
}
2022-06-10 10:47:46 +00:00
$this->user->update($data);
2020-09-13 22:04:07 +00:00
2022-06-10 10:47:46 +00:00
$response = UserResource::make($this->user)->response();
if ($request->new_password) {
2022-11-16 17:57:38 +00:00
$response->header(
'Authorization',
$this->tokenManager->refreshApiToken($request->bearerToken() ?: '')->plainTextToken
);
2022-06-10 10:47:46 +00:00
}
2022-06-10 10:47:46 +00:00
return $response;
2016-05-30 05:50:59 +00:00
}
}