<?php

namespace App\Http\Middleware\JWT;

use Tymon\JWTAuth\Http\Middleware\BaseMiddleware as JWTBaseMiddleware;
use Illuminate\Http\Request;
use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;
use Tymon\JWTAuth\Exceptions\JWTException;

abstract class BaseMiddleware extends JWTBaseMiddleware
{
    /**
     * Check the request for the presence of a token.
     *
     * @param  \Illuminate\Http\Request  $request
     *
     * @throws \Symfony\Component\HttpKernel\Exception\BadRequestHttpException
     *
     * @return void
     */
    public function checkForToken(Request $request)
    {
        if (! $this->auth->parser()->setRequest($request)->hasToken()) {
            throw new UnauthorizedHttpException('jwt-auth', trans('auth.not_logged'));
        }
    }

    /**
     * Attempt to authenticate a user via the token in the request.
     *
     * @param  \Illuminate\Http\Request  $request
     *
     * @throws \Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException
     *
     * @return void
     */
    public function authenticate(Request $request)
    {
        $this->checkForToken($request);

        try {
            if (! $this->auth->parseToken()->authenticate()) {
                throw new UnauthorizedHttpException('jwt-auth', trans('auth.not_logged'));
            }
        } catch (JWTException $e) {
            throw new UnauthorizedHttpException('jwt-auth', trans('auth.not_logged'), $e, $e->getCode());
        }
    }
}
