mirror of
https://github.com/steveiliop56/tinyauth.git
synced 2025-12-20 15:12:40 +00:00
chore: remove unused code
This commit is contained in:
@@ -51,14 +51,35 @@ func (app *BootstrapApp) Setup() error {
|
|||||||
|
|
||||||
app.context.users = users
|
app.context.users = users
|
||||||
|
|
||||||
// Get OAuth configs
|
// Setup OAuth providers
|
||||||
oauthProviders, err := utils.GetOAuthProvidersConfig(os.Environ(), os.Args, app.config.AppURL)
|
app.context.oauthProviders = app.config.OAuth.Providers
|
||||||
|
|
||||||
if err != nil {
|
for name, provider := range app.context.oauthProviders {
|
||||||
return err
|
secret := utils.GetSecret(provider.ClientSecret, provider.ClientSecretFile)
|
||||||
|
provider.ClientSecret = secret
|
||||||
|
provider.ClientSecretFile = ""
|
||||||
|
app.context.oauthProviders[name] = provider
|
||||||
}
|
}
|
||||||
|
|
||||||
app.context.oauthProviders = oauthProviders
|
for id := range config.OverrideProviders {
|
||||||
|
if provider, exists := app.context.oauthProviders[id]; exists {
|
||||||
|
if provider.RedirectURL == "" {
|
||||||
|
provider.RedirectURL = app.config.AppURL + "/api/oauth/callback/" + id
|
||||||
|
app.context.oauthProviders[id] = provider
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for id, provider := range app.context.oauthProviders {
|
||||||
|
if provider.Name == "" {
|
||||||
|
if name, ok := config.OverrideProviders[id]; ok {
|
||||||
|
provider.Name = name
|
||||||
|
} else {
|
||||||
|
provider.Name = utils.Capitalize(id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
app.context.oauthProviders[id] = provider
|
||||||
|
}
|
||||||
|
|
||||||
// Get cookie domain
|
// Get cookie domain
|
||||||
cookieDomain, err := utils.GetCookieDomain(app.config.AppURL)
|
cookieDomain, err := utils.GetCookieDomain(app.config.AppURL)
|
||||||
@@ -98,7 +119,7 @@ func (app *BootstrapApp) Setup() error {
|
|||||||
// Configured providers
|
// Configured providers
|
||||||
configuredProviders := make([]controller.Provider, 0)
|
configuredProviders := make([]controller.Provider, 0)
|
||||||
|
|
||||||
for id, provider := range oauthProviders {
|
for id, provider := range app.context.oauthProviders {
|
||||||
configuredProviders = append(configuredProviders, controller.Provider{
|
configuredProviders = append(configuredProviders, controller.Provider{
|
||||||
Name: provider.Name,
|
Name: provider.Name,
|
||||||
ID: id,
|
ID: id,
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ func (docker *DockerService) GetLabels(appDomain string) (config.App, error) {
|
|||||||
return config.App{}, err
|
return config.App{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
labels, err := decoders.DecodeLabels(inspect.Config.Labels)
|
labels, err := decoders.DecodeLabels[config.Apps](inspect.Config.Labels, "apps")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return config.App{}, err
|
return config.App{}, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,12 +6,8 @@ import (
|
|||||||
"net/url"
|
"net/url"
|
||||||
"strings"
|
"strings"
|
||||||
"tinyauth/internal/config"
|
"tinyauth/internal/config"
|
||||||
"tinyauth/internal/utils/decoders"
|
|
||||||
|
|
||||||
"maps"
|
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/rs/zerolog"
|
|
||||||
"github.com/weppos/publicsuffix-go/publicsuffix"
|
"github.com/weppos/publicsuffix-go/publicsuffix"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -104,119 +100,3 @@ func IsRedirectSafe(redirectURL string, domain string) bool {
|
|||||||
|
|
||||||
return hostname == domain
|
return hostname == domain
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetLogLevel(level string) zerolog.Level {
|
|
||||||
switch strings.ToLower(level) {
|
|
||||||
case "trace":
|
|
||||||
return zerolog.TraceLevel
|
|
||||||
case "debug":
|
|
||||||
return zerolog.DebugLevel
|
|
||||||
case "info":
|
|
||||||
return zerolog.InfoLevel
|
|
||||||
case "warn":
|
|
||||||
return zerolog.WarnLevel
|
|
||||||
case "error":
|
|
||||||
return zerolog.ErrorLevel
|
|
||||||
case "fatal":
|
|
||||||
return zerolog.FatalLevel
|
|
||||||
case "panic":
|
|
||||||
return zerolog.PanicLevel
|
|
||||||
default:
|
|
||||||
return zerolog.InfoLevel
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetOAuthProvidersConfig(env []string, args []string, appUrl string) (map[string]config.OAuthServiceConfig, error) {
|
|
||||||
providers := make(map[string]config.OAuthServiceConfig)
|
|
||||||
|
|
||||||
// Get from environment variables
|
|
||||||
envMap := make(map[string]string)
|
|
||||||
|
|
||||||
for _, e := range env {
|
|
||||||
pair := strings.SplitN(e, "=", 2)
|
|
||||||
if len(pair) == 2 {
|
|
||||||
envMap[pair[0]] = pair[1]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
envProviders, err := decoders.DecodeEnv[config.Providers, config.OAuthServiceConfig](envMap, "providers")
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
maps.Copy(providers, envProviders.Providers)
|
|
||||||
|
|
||||||
// Get from flags
|
|
||||||
flagsMap := make(map[string]string)
|
|
||||||
|
|
||||||
for _, arg := range args[1:] {
|
|
||||||
if strings.HasPrefix(arg, "--") {
|
|
||||||
pair := strings.SplitN(arg[2:], "=", 2)
|
|
||||||
if len(pair) == 2 {
|
|
||||||
flagsMap[pair[0]] = pair[1]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
flagProviders, err := decoders.DecodeFlags[config.Providers, config.OAuthServiceConfig](flagsMap, "providers")
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
maps.Copy(providers, flagProviders.Providers)
|
|
||||||
|
|
||||||
// For every provider get correct secret from file if set
|
|
||||||
for name, provider := range providers {
|
|
||||||
secret := GetSecret(provider.ClientSecret, provider.ClientSecretFile)
|
|
||||||
provider.ClientSecret = secret
|
|
||||||
provider.ClientSecretFile = ""
|
|
||||||
providers[name] = provider
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we have google/github providers and no redirect URL then set a default
|
|
||||||
for id := range config.OverrideProviders {
|
|
||||||
if provider, exists := providers[id]; exists {
|
|
||||||
if provider.RedirectURL == "" {
|
|
||||||
provider.RedirectURL = appUrl + "/api/oauth/callback/" + id
|
|
||||||
providers[id] = provider
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set names
|
|
||||||
for id, provider := range providers {
|
|
||||||
if provider.Name == "" {
|
|
||||||
if name, ok := config.OverrideProviders[id]; ok {
|
|
||||||
provider.Name = name
|
|
||||||
} else {
|
|
||||||
provider.Name = Capitalize(id)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
providers[id] = provider
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return combined providers
|
|
||||||
return providers, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func ShoudLogJSON(environ []string, args []string) bool {
|
|
||||||
for _, e := range environ {
|
|
||||||
pair := strings.SplitN(e, "=", 2)
|
|
||||||
if len(pair) == 2 && pair[0] == "LOG_JSON" && strings.ToLower(pair[1]) == "true" {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, arg := range args[1:] {
|
|
||||||
if strings.HasPrefix(arg, "--log-json=") {
|
|
||||||
value := strings.SplitN(arg, "=", 2)[1]
|
|
||||||
if strings.ToLower(value) == "true" {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package utils_test
|
package utils_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
|
||||||
"testing"
|
"testing"
|
||||||
"tinyauth/internal/config"
|
"tinyauth/internal/config"
|
||||||
"tinyauth/internal/utils"
|
"tinyauth/internal/utils"
|
||||||
@@ -206,93 +205,3 @@ func TestIsRedirectSafe(t *testing.T) {
|
|||||||
result = utils.IsRedirectSafe(redirectURL, domain)
|
result = utils.IsRedirectSafe(redirectURL, domain)
|
||||||
assert.Equal(t, false, result)
|
assert.Equal(t, false, result)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetOAuthProvidersConfig(t *testing.T) {
|
|
||||||
env := []string{"PROVIDERS_CLIENT1_CLIENT_ID=client1-id", "PROVIDERS_CLIENT1_CLIENT_SECRET=client1-secret"}
|
|
||||||
args := []string{"/tinyauth/tinyauth", "--providers-client2-client-id=client2-id", "--providers-client2-client-secret=client2-secret"}
|
|
||||||
|
|
||||||
expected := map[string]config.OAuthServiceConfig{
|
|
||||||
"client1": {
|
|
||||||
ClientID: "client1-id",
|
|
||||||
ClientSecret: "client1-secret",
|
|
||||||
Name: "Client1",
|
|
||||||
},
|
|
||||||
"client2": {
|
|
||||||
ClientID: "client2-id",
|
|
||||||
ClientSecret: "client2-secret",
|
|
||||||
Name: "Client2",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
result, err := utils.GetOAuthProvidersConfig(env, args, "")
|
|
||||||
assert.NilError(t, err)
|
|
||||||
assert.DeepEqual(t, expected, result)
|
|
||||||
|
|
||||||
// Case with no providers
|
|
||||||
env = []string{}
|
|
||||||
args = []string{"/tinyauth/tinyauth"}
|
|
||||||
expected = map[string]config.OAuthServiceConfig{}
|
|
||||||
|
|
||||||
result, err = utils.GetOAuthProvidersConfig(env, args, "")
|
|
||||||
assert.NilError(t, err)
|
|
||||||
assert.DeepEqual(t, expected, result)
|
|
||||||
|
|
||||||
// Case with secret from file
|
|
||||||
file, err := os.Create("/tmp/tinyauth_test_file")
|
|
||||||
assert.NilError(t, err)
|
|
||||||
|
|
||||||
_, err = file.WriteString("file content\n")
|
|
||||||
assert.NilError(t, err)
|
|
||||||
|
|
||||||
err = file.Close()
|
|
||||||
assert.NilError(t, err)
|
|
||||||
defer os.Remove("/tmp/tinyauth_test_file")
|
|
||||||
|
|
||||||
env = []string{"PROVIDERS_CLIENT1_CLIENT_ID=client1-id", "PROVIDERS_CLIENT1_CLIENT_SECRET_FILE=/tmp/tinyauth_test_file"}
|
|
||||||
args = []string{"/tinyauth/tinyauth"}
|
|
||||||
expected = map[string]config.OAuthServiceConfig{
|
|
||||||
"client1": {
|
|
||||||
ClientID: "client1-id",
|
|
||||||
ClientSecret: "file content",
|
|
||||||
Name: "Client1",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
result, err = utils.GetOAuthProvidersConfig(env, args, "")
|
|
||||||
assert.NilError(t, err)
|
|
||||||
assert.DeepEqual(t, expected, result)
|
|
||||||
|
|
||||||
// Case with google provider and no redirect URL
|
|
||||||
env = []string{"PROVIDERS_GOOGLE_CLIENT_ID=google-id", "PROVIDERS_GOOGLE_CLIENT_SECRET=google-secret"}
|
|
||||||
args = []string{"/tinyauth/tinyauth"}
|
|
||||||
expected = map[string]config.OAuthServiceConfig{
|
|
||||||
"google": {
|
|
||||||
ClientID: "google-id",
|
|
||||||
ClientSecret: "google-secret",
|
|
||||||
RedirectURL: "http://app.url/api/oauth/callback/google",
|
|
||||||
Name: "Google",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
result, err = utils.GetOAuthProvidersConfig(env, args, "http://app.url")
|
|
||||||
assert.NilError(t, err)
|
|
||||||
assert.DeepEqual(t, expected, result)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestShoudLogJSON(t *testing.T) {
|
|
||||||
// Test with no env or args
|
|
||||||
result := utils.ShoudLogJSON([]string{"FOO=bar"}, []string{"tinyauth", "--foo-bar=baz"})
|
|
||||||
assert.Equal(t, false, result)
|
|
||||||
|
|
||||||
// Test with env variable set
|
|
||||||
result = utils.ShoudLogJSON([]string{"LOG_JSON=true"}, []string{"tinyauth", "--foo-bar=baz"})
|
|
||||||
assert.Equal(t, true, result)
|
|
||||||
|
|
||||||
// Test with flag set
|
|
||||||
result = utils.ShoudLogJSON([]string{"FOO=bar"}, []string{"tinyauth", "--log-json=true"})
|
|
||||||
assert.Equal(t, true, result)
|
|
||||||
|
|
||||||
// Test with both env and flag set to false
|
|
||||||
result = utils.ShoudLogJSON([]string{"LOG_JSON=false"}, []string{"tinyauth", "--log-json=false"})
|
|
||||||
assert.Equal(t, false, result)
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,80 +0,0 @@
|
|||||||
package decoders
|
|
||||||
|
|
||||||
import (
|
|
||||||
"reflect"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/stoewer/go-strcase"
|
|
||||||
)
|
|
||||||
|
|
||||||
func normalizeKeys[T any](input map[string]string, root string, sep string) map[string]string {
|
|
||||||
knownKeys := getKnownKeys[T]()
|
|
||||||
normalized := make(map[string]string)
|
|
||||||
|
|
||||||
for k, v := range input {
|
|
||||||
parts := []string{"tinyauth"}
|
|
||||||
|
|
||||||
key := strings.ToLower(k)
|
|
||||||
key = strings.ReplaceAll(key, sep, "-")
|
|
||||||
|
|
||||||
if !strings.HasPrefix(key, root+"-") {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
suffix := ""
|
|
||||||
|
|
||||||
for _, known := range knownKeys {
|
|
||||||
if strings.HasSuffix(key, known) {
|
|
||||||
suffix = known
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if suffix == "" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
parts = append(parts, root)
|
|
||||||
|
|
||||||
id := strings.TrimPrefix(key, root+"-")
|
|
||||||
id = strings.TrimSuffix(id, "-"+suffix)
|
|
||||||
|
|
||||||
if id == "" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
parts = append(parts, id)
|
|
||||||
parts = append(parts, suffix)
|
|
||||||
|
|
||||||
final := ""
|
|
||||||
|
|
||||||
for i, part := range parts {
|
|
||||||
if i > 0 {
|
|
||||||
final += "."
|
|
||||||
}
|
|
||||||
final += strcase.LowerCamelCase(part)
|
|
||||||
}
|
|
||||||
|
|
||||||
normalized[final] = v
|
|
||||||
}
|
|
||||||
|
|
||||||
return normalized
|
|
||||||
}
|
|
||||||
|
|
||||||
func getKnownKeys[T any]() []string {
|
|
||||||
var keys []string
|
|
||||||
var t T
|
|
||||||
|
|
||||||
v := reflect.ValueOf(t)
|
|
||||||
typeOfT := v.Type()
|
|
||||||
|
|
||||||
for field := range typeOfT.NumField() {
|
|
||||||
if typeOfT.Field(field).Tag.Get("field") != "" {
|
|
||||||
keys = append(keys, typeOfT.Field(field).Tag.Get("field"))
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
keys = append(keys, strcase.KebabCase(typeOfT.Field(field).Name))
|
|
||||||
}
|
|
||||||
|
|
||||||
return keys
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
package decoders
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/traefik/paerser/parser"
|
|
||||||
)
|
|
||||||
|
|
||||||
func DecodeEnv[T any, C any](env map[string]string, subName string) (T, error) {
|
|
||||||
var result T
|
|
||||||
|
|
||||||
normalized := normalizeKeys[C](env, subName, "_")
|
|
||||||
|
|
||||||
err := parser.Decode(normalized, &result, "tinyauth", "tinyauth."+subName)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return result, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return result, nil
|
|
||||||
}
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
package decoders_test
|
|
||||||
|
|
||||||
import (
|
|
||||||
"testing"
|
|
||||||
"tinyauth/internal/config"
|
|
||||||
"tinyauth/internal/utils/decoders"
|
|
||||||
|
|
||||||
"gotest.tools/v3/assert"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestDecodeEnv(t *testing.T) {
|
|
||||||
// Setup
|
|
||||||
env := map[string]string{
|
|
||||||
"PROVIDERS_GOOGLE_CLIENT_ID": "google-client-id",
|
|
||||||
"PROVIDERS_GOOGLE_CLIENT_SECRET": "google-client-secret",
|
|
||||||
"PROVIDERS_MY_GITHUB_CLIENT_ID": "github-client-id",
|
|
||||||
"PROVIDERS_MY_GITHUB_CLIENT_SECRET": "github-client-secret",
|
|
||||||
}
|
|
||||||
|
|
||||||
expected := config.Providers{
|
|
||||||
Providers: map[string]config.OAuthServiceConfig{
|
|
||||||
"google": {
|
|
||||||
ClientID: "google-client-id",
|
|
||||||
ClientSecret: "google-client-secret",
|
|
||||||
},
|
|
||||||
"myGithub": {
|
|
||||||
ClientID: "github-client-id",
|
|
||||||
ClientSecret: "github-client-secret",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
// Execute
|
|
||||||
result, err := decoders.DecodeEnv[config.Providers, config.OAuthServiceConfig](env, "providers")
|
|
||||||
assert.NilError(t, err)
|
|
||||||
assert.DeepEqual(t, result, expected)
|
|
||||||
}
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
package decoders
|
|
||||||
|
|
||||||
import (
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/traefik/paerser/parser"
|
|
||||||
)
|
|
||||||
|
|
||||||
func DecodeFlags[T any, C any](flags map[string]string, subName string) (T, error) {
|
|
||||||
var result T
|
|
||||||
|
|
||||||
filtered := filterFlags(flags)
|
|
||||||
normalized := normalizeKeys[C](filtered, subName, "_")
|
|
||||||
|
|
||||||
err := parser.Decode(normalized, &result, "tinyauth", "tinyauth."+subName)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return result, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return result, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func filterFlags(flags map[string]string) map[string]string {
|
|
||||||
filtered := make(map[string]string)
|
|
||||||
for k, v := range flags {
|
|
||||||
filtered[strings.TrimPrefix(k, "--")] = v
|
|
||||||
}
|
|
||||||
return filtered
|
|
||||||
}
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
package decoders_test
|
|
||||||
|
|
||||||
import (
|
|
||||||
"testing"
|
|
||||||
"tinyauth/internal/config"
|
|
||||||
"tinyauth/internal/utils/decoders"
|
|
||||||
|
|
||||||
"gotest.tools/v3/assert"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestDecodeFlags(t *testing.T) {
|
|
||||||
// Setup
|
|
||||||
flags := map[string]string{
|
|
||||||
"--providers-google-client-id": "google-client-id",
|
|
||||||
"--providers-google-client-secret": "google-client-secret",
|
|
||||||
"--providers-my-github-client-id": "github-client-id",
|
|
||||||
"--providers-my-github-client-secret": "github-client-secret",
|
|
||||||
}
|
|
||||||
|
|
||||||
expected := config.Providers{
|
|
||||||
Providers: map[string]config.OAuthServiceConfig{
|
|
||||||
"google": {
|
|
||||||
ClientID: "google-client-id",
|
|
||||||
ClientSecret: "google-client-secret",
|
|
||||||
},
|
|
||||||
"myGithub": {
|
|
||||||
ClientID: "github-client-id",
|
|
||||||
ClientSecret: "github-client-secret",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
// Execute
|
|
||||||
result, err := decoders.DecodeFlags[config.Providers, config.OAuthServiceConfig](flags, "providers")
|
|
||||||
assert.NilError(t, err)
|
|
||||||
assert.DeepEqual(t, result, expected)
|
|
||||||
}
|
|
||||||
@@ -1,19 +1,17 @@
|
|||||||
package decoders
|
package decoders
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"tinyauth/internal/config"
|
|
||||||
|
|
||||||
"github.com/traefik/paerser/parser"
|
"github.com/traefik/paerser/parser"
|
||||||
)
|
)
|
||||||
|
|
||||||
func DecodeLabels(labels map[string]string) (config.Apps, error) {
|
func DecodeLabels[T any](labels map[string]string, root string) (T, error) {
|
||||||
var appLabels config.Apps
|
var labelsDecoded T
|
||||||
|
|
||||||
err := parser.Decode(labels, &appLabels, "tinyauth", "tinyauth.apps")
|
err := parser.Decode(labels, &labelsDecoded, "tinyauth", "tinyauth."+root)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return config.Apps{}, err
|
return labelsDecoded, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return appLabels, nil
|
return labelsDecoded, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ func TestDecodeLabels(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Test
|
// Test
|
||||||
result, err := decoders.DecodeLabels(test)
|
result, err := decoders.DecodeLabels[config.Apps](test, "apps")
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
assert.DeepEqual(t, expected, result)
|
assert.DeepEqual(t, expected, result)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user