%PDF- %PDF-
Direktori : /var/www/html/geotechnics/api/app/Http/Controllers/Api/v1/ |
Current File : /var/www/html/geotechnics/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\Users\ChangePasswordRequest; use App\Http\Requests\Api\v1\Users\ConfirmAccountRequest; use App\Http\Requests\Api\v1\Users\RegisterRequest; use App\Models\Subscription; use App\Models\User; use App\Notifications\VerificationEmail; 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 { public function register(RegisterRequest $request) { DB::beginTransaction(); try { /** @var User $user */ $user = User::query() ->create([ 'email' => $request->get('email'), 'password' => $request->get('password'), 'confirmation_code' => User::generateRandomToken(30), 'is_enabled' => true, ]); $user->companyProfile() ->updateOrCreate([ 'name' => $request->get('name'), 'company' => $request->get('company'), 'email' => $request->get('email'), ]); /** @var Subscription $subscription */ Subscription::query() ->updateOrCreate([ 'email' => $request->get('email'), ], [ 'email' => $request->get('email'), 'is_subscribed' => true, ]); DB::commit(); $user->notify(new VerificationEmail); return $this->item($user, new UserTransformer); } catch (\Exception $e) { DB::rollBack(); return $this->wrongArguments([ 'message' => $e->getMessage(), ]); } } 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_confirmed) { return response()->json(['error' => 'Account is not confirmed yet.'], 401); } if (!$user->is_enabled && $user->roles() ->count() > 0) { return response()->json(['error' => 'Account is disabled, contact your system administrator for more information.'], 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); } } public function me() { $user = auth() ->guard('api') ->user(); return $this->item($user, new UserTransformer); } public function changePassword(ChangePasswordRequest $request) { /** @var User $user */ $user = auth() ->guard('api') ->user(); $user->password = $request->get('password'); $user->save(); return $this->item($user, new UserTransformer); } 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); } } /** * @param ConfirmAccountRequest $request */ public function confirmAccount(ConfirmAccountRequest $request) { /** @var User $user */ $user = User::getUserByConfirmationCode($request->get('token')); $user->confirmAccount(true); } public function getCounters() { $clientsToConfirm = User::query() ->where('is_enabled', false) ->whereHas('companyProfile') ->count(); return response()->json([ 'clients_to_confirm' => $clientsToConfirm, ], 200); } }