add preparation for disqus oauth2

This commit is contained in:
Umputun
2018-03-25 17:53:07 -05:00
parent 3d734188d4
commit 2c355e009d
3 changed files with 40 additions and 4 deletions
+5
View File
@@ -43,6 +43,8 @@ var opts struct {
GithubCSEC string `long:"github-csec" env:"REMARK_GITHUB_CSEC" description:"Github OAuth client secret"`
FacebookCID string `long:"facebook-cid" env:"REMARK_FACEBOOK_CID" description:"Facebook OAuth client ID"`
FacebookCSEC string `long:"facebook-csec" env:"REMARK_FACEBOOK_CSEC" description:"Facebook OAuth client secret"`
DisqusCID string `long:"disqus-cid" env:"REMARK_DISQUS_CID" description:"Disqus OAuth client ID"`
DisqusCSEC string `long:"disqus-csec" env:"REMARK_DISQUS_CSEC" description:"Disqus OAuth client secret"`
AvatarStore string `long:"avatars" env:"AVATAR_STORE" default:"./var/avatars" description:"path to avatars directory"`
DefaultAvatar string `long:"avatar-def" env:"AVATAR_DEF" default:"remark.image" description:"default avatar"`
@@ -210,6 +212,9 @@ func makeAuthProviders(sessionStore sessions.Store, avatarProxy *auth.AvatarProx
if srvOpts.FacebookCID != "" && srvOpts.FacebookCSEC != "" {
providers = append(providers, auth.NewFacebook(makeParams(srvOpts.FacebookCID, srvOpts.FacebookCSEC)))
}
if srvOpts.DisqusCID != "" && srvOpts.DisqusCSEC != "" {
providers = append(providers, auth.NewDisqus(makeParams(srvOpts.DisqusCID, srvOpts.DisqusCSEC)))
}
if len(providers) == 0 {
log.Printf("[WARN] no auth providers defined")
}
+28
View File
@@ -4,6 +4,7 @@ import (
"encoding/json"
"strings"
"golang.org/x/oauth2"
"golang.org/x/oauth2/facebook"
"golang.org/x/oauth2/github"
"golang.org/x/oauth2/google"
@@ -98,3 +99,30 @@ func NewFacebook(p Params) Provider {
},
})
}
// NewDisqus makes disqus oauth2 provider. TODO: WIP - seems to need client_id param
func NewDisqus(p Params) Provider {
return initProvider(p, Provider{
Name: "disqus",
Endpoint: oauth2.Endpoint{
AuthURL: "https://disqus.com/api/oauth/2.0/authorize/",
TokenURL: "https://disqus.com/api/oauth/2.0/access_token/",
},
RedirectURL: p.RemarkURL + "/auth/disqus/callback",
Scopes: []string{"read"},
InfoURL: "https://disqus.com/api/3.0/users/details.json",
Store: p.SessionStore,
MapUser: func(data userData, _ []byte) store.User {
userInfo := store.User{
ID: "disqus_" + data.value("login"),
Name: data.value("name"),
Picture: data.value("avatar_url"),
Profile: data.value("html_url"),
}
if userInfo.Name == "" {
userInfo.Name = userInfo.ID
}
return userInfo
},
})
}
+7 -4
View File
@@ -15,15 +15,16 @@ services:
max-file: "5"
# uncomment to expose directly (no proxy)
# ports:
# - "8080:8080"
ports:
- "80:8080"
environment:
- REMARK_URL=https://demo.remark42.com
# - REMARK_URL=https://demo.remark42.com
- REMARK_URL
- BOLTDB_PATH=/srv/var/db
- BACKUP_PATH=/srv/var/backup
- SESSION_STORE=/srv/var/session
- DEV_PASSWD=password # development mode, be careful!
# - DEV_PASSWD=password # development mode, be careful!
- DEBUG=true
- REMARK_GOOGLE_CID
- REMARK_GOOGLE_CSEC
@@ -31,6 +32,8 @@ services:
- REMARK_GITHUB_CSEC
- REMARK_FACEBOOK_CID
- REMARK_FACEBOOK_CSEC
- REMARK_DISQUS_CID
- REMARK_DISQUS_CSEC
volumes:
- ./var:/srv/var
- ./web:/srv/web # maps web directory directly to propagate local changes to container without redeploy