@@ -17,17 +17,12 @@ var templateFS embed.FS
1717
1818type AuthRouter struct {
1919 passwordHash []string
20- providers map [ string ]Provider
20+ providers [ ]Provider
2121 template * template.Template
2222 unauthorizedTemplate * template.Template
2323}
2424
2525func 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
122127func (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 }
0 commit comments