feat: add load additional middleware from a defined directory

This commit is contained in:
Jonas Kaninda
2024-11-21 16:52:08 +01:00
parent 9d02bfa2bc
commit 7369d5eebf
6 changed files with 86 additions and 18 deletions

View File

@@ -2,6 +2,9 @@ package pkg
import (
"errors"
"fmt"
"gopkg.in/yaml.v3"
"os"
"slices"
"strings"
)
@@ -32,3 +35,45 @@ func GetMiddleware(rule string, middlewares []Middleware) (Middleware, error) {
return Middleware{}, errors.New("no middlewares found with name " + rule)
}
// loadExtraMiddlewares loads additional middlewares
func loadExtraMiddlewares(routePath string) ([]Middleware, error) {
yamlFiles, err := loadExtraFiles(routePath)
if err != nil {
return nil, fmt.Errorf("error loading extra files: %v", err)
}
var extraMiddlewares []Middleware
for _, yamlFile := range yamlFiles {
buf, err := os.ReadFile(yamlFile)
if err != nil {
return nil, fmt.Errorf("error loading extra file: %v", err)
}
ex := &ExtraMiddleware{}
err = yaml.Unmarshal(buf, ex)
if err != nil {
return nil, fmt.Errorf("in file %q: %w", ConfigFile, err)
}
extraMiddlewares = append(extraMiddlewares, ex.Middlewares...)
}
if len(extraMiddlewares) == 0 {
return nil, fmt.Errorf("no extra middleware found")
}
return extraMiddlewares, nil
}
// findDuplicateMiddlewareNames finds duplicated middleware name
func findDuplicateMiddlewareNames(middlewares []Middleware) []string {
// Create a map to track occurrences of names
nameMap := make(map[string]int)
var duplicates []string
for _, mid := range middlewares {
nameMap[mid.Name]++
// If the count is ==2, it's a duplicate
if nameMap[mid.Name] == 2 {
duplicates = append(duplicates, mid.Name)
}
}
return duplicates
}