%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/shaban/duassis/api/app/Http/Controllers/Api/v1/
Upload File :
Create Path :
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);
    }
}

Zerion Mini Shell 1.0