import 'package:shelf/shelf.dart'; import 'package:dart_jsonwebtoken/dart_jsonwebtoken.dart'; import 'package:dotenv/dotenv.dart'; class AuthMiddleware { final Future Function(Request, String) handler; AuthMiddleware(this.handler); Future call(Request request) async { final authorization = request.headers['authorization']; if (authorization == null || !authorization.startsWith('Bearer ')) { return Response(401, body: 'Authorization header missing or invalid'); } final token = authorization.substring(7); try { final dotenv = DotEnv(); final secret = dotenv['JWT_SECRET'] ?? ''; final jwt = JWT.verify(token, SecretKey(secret)); final payload = jwt.payload; final login = payload['login'] as String; return handler(request, login); } on JWTExpiredException { return Response(401, body: 'Token expired'); } on JWTException { return Response(401, body: 'Invalid token'); } } }