mirror of
				https://github.com/steveiliop56/tinyauth.git
				synced 2025-11-03 23:55:44 +00:00 
			
		
		
		
	Compare commits
	
		
			1 Commits
		
	
	
		
			l10n_main
			...
			91048c16f8
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					91048c16f8 | 
@@ -174,3 +174,13 @@ type AppPath struct {
 | 
				
			|||||||
	Allow string
 | 
						Allow string
 | 
				
			||||||
	Block string
 | 
						Block string
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Flags
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Providers struct {
 | 
				
			||||||
 | 
						Providers map[string]ProviderConfig
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type ProviderConfig struct {
 | 
				
			||||||
 | 
						Config OAuthServiceConfig
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										55
									
								
								internal/utils/decoders/flags_decoder.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								internal/utils/decoders/flags_decoder.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
				
			|||||||
 | 
					package decoders
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"strings"
 | 
				
			||||||
 | 
						"tinyauth/internal/config"
 | 
				
			||||||
 | 
						"tinyauth/internal/utils"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/traefik/paerser/parser"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func DecodeFlags(flags map[string]string) (config.Providers, error) {
 | 
				
			||||||
 | 
						// Normalize flags (sorry to whoever has to read this)
 | 
				
			||||||
 | 
						// --providers-client1-client-id -> tinyauth.providers.client1.clientId
 | 
				
			||||||
 | 
						normalized := make(map[string]string)
 | 
				
			||||||
 | 
						for k, v := range flags {
 | 
				
			||||||
 | 
							newKey := ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							nk := strings.TrimPrefix(k, "--")
 | 
				
			||||||
 | 
							parts := strings.SplitN(nk, "-", 4)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							for i, part := range parts {
 | 
				
			||||||
 | 
								if i == 3 {
 | 
				
			||||||
 | 
									subParts := strings.Split(part, "-")
 | 
				
			||||||
 | 
									for j, subPart := range subParts {
 | 
				
			||||||
 | 
										if j == 0 {
 | 
				
			||||||
 | 
											newKey += "." + subPart
 | 
				
			||||||
 | 
										} else {
 | 
				
			||||||
 | 
											newKey += utils.Capitalize(subPart)
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									continue
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if i == 0 {
 | 
				
			||||||
 | 
									newKey += part
 | 
				
			||||||
 | 
									continue
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								newKey += "." + part
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							newKey = "tinyauth." + newKey
 | 
				
			||||||
 | 
							normalized[newKey] = v
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Decode
 | 
				
			||||||
 | 
						var providers config.Providers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						err := parser.Decode(normalized, &providers, "tinyauth", "tinyauth.providers")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return config.Providers{}, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return providers, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										60
									
								
								internal/utils/decoders/flags_decoder_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								internal/utils/decoders/flags_decoder_test.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,60 @@
 | 
				
			|||||||
 | 
					package decoders_test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"testing"
 | 
				
			||||||
 | 
						"tinyauth/internal/config"
 | 
				
			||||||
 | 
						"tinyauth/internal/utils/decoders"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"gotest.tools/v3/assert"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestDecodeFlags(t *testing.T) {
 | 
				
			||||||
 | 
						// Variables
 | 
				
			||||||
 | 
						expected := config.Providers{
 | 
				
			||||||
 | 
							Providers: map[string]config.ProviderConfig{
 | 
				
			||||||
 | 
								"client1": {
 | 
				
			||||||
 | 
									Config: config.OAuthServiceConfig{
 | 
				
			||||||
 | 
										ClientID:           "client1-id",
 | 
				
			||||||
 | 
										ClientSecret:       "client1-secret",
 | 
				
			||||||
 | 
										Scopes:             []string{"client1-scope1", "client1-scope2"},
 | 
				
			||||||
 | 
										RedirectURL:        "client1-redirect-url",
 | 
				
			||||||
 | 
										AuthURL:            "client1-auth-url",
 | 
				
			||||||
 | 
										UserinfoURL:        "client1-user-info-url",
 | 
				
			||||||
 | 
										InsecureSkipVerify: false,
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								"client2": {
 | 
				
			||||||
 | 
									Config: config.OAuthServiceConfig{
 | 
				
			||||||
 | 
										ClientID:           "client2-id",
 | 
				
			||||||
 | 
										ClientSecret:       "client2-secret",
 | 
				
			||||||
 | 
										Scopes:             []string{"client2-scope1", "client2-scope2"},
 | 
				
			||||||
 | 
										RedirectURL:        "client2-redirect-url",
 | 
				
			||||||
 | 
										AuthURL:            "client2-auth-url",
 | 
				
			||||||
 | 
										UserinfoURL:        "client2-user-info-url",
 | 
				
			||||||
 | 
										InsecureSkipVerify: false,
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						test := map[string]string{
 | 
				
			||||||
 | 
							"--providers-client1-config-client-id":            "client1-id",
 | 
				
			||||||
 | 
							"--providers-client1-config-client-secret":        "client1-secret",
 | 
				
			||||||
 | 
							"--providers-client1-config-scopes":               "client1-scope1,client1-scope2",
 | 
				
			||||||
 | 
							"--providers-client1-config-redirect-url":         "client1-redirect-url",
 | 
				
			||||||
 | 
							"--providers-client1-config-auth-url":             "client1-auth-url",
 | 
				
			||||||
 | 
							"--providers-client1-config-user-info-url":        "client1-user-info-url",
 | 
				
			||||||
 | 
							"--providers-client1-config-insecure-skip-verify": "false",
 | 
				
			||||||
 | 
							"--providers-client2-config-client-id":            "client2-id",
 | 
				
			||||||
 | 
							"--providers-client2-config-client-secret":        "client2-secret",
 | 
				
			||||||
 | 
							"--providers-client2-config-scopes":               "client2-scope1,client2-scope2",
 | 
				
			||||||
 | 
							"--providers-client2-config-redirect-url":         "client2-redirect-url",
 | 
				
			||||||
 | 
							"--providers-client2-config-auth-url":             "client2-auth-url",
 | 
				
			||||||
 | 
							"--providers-client2-config-user-info-url":        "client2-user-info-url",
 | 
				
			||||||
 | 
							"--providers-client2-config-insecure-skip-verify": "false",
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Test
 | 
				
			||||||
 | 
						res, err := decoders.DecodeFlags(test)
 | 
				
			||||||
 | 
						assert.NilError(t, err)
 | 
				
			||||||
 | 
						assert.DeepEqual(t, expected, res)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,10 +1,11 @@
 | 
				
			|||||||
package decoders_test
 | 
					package decoders_test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"reflect"
 | 
					 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
	"tinyauth/internal/config"
 | 
						"tinyauth/internal/config"
 | 
				
			||||||
	"tinyauth/internal/utils/decoders"
 | 
						"tinyauth/internal/utils/decoders"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"gotest.tools/v3/assert"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestDecodeLabels(t *testing.T) {
 | 
					func TestDecodeLabels(t *testing.T) {
 | 
				
			||||||
@@ -62,12 +63,6 @@ func TestDecodeLabels(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// Test
 | 
						// Test
 | 
				
			||||||
	result, err := decoders.DecodeLabels(test)
 | 
						result, err := decoders.DecodeLabels(test)
 | 
				
			||||||
 | 
						assert.NilError(t, err)
 | 
				
			||||||
	if err != nil {
 | 
						assert.DeepEqual(t, expected, result)
 | 
				
			||||||
		t.Fatalf("Unexpected error: %v", err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if reflect.DeepEqual(expected, result) == false {
 | 
					 | 
				
			||||||
		t.Fatalf("Expected %v but got %v", expected, result)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user