mirror of
https://github.com/steveiliop56/tinyauth.git
synced 2025-10-28 04:35:40 +00:00
90 lines
1.9 KiB
Go
90 lines
1.9 KiB
Go
package decoders
|
|
|
|
import (
|
|
"reflect"
|
|
"strings"
|
|
"tinyauth/internal/config"
|
|
)
|
|
|
|
func NormalizeKeys(keys map[string]string, rootName string, sep string) map[string]string {
|
|
normalized := make(map[string]string)
|
|
knownKeys := getKnownKeys()
|
|
|
|
for k, v := range keys {
|
|
var finalKey []string
|
|
var suffix string
|
|
var camelClientName string
|
|
var camelField string
|
|
|
|
finalKey = append(finalKey, rootName)
|
|
finalKey = append(finalKey, "providers")
|
|
lowerKey := strings.ToLower(k)
|
|
|
|
if !strings.HasPrefix(lowerKey, "providers"+sep) {
|
|
continue
|
|
}
|
|
|
|
for _, known := range knownKeys {
|
|
if strings.HasSuffix(lowerKey, strings.ReplaceAll(known, "-", sep)) {
|
|
suffix = known
|
|
break
|
|
}
|
|
}
|
|
|
|
if suffix == "" {
|
|
continue
|
|
}
|
|
|
|
if strings.TrimSpace(strings.TrimSuffix(strings.TrimPrefix(lowerKey, "providers"+sep), strings.ReplaceAll(suffix, "-", sep))) == "" {
|
|
continue
|
|
}
|
|
|
|
clientNameParts := strings.Split(strings.TrimPrefix(strings.TrimSuffix(lowerKey, sep+strings.ReplaceAll(suffix, "-", sep)), "providers"+sep), sep)
|
|
|
|
for i, p := range clientNameParts {
|
|
if i == 0 {
|
|
camelClientName += p
|
|
continue
|
|
}
|
|
if p == "" {
|
|
continue
|
|
}
|
|
camelClientName += strings.ToUpper(string([]rune(p)[0])) + string([]rune(p)[1:])
|
|
}
|
|
|
|
finalKey = append(finalKey, camelClientName)
|
|
|
|
fieldParts := strings.Split(suffix, "-")
|
|
|
|
for i, p := range fieldParts {
|
|
if i == 0 {
|
|
camelField += p
|
|
continue
|
|
}
|
|
if p == "" {
|
|
continue
|
|
}
|
|
camelField += strings.ToUpper(string([]rune(p)[0])) + string([]rune(p)[1:])
|
|
}
|
|
|
|
finalKey = append(finalKey, camelField)
|
|
normalized[strings.Join(finalKey, ".")] = v
|
|
}
|
|
|
|
return normalized
|
|
}
|
|
|
|
func getKnownKeys() []string {
|
|
var known []string
|
|
|
|
p := config.OAuthServiceConfig{}
|
|
v := reflect.ValueOf(p)
|
|
typeOfP := v.Type()
|
|
|
|
for field := range typeOfP.NumField() {
|
|
known = append(known, typeOfP.Field(field).Tag.Get("key"))
|
|
}
|
|
|
|
return known
|
|
}
|