• File: MerchantController.php
  • Full Path: /var/www/imalipartnersapi/app/Http/Controllers/Api/MerchantController.php
  • Date Modified: 02/07/2023 8:01 PM
  • File size: 2.62 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Imali\MerchantAccount;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Route;
use Laravel\Passport\Client;
use DB;

class MerchantController extends Controller
{
    private $client;

    public function __construct()
    {
        $this->client = Client::find(8);
    }

    public function loggedUser(Request $request)
    {
        $user = MerchantAccount::query()
            ->where('id', $request->user()->id)
            ->first();
        return response()->json($user);
    }

    public function login(Request $request)
    {
        $this->validate($request, [
            'email' => 'required',
            'password' => 'required'
        ], [
            'email.required' => 'O Campo Email é Obrigatório',
            'password.required' => 'O Campo Senha é Obrigatório',
        ]);

        $params = [
            'grant_type' => 'password',
            'client_id' => $this->client->id,
            'client_secret' => $this->client->secret,
            'username' => request('email'),
            'password' => request('password'),
            'provider' => 'merchant_accounts',
            'scope' => '*'
        ];

        $request->request->add($params);

        Config::set('auth.guards.api.provider', $params['provider']);

        $proxy = Request::create('oauth/token', 'POST');

        return Route::dispatch($proxy);

    }

    public function refresh(Request $request)
    {
        $this->validate($request, [
            'refresh_token' => 'required'
        ]);

        $params = [
            'grant_type' => 'refresh_token',
            'refresh_token' => request('refresh_token'),
            'client_id' => $this->client->id,
            'client_secret' => $this->client->secret,
            'provider' => 'merchant_accounts',
            'username' => request('email'),
            'password' => request('password'),
        ];

        $request->request->add($params);
        Config::set('auth.guards.api.provider', $params['provider']);

        $proxy = Request::create('oauth/token', 'POST');

        return Route::dispatch($proxy);

    }

    public function logout(Request $request)
    {

        $accessToken = Auth::user()->token();

        DB::table('oauth_refresh_tokens')->where('access_token_id', $accessToken->id)
            ->update(['revoked' => true]);

        $accessToken->revoke();

        return response()->json([], 204);
    }
}