createJWTValidationMiddleware static method

Future<List<Middleware>> createJWTValidationMiddleware(
  1. Type controllerType,
  2. String methodName
)

Detecta y procesa anotaciones JWT en controladores y endpoints

controllerType - Tipo del controlador a analizar methodName - Nombre del método/endpoint a analizar

Retorna lista de middlewares JWT que deben aplicarse a este endpoint

Implementation

static Future<List<Middleware>> createJWTValidationMiddleware(
  Type controllerType,
  String methodName,
) async {
  final middlewares = <Middleware>[];

  try {
    Log.d('Creating JWT validation middleware for: $controllerType.$methodName');

    // Verificar anotación @JWTPublic primero (mayor prioridad)
    if (_hasJWTPublicAnnotation(controllerType, methodName)) {
      Log.i('🔓 Public endpoint detected: $controllerType.$methodName - No JWT validation required');
      return middlewares; // Sin middleware de validación
    }

    // Obtener validadores del método (endpoint-level)
    final endpointValidators = _getJWTEndpointValidators(controllerType, methodName);

    // Si hay validadores a nivel de endpoint, usarlos (sobrescriben controller)
    if (endpointValidators != null) {
      Log.i('🔐 Endpoint-level JWT validation: $controllerType.$methodName');
      middlewares.add(_createValidationMiddleware(
        endpointValidators.validators,
        endpointValidators.requireAll,
        '$controllerType.$methodName'
      ));
      return middlewares;
    }

    // Obtener validadores del controlador (controller-level)
    final controllerValidators = _getJWTControllerValidators(controllerType);

    if (controllerValidators != null) {
      Log.i('🔐 Controller-level JWT validation: $controllerType.$methodName');
      middlewares.add(_createValidationMiddleware(
        controllerValidators.validators,
        controllerValidators.requireAll,
        '$controllerType.$methodName'
      ));
      return middlewares;
    }

    // Sin validación JWT configurada
    Log.d('🔓 No JWT validation configured for: $controllerType.$methodName');
    return middlewares;

  } catch (e, stackTrace) {
    Log.e('Error creating JWT validation middleware for $controllerType.$methodName: $e');
    return middlewares;
  }
}