@@ -6,6 +6,7 @@ package whgoth
66import (
77 "crypto/rand"
88 "encoding/hex"
9+ "log"
910 "net/http"
1011 "net/url"
1112
@@ -31,8 +32,9 @@ type AuthProvider struct {
3132func newAuthProvider (p goth.Provider , baseURL , sessionNamespace string ) (
3233 a * AuthProvider ) {
3334 a = & AuthProvider {
34- Provider : p ,
35- baseURL : baseURL ,
35+ Provider : p ,
36+ baseURL : baseURL ,
37+ sessionNamespace : sessionNamespace ,
3638 }
3739 a .Dir = whmux.Dir {
3840 "login" : whmux .Exact (http .HandlerFunc (a .login )),
@@ -101,6 +103,11 @@ func (a *AuthProvider) callback(w http.ResponseWriter, r *http.Request) {
101103 return
102104 }
103105
106+ if loggedIn , _ := session .Values ["logged_in" ].(bool ); loggedIn {
107+ wherr .Handle (w , r , wherr .BadRequest .New ("already logged in" ))
108+ return
109+ }
110+
104111 auth , ok := session .Values ["auth" ].(string )
105112 if ! ok {
106113 wherr .Handle (w , r , wherr .InternalServerError .New (
@@ -151,15 +158,18 @@ func (a *AuthProvider) User(ctx context.Context) (*goth.User, error) {
151158
152159 sess , err := a .Provider .UnmarshalSession (auth )
153160 if err != nil {
161+ log .Printf ("failed to unmarshal session: %v" , err )
154162 return nil , nil
155163 }
156164
157165 u , err := a .Provider .FetchUser (sess )
158166 if err != nil {
167+ log .Printf ("failed to fetch user: %v" , err )
159168 return nil , nil
160169 }
161170
162171 if u .UserID == "" || u .Provider == "" {
172+ log .Printf ("user had no user id or provider set" )
163173 return nil , nil
164174 }
165175 return & u , nil
0 commit comments