Files
goma-gateway/internal/middleware.go
2024-11-24 06:04:55 +01:00

80 lines
2.0 KiB
Go

package pkg
import (
"errors"
"fmt"
"gopkg.in/yaml.v3"
"os"
"slices"
"strings"
)
func getMiddleware(rules []string, middlewares []Middleware) (Middleware, error) {
for _, m := range middlewares {
if slices.Contains(rules, m.Name) {
return m, nil
}
continue
}
return Middleware{}, errors.New("middleware not found with name: [" + strings.Join(rules, ";") + "]")
}
func doesExist(tyName string) bool {
middlewareList := []string{BasicAuth, JWTAuth, AccessMiddleware}
return slices.Contains(middlewareList, tyName)
}
func GetMiddleware(rule string, middlewares []Middleware) (Middleware, error) {
for _, m := range middlewares {
if strings.Contains(rule, m.Name) {
return m, nil
}
continue
}
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
}