Skip to content

Commit 9319307

Browse files
committed
refactor: simplify provider management and add Type method
- Change providers from map to slice for simpler management - Add Type() method to Provider interface for CSS class naming - Update template to use provider Type() for styling instead of Name - Simplify login template data structure - Add OIDC provider styling support
1 parent a2d0d88 commit 9319307

7 files changed

Lines changed: 60 additions & 45 deletions

File tree

pkg/auth/auth.go

Lines changed: 21 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,12 @@ var templateFS embed.FS
1717

1818
type AuthRouter struct {
1919
passwordHash []string
20-
providers map[string]Provider
20+
providers []Provider
2121
template *template.Template
2222
unauthorizedTemplate *template.Template
2323
}
2424

2525
func NewAuthRouter(passwordHash []string, providers ...Provider) (*AuthRouter, error) {
26-
providersMap := make(map[string]Provider)
27-
for _, provider := range providers {
28-
providersMap[provider.Name()] = provider
29-
}
30-
3126
tmpl, err := template.ParseFS(templateFS, "templates/login.html")
3227
if err != nil {
3328
return nil, err
@@ -40,7 +35,7 @@ func NewAuthRouter(passwordHash []string, providers ...Provider) (*AuthRouter, e
4035

4136
return &AuthRouter{
4237
passwordHash: passwordHash,
43-
providers: providersMap,
38+
providers: providers,
4439
template: tmpl,
4540
unauthorizedTemplate: unauthorizedTmpl,
4641
}, nil
@@ -114,9 +109,19 @@ func (a *AuthRouter) SetupRoutes(router gin.IRouter) {
114109
}
115110
}
116111

117-
type ProviderData struct {
118-
Name string
119-
URL string
112+
func (a *AuthRouter) getProvider(name string) Provider {
113+
for _, provider := range a.providers {
114+
if provider.Name() == name {
115+
return provider
116+
}
117+
}
118+
return nil
119+
}
120+
121+
type templateData struct {
122+
Providers []Provider
123+
HasPassword bool
124+
PasswordError string
120125
}
121126

122127
func (a *AuthRouter) handleLogin(c *gin.Context) {
@@ -125,20 +130,8 @@ func (a *AuthRouter) handleLogin(c *gin.Context) {
125130
return
126131
}
127132

128-
var providersData []ProviderData
129-
for name := range a.providers {
130-
providersData = append(providersData, ProviderData{
131-
Name: name,
132-
URL: a.providers[name].AuthURL(),
133-
})
134-
}
135-
136-
data := struct {
137-
Providers []ProviderData
138-
HasPassword bool
139-
PasswordError string
140-
}{
141-
Providers: providersData,
133+
data := templateData{
134+
Providers: a.providers,
142135
HasPassword: len(a.passwordHash) > 0,
143136
PasswordError: "",
144137
}
@@ -172,20 +165,8 @@ func (a *AuthRouter) handleLoginPost(c *gin.Context) {
172165
}
173166

174167
if errorMessage != "" {
175-
var providersData []ProviderData
176-
for name := range a.providers {
177-
providersData = append(providersData, ProviderData{
178-
Name: name,
179-
URL: a.providers[name].AuthURL(),
180-
})
181-
}
182-
183-
data := struct {
184-
Providers []ProviderData
185-
HasPassword bool
186-
PasswordError string
187-
}{
188-
Providers: providersData,
168+
data := templateData{
169+
Providers: a.providers,
189170
HasPassword: len(a.passwordHash) > 0,
190171
PasswordError: errorMessage,
191172
}
@@ -237,8 +218,8 @@ func (a *AuthRouter) RequireAuth() gin.HandlerFunc {
237218
return
238219
}
239220

240-
p, ok := a.providers[providerName.(string)]
241-
if !ok {
221+
p := a.getProvider(providerName.(string))
222+
if p == nil {
242223
c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "Unknown provider"})
243224
return
244225
}

pkg/auth/github.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ func (p *githubProvider) Name() string {
3737
return "GitHub"
3838
}
3939

40+
func (p *githubProvider) Type() string {
41+
return "github"
42+
}
43+
4044
func (p *githubProvider) RedirectURL() string {
4145
return GitHubCallbackEndpoint
4246
}

pkg/auth/google.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ func (p *googleProvider) Name() string {
3737
return "Google"
3838
}
3939

40+
func (p *googleProvider) Type() string {
41+
return "google"
42+
}
43+
4044
func (p *googleProvider) RedirectURL() string {
4145
return GoogleCallbackEndpoint
4246
}

pkg/auth/interface.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010

1111
type Provider interface {
1212
Name() string
13+
Type() string
1314
RedirectURL() string
1415
AuthURL() string
1516
AuthCodeURL(c *gin.Context, state string) (string, error)

pkg/auth/mock.go

Lines changed: 14 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/auth/oidc.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,10 @@ func (p *oidcProvider) Name() string {
6363
return p.providerName
6464
}
6565

66+
func (p *oidcProvider) Type() string {
67+
return "oidc"
68+
}
69+
6670
func (p *oidcProvider) RedirectURL() string {
6771
return OIDCCallbackEndpoint
6872
}

pkg/auth/templates/login.html

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -117,20 +117,27 @@
117117
transform: translateY(-2px);
118118
box-shadow: 0 6px 16px rgba(0, 0, 0, 0.15);
119119
}
120-
.Google {
120+
.google {
121121
background-color: #4285f4;
122122
color: white;
123123
}
124-
.Google:hover {
124+
.google:hover {
125125
background-color: #357ae8;
126126
}
127-
.GitHub {
127+
.github {
128128
background-color: #333;
129129
color: white;
130130
}
131-
.GitHub:hover {
131+
.github:hover {
132132
background-color: #24292e;
133133
}
134+
.oidc {
135+
background-color: #5c67f2;
136+
color: white;
137+
}
138+
.oidc:hover {
139+
background-color: #4e54d4;
140+
}
134141
.error-message {
135142
color: #e74c3c;
136143
font-size: 0.9rem;
@@ -165,7 +172,7 @@ <h1>MCP Auth Proxy</h1>
165172
<span>or</span>
166173
</div>
167174
{{end}} {{range .Providers}}
168-
<a href="{{.URL}}" class="provider-button {{.Name }}">
175+
<a href="{{.AuthURL}}" class="provider-button {{.Type}}">
169176
Login with {{.Name}}
170177
</a>
171178
{{end}}

0 commit comments

Comments
 (0)