11package quickbooks
22
33import (
4+ "bytes"
45 "encoding/json"
56 "fmt"
7+ "io"
68 "net/http"
79 "strings"
810
@@ -85,6 +87,10 @@ func (Provider) UnmarshalSession(data string) (goth.Session, error) {
8587
8688func (p Provider ) FetchUser (session goth.Session ) (goth.User , error ) {
8789 s := session .(* Session )
90+ user := goth.User {
91+ Provider : p .Name (),
92+ }
93+
8894 if s .AccessToken == "" {
8995 return goth.User {}, fmt .Errorf ("no access token obtained for session with provider %s" , p .Name ())
9096 }
@@ -102,33 +108,42 @@ func (p Provider) FetchUser(session goth.Session) (goth.User, error) {
102108 defer resp .Body .Close ()
103109
104110 if resp .StatusCode != http .StatusOK {
105- return goth.User {}, fmt .Errorf ("failed to get user info: %d" , resp .StatusCode )
111+ return user , fmt .Errorf ("failed to get user info: %d" , resp .StatusCode )
112+ }
113+
114+ bits , err := io .ReadAll (resp .Body )
115+ if err != nil {
116+ return user , err
106117 }
107118
108- var userInfo struct {
119+ u := struct {
109120 Sub string `json:"sub"`
110121 Email string `json:"email"`
111122 EmailVerified bool `json:"email_verified"`
112123 Name string `json:"name"`
113124 GivenName string `json:"given_name"`
114125 FamilyName string `json:"family_name"`
126+ }{}
127+
128+ if err := json .NewDecoder (bytes .NewReader (bits )).Decode (& u ); err != nil {
129+ return user , err
115130 }
116131
117- if err := json .NewDecoder (resp .Body ).Decode (& userInfo ); err != nil {
118- return goth.User {}, err
132+ user .UserID = u .Sub
133+ user .Email = u .Email
134+ user .Name = u .Name
135+ user .FirstName = u .GivenName
136+ user .LastName = u .FamilyName
137+ user .AccessToken = s .AccessToken
138+ user .RefreshToken = s .RefreshToken
139+ user .ExpiresAt = s .ExpiresAt
140+
141+ err = json .NewDecoder (bytes .NewReader (bits )).Decode (& user .RawData )
142+ if err != nil {
143+ return user , err
119144 }
120145
121- return goth.User {
122- Provider : p .Name (),
123- UserID : userInfo .Sub ,
124- Email : userInfo .Email ,
125- Name : userInfo .Name ,
126- FirstName : userInfo .GivenName ,
127- LastName : userInfo .FamilyName ,
128- AccessToken : s .AccessToken ,
129- RefreshToken : s .RefreshToken ,
130- ExpiresAt : s .ExpiresAt ,
131- }, nil
146+ return user , err
132147}
133148
134149func (Provider ) Debug (bool ) {}
0 commit comments