code: def load_frontends(config, callback, internal_attributes):
      
      frontend_modules = _load_plugins(config.get("CUSTOM_PLUGIN_MODULE_PATHS"), config["FRONTEND_MODULES"],
                                       frontend_filter, config["BASE"], internal_attributes, callback)
      logger.info("Setup frontends: %s" % [frontend.name for frontend in frontend_modules])
      return frontend_modules
docs: Load all frontend modules specified in the config
  
      :type config: satosa.satosa_config.SATOSAConfig
      :type callback:
      (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response
      :type internal_attributes: dict[string, dict[str, str | list[str]]]
      :rtype: Sequence[satosa.frontends.base.FrontendModule]
  
      :param config: The configuration of the satosa proxy
      :param callback: Function that will be called by the frontend after the authentication request
      has been processed.
      :return: A list of frontend modules