%PDF- %PDF-
Direktori : /var/www/html/klinisol/klinisol-api/app/Http/Controllers/Api/v1/ |
Current File : /var/www/html/klinisol/klinisol-api/app/Http/Controllers/Api/v1/AuthController.php |
<?php namespace App\Http\Controllers\Api\v1; use App\Http\Controllers\Api\ApiController; use App\Http\Requests\Api\v1\User\ChangePasswordRequest; use App\Http\Requests\Api\v1\User\UpdateUserRequest; use App\Models\Doctor; use App\Models\Role; use App\Models\User; use App\Transformers\DoctorTransformer; use App\Transformers\UserTransformer; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; use Laravel\Passport\Bridge\AccessToken; class AuthController extends ApiController { /** * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function login(Request $request) { if (Auth::attempt(['email' => $request->get('email'), 'password' => $request->get('password')])) { /** @var User $user */ $user = Auth::user(); if (!$user->is_enabled) { return response()->json(['error' => 'Account is disabled, contact your system administrator for more information.'], 401); } if ($user->roles() ->count() === 0) { return response()->json(['error' => 'Unauthorised'], 401); } $accessToken = $user->createToken('api')->accessToken; return response()->json([ 'token' => $accessToken, ], 200); } else { return response()->json(['error' => 'We couldn\'t find any account matching your credentials!'], 401); } } /** * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function doctorLogin(Request $request) { if (Auth::attempt(['email' => $request->get('email'), 'password' => $request->get('password')])) { /** @var User $user */ $user = Auth::user(); if (!$user->is_enabled) { return response()->json(['error' => 'Account is disabled, contact your system administrator for more information.'], 401); } if ($user->roles() ->count() === 0) { return response()->json(['error' => 'Unauthorised'], 401); } $accessToken = $user->createToken('api')->accessToken; return response()->json([ 'token' => $accessToken, ], 200); } else { return response()->json(['error' => 'We couldn\'t find any account matching your credentials!'], 401); } } /** * @return \Illuminate\Http\JsonResponse */ public function me() { $user = auth() ->guard('api') ->user(); return $this->item($user, new UserTransformer()); } /** * @return \Illuminate\Http\JsonResponse */ public function doctorMe() { $user = auth() ->guard('api') ->user(); $doctor = Doctor::query() ->where('id', '=', $user->id) ->whereHas('roles', function ($q) { $q->whereIn('name', [ Role::DOCTOR, ]); }) ->firstOrFail(); return $this->item($doctor, new DoctorTransformer()); } /** * @param ChangePasswordRequest $request * @return \Illuminate\Http\JsonResponse */ public function changePassword(ChangePasswordRequest $request) { /** @var User $user */ $user = auth() ->guard('api') ->user(); $user->updatePassword($request->get('password')); return $this->item($user, new UserTransformer()); } /** * @param ChangePasswordRequest $request * @return \Illuminate\Http\JsonResponse */ public function doctorChangePassword(ChangePasswordRequest $request) { /** @var User $user */ $user = auth() ->guard('api') ->user(); $doctor = Doctor::query() ->where('id', '=', $user->id) ->whereHas('roles', function ($q) { $q->whereIn('name', [ Role::DOCTOR, ]); }) ->firstOrFail(); $doctor->updatePassword($request->get('password')); return $this->item($doctor, new DoctorTransformer()); } /** * @param UpdateUserRequest $request * @param $id * @return \Illuminate\Http\JsonResponse */ public function updateProfile(UpdateUserRequest $request) { $user = auth() ->guard('api') ->user(); $user->update($request->only(['name', 'surname'])); return $this->item($user, new UserTransformer()); } /** * @param UpdateUserRequest $request * @return \Illuminate\Http\JsonResponse */ public function doctorUpdateProfile(UpdateUserRequest $request) { $user = auth() ->guard('api') ->user(); $doctor = Doctor::query() ->where('id', '=', $user->id) ->whereHas('roles', function ($q) { $q->whereIn('name', [ Role::DOCTOR, ]); }) ->firstOrFail(); $doctor->update($request->only(['name', 'surname'])); return $this->item($doctor, new DoctorTransformer()); } public function logout() { if (Auth::check()) { /** @var AccessToken $accessToken */ $accessToken = Auth::user() ->token(); DB::table('oauth_refresh_tokens') ->where('access_token_id', $accessToken->id) ->update([ 'revoked' => true, ]); $accessToken->revoke(); return response()->json(null, 204); } } }