map user data inderectly with userData helper

This commit is contained in:
Umputun
2018-01-15 15:16:38 -06:00
parent b8ded408ff
commit 274605b815
2 changed files with 23 additions and 24 deletions
+10 -1
View File
@@ -29,7 +29,7 @@ type Provider struct {
InfoURL string
Endpoint oauth2.Endpoint
Scopes []string
MapUser func(map[string]interface{}) store.User
MapUser func(userData) store.User
conf *oauth2.Config
}
@@ -42,6 +42,15 @@ type Params struct {
RemarkURL string
}
type userData map[string]interface{}
func (u userData) value(key string) string {
if val, ok := u[key]; ok {
return fmt.Sprintf("%v", val)
}
return ""
}
// 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)
+13 -23
View File
@@ -1,7 +1,6 @@
package auth
import (
"fmt"
"strings"
"golang.org/x/oauth2/facebook"
@@ -20,12 +19,12 @@ func NewGoogle(p Params) Provider {
Scopes: []string{"https://www.googleapis.com/auth/userinfo.email"},
InfoURL: "https://www.googleapis.com/oauth2/v3/userinfo",
Store: p.SessionStore,
MapUser: func(data map[string]interface{}) store.User {
MapUser: func(data userData) store.User {
userInfo := store.User{
ID: value(data, "email"),
Name: value(data, "name"),
Picture: value(data, "picture"),
Profile: value(data, "profile"),
ID: data.value("email"),
Name: data.value("name"),
Picture: data.value("picture"),
Profile: data.value("profile"),
}
if userInfo.Name == "" {
userInfo.Name = strings.Split(userInfo.ID, "@")[0]
@@ -45,12 +44,12 @@ func NewGithub(p Params) Provider {
Scopes: []string{"user:email"},
InfoURL: "https://api.github.com/user",
Store: p.SessionStore,
MapUser: func(data map[string]interface{}) store.User {
MapUser: func(data userData) store.User {
userInfo := store.User{
ID: value(data, "login"),
Name: value(data, "name"),
Picture: value(data, "avatar_url"),
Profile: value(data, "html_url"),
ID: data.value("login"),
Name: data.value("name"),
Picture: data.value("avatar_url"),
Profile: data.value("html_url"),
}
if userInfo.Name == "" {
userInfo.Name = userInfo.ID
@@ -70,12 +69,10 @@ func NewFacebook(p Params) Provider {
Scopes: []string{"public_profile"},
InfoURL: "https://graph.facebook.com/me",
Store: p.SessionStore,
MapUser: func(data map[string]interface{}) store.User {
MapUser: func(data userData) store.User {
userInfo := store.User{
ID: value(data, "id"),
Name: value(data, "name"),
// Picture: data["avatar_url"].(string),
// Profile: data["html_url"].(string),
ID: data.value("id"),
Name: data.value("name"),
}
if userInfo.Name == "" {
userInfo.Name = userInfo.ID
@@ -85,10 +82,3 @@ func NewFacebook(p Params) Provider {
},
})
}
func value(data map[string]interface{}, key string) string {
if val, ok := data[key]; ok {
return fmt.Sprintf("%v", val)
}
return ""
}