func parseMiddlewareConfig()

in codegen/gateway.go [1022:1083]


func parseMiddlewareConfig(
	middlewareConfigDir string,
	configDirName string,
) (map[string]*MiddlewareSpec, error) {
	specMap := map[string]*MiddlewareSpec{}
	if middlewareConfigDir == "" {
		return specMap, nil
	}
	fullMiddlewareDir := filepath.Join(configDirName, middlewareConfigDir)

	files, err := ioutil.ReadDir(fullMiddlewareDir)

	if err != nil {
		return nil, errors.Wrapf(
			err,
			"Error reading middleware config directory %q",
			fullMiddlewareDir,
		)
	}

	for _, file := range files {
		if !file.IsDir() {
			continue
		}

		instanceConfig := filepath.Join(
			fullMiddlewareDir, file.Name(), "middleware-config.yaml")
		if _, err := os.Stat(instanceConfig); os.IsNotExist(err) {
			// Cannot find yaml file, use json file instead
			instanceConfig = filepath.Join(
				fullMiddlewareDir, file.Name(), "middleware-config.json")
		}

		bytes, err := ioutil.ReadFile(instanceConfig)
		if os.IsNotExist(err) {
			fmt.Printf("Could not read config file for middleware directory \"%s\" skipping...\n", file.Name())
			continue
		} else if err != nil {
			return nil, errors.Wrapf(
				err, "Cannot read middleware config yaml: %s",
				instanceConfig,
			)
		}
		var mid MiddlewareConfig
		err = yaml.Unmarshal(bytes, &mid)
		if err != nil {
			return nil, errors.Wrapf(
				err, "Cannot parse yaml for middleware config yaml: %s",
				instanceConfig,
			)
		}
		err = mid.Validate(configDirName)
		if err != nil {
			return nil, errors.Wrapf(
				err, "Cannot validate middleware: %v",
				mid,
			)
		}
		specMap[mid.Name] = newMiddlewareSpec(&mid)
	}
	return specMap, nil
}