From 1d3900ffa78d7e1b10b48c1ed50b8af796d42d0b Mon Sep 17 00:00:00 2001 From: Umputun Date: Thu, 24 May 2018 17:49:06 -0500 Subject: [PATCH] simplify providers initialization --- app/rest/auth/provider.go | 34 +++++++++++++++------------------- app/rest/auth/provider_test.go | 8 ++++---- 2 files changed, 19 insertions(+), 23 deletions(-) diff --git a/app/rest/auth/provider.go b/app/rest/auth/provider.go index 2a8f69fc..25e4e4ee 100644 --- a/app/rest/auth/provider.go +++ b/app/rest/auth/provider.go @@ -11,7 +11,7 @@ import ( "net/http" "time" - jwt "github.com/dgrijalva/jwt-go" + "github.com/dgrijalva/jwt-go" "github.com/go-chi/chi" "github.com/go-chi/render" "golang.org/x/oauth2" @@ -23,26 +23,24 @@ import ( // Provider represents oauth2 provider type Provider struct { + Params Name string RedirectURL string InfoURL string Endpoint oauth2.Endpoint Scopes []string MapUser func(userData, []byte) store.User // map info from InfoURL to User - Secret string - - avatarProxy *proxy.Avatar conf *oauth2.Config - jwtService *JWT } // Params to make initialized and ready to use provider type Params struct { - Cid string - Csecret string RemarkURL string AvatarProxy *proxy.Avatar JwtService *JWT + Secret string + Cid string + Csecret string } type userData map[string]interface{} @@ -56,19 +54,17 @@ func (u userData) value(key string) string { // newProvider makes auth for given provider func initProvider(p Params, provider Provider) Provider { - log.Printf("[INFO] create %s auth, id=%s, redir: %s", provider.Name, p.Cid, provider.RedirectURL) - + log.Printf("[INFO] create %s auth, id=%s, redir: %s", provider.Name, provider.Cid, provider.RedirectURL) + provider.Params = p conf := oauth2.Config{ - ClientID: p.Cid, - ClientSecret: p.Csecret, + ClientID: provider.Cid, + ClientSecret: provider.Csecret, RedirectURL: provider.RedirectURL, Scopes: provider.Scopes, Endpoint: provider.Endpoint, } provider.conf = &conf - provider.avatarProxy = p.AvatarProxy - provider.jwtService = p.JwtService return provider } @@ -98,7 +94,7 @@ func (p Provider) loginHandler(w http.ResponseWriter, r *http.Request) { }, } - if err := p.jwtService.Set(w, &claims); err != nil { + if err := p.JwtService.Set(w, &claims); err != nil { rest.SendErrorJSON(w, r, http.StatusInternalServerError, err, "failed to set jwt") return } @@ -114,7 +110,7 @@ func (p Provider) loginHandler(w http.ResponseWriter, r *http.Request) { // GET /callback func (p Provider) authHandler(w http.ResponseWriter, r *http.Request) { - oauthClaims, err := p.jwtService.Get(r) + oauthClaims, err := p.JwtService.Get(r) if err != nil { rest.SendErrorJSON(w, r, http.StatusInternalServerError, err, "failed to get jwt") return @@ -160,8 +156,8 @@ func (p Provider) authHandler(w http.ResponseWriter, r *http.Request) { log.Printf("[DEBUG] got raw user info %+v", jData) u := p.MapUser(jData, data) - if p.avatarProxy != nil { - if avatarURL, e := p.avatarProxy.Put(u); e == nil { + if p.AvatarProxy != nil { + if avatarURL, e := p.AvatarProxy.Put(u); e == nil { u.Picture = avatarURL } else { log.Printf("[WARN] failed to proxy avatar, %s", e) @@ -176,7 +172,7 @@ func (p Provider) authHandler(w http.ResponseWriter, r *http.Request) { }, } - if err = p.jwtService.Set(w, authClaims); err != nil { + if err = p.JwtService.Set(w, authClaims); err != nil { rest.SendErrorJSON(w, r, http.StatusInternalServerError, err, "failed to save user info") return } @@ -193,7 +189,7 @@ func (p Provider) authHandler(w http.ResponseWriter, r *http.Request) { // LogoutHandler - GET /logout func (p Provider) LogoutHandler(w http.ResponseWriter, r *http.Request) { - p.jwtService.Reset(w) + p.JwtService.Reset(w) log.Printf("[DEBUG] logout") } diff --git a/app/rest/auth/provider_test.go b/app/rest/auth/provider_test.go index b2baca4a..e982b9a7 100644 --- a/app/rest/auth/provider_test.go +++ b/app/rest/auth/provider_test.go @@ -78,8 +78,8 @@ func TestLogout(t *testing.T) { } func TestInitProvider(t *testing.T) { - params := Params{Cid: "cid", Csecret: "csecret", RemarkURL: "url"} - provider := Provider{Name: "test", RedirectURL: "redir", Secret: "123456"} + params := Params{RemarkURL: "url", Secret: "123456", Cid: "cid", Csecret: "csecret"} + provider := Provider{Name: "test", RedirectURL: "redir"} res := initProvider(params, provider) assert.Equal(t, "cid", res.conf.ClientID) assert.Equal(t, "csecret", res.conf.ClientSecret) @@ -108,8 +108,8 @@ func mockProvider(t *testing.T, loginPort, authPort int) (provider Provider, ts return userInfo }, } - - provider = initProvider(Params{Cid: "cid", Csecret: "csecret", JwtService: NewJWT("12345", false, time.Hour)}, provider) + jwtServcie := NewJWT("12345", false, time.Hour) + provider = initProvider(Params{RemarkURL: "url", Secret: "123456", Cid: "cid", Csecret: "csecret", JwtService: jwtServcie}, provider) ts = &http.Server{Addr: fmt.Sprintf(":%d", loginPort), Handler: provider.Routes()}