feat: add load additional middleware from a defined directory
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user