%PDF- %PDF-
Direktori : /var/www/html/shaban/duassis/api/app/Http/Controllers/Api/v1/ |
Current File : //var/www/html/shaban/duassis/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\CreateUserRequest; use App\Jobs\SubscribeUserToAllCategoriesJob; use App\Models\Device; use App\Models\Provider; use App\Models\Role; use App\Models\User; use App\Transformers\UserTransformer; use Facebook\Exceptions\FacebookSDKException; use Facebook\Facebook; use Google_Client; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; use Laravel\Passport\Bridge\AccessToken; use Spatie\MediaLibrary\Exceptions\FileCannotBeAdded; class AuthController extends ApiController { 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); } $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 register(CreateUserRequest $request) { DB::beginTransaction(); try { /** @var User $user */ $user = User::query() ->create($request->only(['display_name', 'email', 'password'])); $role = Role::findByName(Role::PLAYER, 'api'); $user->roles() ->attach($role); $user->save(); DB::commit(); $accessToken = $user->createToken('api')->accessToken; return response()->json([ 'token' => $accessToken, ], 200); } catch (\Exception $exception) { DB::rollBack(); return $this->wrongArguments([ 'message' => $exception->getMessage(), ]); } } 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()) { auth() ->guard('api') ->user() ->provider() ->delete(); /** @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 Request $request * @return JsonResponse * @throws FileCannotBeAdded */ public function facebook(Request $request) { try { $fb = new Facebook([ 'app_id' => config('fb.app_id'), 'app_secret' => config('fb.app_secret'), 'default_graph_version' => 'v3.3', ]); $response = $fb->get('/me?fields=id,first_name,last_name,email,picture.type(large)', $request->get('token')); $fbUser = $response->getGraphUser(); /** @var User $user */ $user = User::query() ->updateOrCreate([ 'email' => $fbUser['email'], ], [ 'display_name' => $fbUser['first_name'] . ' ' . $fbUser['last_name'], 'email' => $fbUser['email'], 'is_confirmed' => true, 'is_enabled' => true, 'password' => '', ]); $user->provider() ->updateOrCreate([ 'user_id' => $user->id, ], [ 'social' => Provider::FACEBOOK, 'token' => $request->get('token'), ]); $user->setAvatarFromLink($fbUser['picture']['url']); $user->addDevice($request->header('uuid')); return response()->json([ 'token' => $user->createToken('api')->accessToken, ], 200); } catch (FacebookSDKException $e) { return $this->unauthorized([ 'message' => $e->getMessage(), ]); } } public function google(Request $request) { $clientId = env('GOOGLE_ANDROID_CLIENT_ID'); if ($request->header('x-platform') !== Device::ANDROID) { $clientId = env('GOOGLE_IOS_CLIENT_ID'); } try { $client = new Google_Client(['client_id' => $clientId]); $googleData = $client->verifyIdToken($request->get('token')); if ($googleData) { /** @var User $user */ $user = User::query() ->updateOrCreate([ 'email' => $googleData['email'], ], [ 'display_name' => $googleData['name'], 'email' => $googleData['email'], 'is_confirmed' => true, 'is_enabled' => true, 'password' => '', ]); $user->provider() ->updateOrCreate([ 'user_id' => $user->id, ], [ 'social' => Provider::GOOGLE, 'token' => $request->get('token'), ]); $url = explode('=', $googleData['picture']); $url = head($url) . '=s400'; $user->setAvatarFromLink($url); $user->addDevice($request->header('uuid')); return response()->json([ 'token' => $user->createToken('api')->accessToken, ], 200); } return $this->unauthorized([ 'message' => 'Invalid token', ]); } catch (\Exception $e) { return $this->unauthorized([ 'message' => $e->getMessage(), ]); } } public function check(Request $request) { $email = $request->email; $emailCheck = User::query() ->where('email', $email) ->exists(); return response()->json(['exists' => $emailCheck], 200); } }