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;
|
2021-01-31 17:21:57 +00:00
|
|
|
use App\Services\TokenManager;
|
2024-03-19 22:48:12 +00:00
|
|
|
use App\Services\UserService;
|
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;
|
2024-02-25 19:32:53 +00:00
|
|
|
use Illuminate\Http\Response;
|
2024-03-19 22:48:12 +00:00
|
|
|
use Illuminate\Support\Str;
|
2021-05-21 17:14:00 +00:00
|
|
|
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(
|
2024-04-18 14:36:28 +00:00
|
|
|
private readonly Hasher $hash,
|
|
|
|
private readonly UserService $userService,
|
|
|
|
private readonly TokenManager $tokenManager,
|
|
|
|
private readonly ?Authenticatable $user
|
2022-06-10 10:47:46 +00:00
|
|
|
) {
|
2018-08-22 19:46:36 +00:00
|
|
|
}
|
|
|
|
|
2020-09-13 22:04:07 +00:00
|
|
|
public function show()
|
2017-08-27 15:53:17 +00:00
|
|
|
{
|
2022-06-10 10:47:46 +00:00
|
|
|
return UserResource::make($this->user);
|
2017-08-27 15:53:17 +00:00
|
|
|
}
|
|
|
|
|
2016-05-30 05:50:59 +00:00
|
|
|
public function update(ProfileUpdateRequest $request)
|
|
|
|
{
|
2024-02-25 19:32:53 +00:00
|
|
|
static::disableInDemo(Response::HTTP_NO_CONTENT);
|
2019-11-06 11:33:40 +00:00
|
|
|
|
2024-03-30 16:49:25 +00:00
|
|
|
// If the user is not using SSO, we need to verify their current password.
|
|
|
|
throw_if(
|
|
|
|
!$this->user->is_sso && !$this->hash->check($request->current_password, $this->user->password),
|
2021-05-21 17:14:00 +00:00
|
|
|
ValidationException::withMessages(['current_password' => 'Invalid current password'])
|
|
|
|
);
|
|
|
|
|
2024-03-19 22:48:12 +00:00
|
|
|
$user = $this->userService->updateUser(
|
|
|
|
user: $this->user,
|
|
|
|
name: $request->name,
|
|
|
|
email: $request->email,
|
|
|
|
password: $request->new_password,
|
|
|
|
avatar: Str::startsWith($request->avatar, 'data:') ? $request->avatar : null
|
|
|
|
);
|
2020-09-13 22:04:07 +00:00
|
|
|
|
2024-03-19 22:48:12 +00:00
|
|
|
$response = UserResource::make($user)->response();
|
2022-06-10 10:47:46 +00:00
|
|
|
|
|
|
|
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
|
|
|
}
|
2021-01-31 17:21:57 +00:00
|
|
|
|
2022-06-10 10:47:46 +00:00
|
|
|
return $response;
|
2016-05-30 05:50:59 +00:00
|
|
|
}
|
|
|
|
}
|