getAuthMiddleware function

Handler Function(Handler innerHandler) getAuthMiddleware(
  1. Permission requiredPermission
)

Implementation

Handler Function(Handler innerHandler) getAuthMiddleware(
    Permission requiredPermission) {
  final service = tokenService;
  return (Handler innerHandler) {
    return (Request request) {
      if (service == null) {
        return innerHandler(request);
      }
      final authHeader = request.headers['Authorization'];
      if (authHeader == null || !authHeader.startsWith('Bearer ')) {
        return Response.unauthorized('Missing or invalid Authorization header',
            headers: {
              'WWW-Authenticate': 'Bearer',
            });
      }
      final token = authHeader.substring(7);
      final result = service.validateToken(token);
      if (result.isError) {
        print("⚠️ Invalid token: ${result.asError!.error}");
        return Response.forbidden('Invalid token: ${result.asError!.error}');
      }
      final principal = result.asValue!.value;
      final permissions = principal.permissions;
      if (!permissions.contains(requiredPermission)) {
        print("⚠️ Insufficient permissions for '${principal.issuedFor}': "
            "have ${permissions.join(", ")}. Need $requiredPermission");
        return Response.forbidden(
            'Insufficient permissions. Required: $requiredPermission');
      }
      final issuedFor = principal.issuedFor;
      print("✅ Valid token for '$issuedFor'");
      final updatedRequest = request.change(
        context: {
          ...request.context,
          'authorName': issuedFor,
        },
      );
      return innerHandler(updatedRequest);
    };
  };
}