Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
85.00% covered (warning)
85.00%
17 / 20
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
AuthenticateWithToken
85.00% covered (warning)
85.00%
17 / 20
0.00% covered (danger)
0.00%
0 / 1
9.27
0.00% covered (danger)
0.00%
0 / 1
 handle
85.00% covered (warning)
85.00%
17 / 20
0.00% covered (danger)
0.00%
0 / 1
9.27
1<?php
2
3namespace App\Http\Middleware;
4
5use App\Models\TblAuthUsers;
6use App\Models\TblUsers;
7use Carbon\Carbon;
8use Closure;
9use Illuminate\Http\Request;
10
11class AuthenticateWithToken
12{
13    public function handle(Request $request, Closure $next)
14    {
15        $token = $request->bearerToken();
16
17        if (! $token) {
18            return response(['error' => 'Token expired or invalid'], 401);
19        }
20
21        $user = TblUsers::where('api_token', $token)->first();
22        $authUser = TblAuthUsers::where('api_token', $token)->first();
23
24        $validUser = null;
25
26        if ($user && $user->token_expires_at > Carbon::now()) {
27            $validUser = $user;
28        } elseif ($authUser && $authUser->token_expires_at > Carbon::now()) {
29            $validUser = $authUser;
30        }
31
32        if (! $validUser) {
33            return response(['error' => 'Token expired or invalid'], 401);
34        }
35
36        // Set the authenticated user for the request
37        $request->setUserResolver(fn() => $validUser);
38
39        // Derive role and user identity from DB — never trust client-supplied headers
40        $request->headers->set('backend-user-id', (string) $validUser->id);
41
42        if (!empty($validUser->is_commercial)) {
43            $request->headers->set('backend-role', 'commercial');
44        } elseif ((int) $validUser->role_id === (int) config('services.role_ids.customer_service')) {
45            $request->headers->set('backend-role', 'customer_service');
46        } else {
47            $request->headers->remove('backend-role');
48        }
49
50        return $next($request);
51    }
52}