Currency Api Dashboard

TypeScript

Modern currency exchange rate dashboard with real-time market data, conversion tools, analytics, historical trends, and responsive admin interface.

Stars
18
Forks
1
Downloads
N/A
Open Issues
0
Files main

Repository Files

Loading file structure...
app/Http/Middleware/ApiMiddleware.php
<?php

namespace App\Http\Middleware;

use App\Models\ApiLog;
use App\Models\Tokens;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use Symfony\Component\HttpFoundation\Response;

class ApiMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  Closure(Request): (Response)  $next
     */
    public function handle(Request $request, Closure $next): Response
    {
        $bearerToken = $request->bearerToken();
        if (! $bearerToken) {
            return response()->json([
                'status' => false,
                'message' => 'Sorry, But you forgot to provide a token.',
            ], 401);
        }
        $token = Cache::remember('TOKEN:'.$bearerToken, 60 * 60 * 24, function () use ($bearerToken) {
            return Tokens::where('token', $bearerToken)->where('active', true)->first();
        });
        if (empty($token)) {
            return response()->json([
                'status' => false,
                'message' => 'Sorry, But your token is not valid or expired. Please request a new token or check your token.',
            ], 401);
        }
        $request->attributes->set('api_token', $token);

        return $next($request);
    }

    /**
     * Perform any tasks after the response has been sent to the browser.
     */
    public function terminate(Request $request, Response $response): void
    {
        $token = $request->attributes->get('api_token');
        if ($token) {
            ApiLog::create([
                'token_id' => $token->id,
                'endpoint' => $request->path(),
                'method' => $request->method(),
                'ip_address' => $request->ip(),
                'status_code' => $response->getStatusCode(),
            ]);
        }
    }
}