From cac77eaa9bef5e896212deb239afb250af470c4c Mon Sep 17 00:00:00 2001 From: theeufj <141145908+theeufj@users.noreply.github.com> Date: Mon, 10 Feb 2025 10:49:07 +1100 Subject: [PATCH 01/14] updating the scopes in the instagram library from basic to instagram_business_basic as per the instagram documentation --- providers/instagram/instagram.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/providers/instagram/instagram.go b/providers/instagram/instagram.go index b4703dc44..592e4f2c6 100644 --- a/providers/instagram/instagram.go +++ b/providers/instagram/instagram.go @@ -147,11 +147,11 @@ func newConfig(p *Provider, scopes []string) *oauth2.Config { TokenURL: tokenURL, }, Scopes: []string{ - "basic", + "instagram_business_basic", }, } defaultScopes := map[string]struct{}{ - "basic": {}, + "instagram_business_basic": {}, } for _, scope := range scopes { From a5fd8489789ebd3ba930420a4bf4ccf0271361d6 Mon Sep 17 00:00:00 2001 From: theeufj <141145908+theeufj@users.noreply.github.com> Date: Mon, 10 Feb 2025 11:28:47 +1100 Subject: [PATCH 02/14] upgraded instagram to support the new metagraph endpoint and updated the user object to support basic_business_info --- providers/instagram/instagram.go | 42 +++++++++++++++----------------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/providers/instagram/instagram.go b/providers/instagram/instagram.go index 592e4f2c6..1be61ae48 100644 --- a/providers/instagram/instagram.go +++ b/providers/instagram/instagram.go @@ -19,7 +19,7 @@ import ( var ( authURL = "https://api.instagram.com/oauth/authorize/" tokenURL = "https://api.instagram.com/oauth/access_token" - endPointProfile = "https://api.instagram.com/v1/users/self/" + endPointProfile = "https://graph.instagram.com/me" ) // New creates a new Instagram provider, and sets up important connection details. @@ -76,18 +76,19 @@ func (p *Provider) BeginAuth(state string) (goth.Session, error) { // FetchUser will go to Instagram and access basic information about the user. func (p *Provider) FetchUser(session goth.Session) (goth.User, error) { sess := session.(*Session) + user := goth.User{ AccessToken: sess.AccessToken, Provider: p.Name(), } if user.AccessToken == "" { - // data is not yet retrieved since accessToken is still empty return user, fmt.Errorf("%s cannot get user information without accessToken", p.providerName) } - response, err := p.Client().Get(endPointProfile + "?access_token=" + url.QueryEscape(sess.AccessToken)) + requestURL := endPointProfile + "?fields=id,username,account_type,media_count&access_token=" + url.QueryEscape(sess.AccessToken) + response, err := p.Client().Get(requestURL) if err != nil { return user, err } @@ -101,39 +102,36 @@ func (p *Provider) FetchUser(session goth.Session) (goth.User, error) { if err != nil { return user, err } + err = json.NewDecoder(bytes.NewReader(bits)).Decode(&user.RawData) if err != nil { return user, err } + err = userFromReader(bytes.NewReader(bits), &user) - return user, err + if err != nil { + return user, err + } else { + return user, nil + } } func userFromReader(reader io.Reader, user *goth.User) error { u := struct { - Data struct { - ID string `json:"id"` - UserName string `json:"username"` - FullName string `json:"full_name"` - ProfilePicture string `json:"profile_picture"` - Bio string `json:"bio"` - Website string `json:"website"` - Counts struct { - Media int `json:"media"` - Follows int `json:"follows"` - FollowedBy int `json:"followed_by"` - } `json:"counts"` - } `json:"data"` + ID string `json:"id"` + UserName string `json:"username"` + AccountType string `json:"account_type"` + MediaCount string `json:"media_count"` + + // Add other fields as needed }{} err := json.NewDecoder(reader).Decode(&u) if err != nil { return err } - user.UserID = u.Data.ID - user.Name = u.Data.FullName - user.NickName = u.Data.UserName - user.AvatarURL = u.Data.ProfilePicture - user.Description = u.Data.Bio + user.UserID = u.ID + user.NickName = u.UserName + // Set other fields as needed return err } From 3ce50ba82f52e748e06f35e3bbe398e78b11d3fd Mon Sep 17 00:00:00 2001 From: theeufj <141145908+theeufj@users.noreply.github.com> Date: Mon, 10 Feb 2025 11:34:26 +1100 Subject: [PATCH 03/14] Fixes to media typing --- providers/instagram/instagram.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/providers/instagram/instagram.go b/providers/instagram/instagram.go index 1be61ae48..843545daf 100644 --- a/providers/instagram/instagram.go +++ b/providers/instagram/instagram.go @@ -121,7 +121,7 @@ func userFromReader(reader io.Reader, user *goth.User) error { ID string `json:"id"` UserName string `json:"username"` AccountType string `json:"account_type"` - MediaCount string `json:"media_count"` + MediaCount int64 `json:"media_count"` // Add other fields as needed }{} From c51fabd8b10a016bcd29a2bd228750773b9b3f19 Mon Sep 17 00:00:00 2001 From: theeufj <141145908+theeufj@users.noreply.github.com> Date: Mon, 10 Feb 2025 12:12:48 +1100 Subject: [PATCH 04/14] jwt added --- go.mod | 1 + go.sum | 2 ++ 2 files changed, 3 insertions(+) diff --git a/go.mod b/go.mod index b47439442..e1ba13932 100644 --- a/go.mod +++ b/go.mod @@ -22,6 +22,7 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect github.com/goccy/go-json v0.10.2 // indirect + github.com/golang-jwt/jwt/v4 v4.5.1 // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/gorilla/context v1.1.1 // indirect github.com/gorilla/securecookie v1.1.1 // indirect diff --git a/go.sum b/go.sum index 40b2e0765..c6170ac75 100644 --- a/go.sum +++ b/go.sum @@ -13,6 +13,8 @@ github.com/go-chi/chi/v5 v5.1.0 h1:acVI1TYaD+hhedDJ3r54HyA6sExp3HfXq7QWEEY/xMw= github.com/go-chi/chi/v5 v5.1.0/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo= +github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= From 93f1d053e67c003cc7655edcd9f9aff913df311e Mon Sep 17 00:00:00 2001 From: theeufj <141145908+theeufj@users.noreply.github.com> Date: Mon, 17 Feb 2025 12:04:27 +1100 Subject: [PATCH 05/14] added previous fields --- go.mod | 1 + go.sum | 1 + providers/instagram/instagram.go | 6 ++++++ 3 files changed, 8 insertions(+) diff --git a/go.mod b/go.mod index e1ba13932..7ca2bf9c1 100644 --- a/go.mod +++ b/go.mod @@ -35,6 +35,7 @@ require ( github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/rogpeppe/go-internal v1.12.0 // indirect + github.com/stretchr/objx v0.5.2 // indirect golang.org/x/crypto v0.21.0 // indirect google.golang.org/appengine v1.6.8 // indirect google.golang.org/protobuf v1.32.0 // indirect diff --git a/go.sum b/go.sum index c6170ac75..cdf061c89 100644 --- a/go.sum +++ b/go.sum @@ -70,6 +70,7 @@ github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= diff --git a/providers/instagram/instagram.go b/providers/instagram/instagram.go index 843545daf..0872a2778 100644 --- a/providers/instagram/instagram.go +++ b/providers/instagram/instagram.go @@ -122,6 +122,9 @@ func userFromReader(reader io.Reader, user *goth.User) error { UserName string `json:"username"` AccountType string `json:"account_type"` MediaCount int64 `json:"media_count"` + Biography string `json:"biography"` + ProfileUrl string `json:"profile_picture_url"` + Name string `json:"name"` // Add other fields as needed }{} @@ -131,6 +134,9 @@ func userFromReader(reader io.Reader, user *goth.User) error { } user.UserID = u.ID user.NickName = u.UserName + user.Description = u.Biography + user.AvatarURL = u.ProfileUrl + user.Name = u.Name // Set other fields as needed return err } From 94c709904eda7fcdb28bda85149627e75db7e968 Mon Sep 17 00:00:00 2001 From: theeufj <141145908+theeufj@users.noreply.github.com> Date: Tue, 25 Feb 2025 14:08:46 +1100 Subject: [PATCH 06/14] update --- go.mod | 8 +++++--- go.sum | 3 +++ providers/instagram/instagram.go | 9 +++++++++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 7ca2bf9c1..1ea0bb3b4 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,8 @@ module github.com/markbates/goth -go 1.18 +go 1.23.0 + +toolchain go1.23.6 require ( github.com/go-chi/chi/v5 v5.1.0 @@ -13,12 +15,12 @@ require ( github.com/markbates/going v1.0.0 github.com/mrjones/oauth v0.0.0-20180629183705-f4e24b6d100c github.com/stretchr/testify v1.9.0 - golang.org/x/oauth2 v0.17.0 + golang.org/x/oauth2 v0.27.0 ) require ( cloud.google.com/go/compute v1.20.1 // indirect - cloud.google.com/go/compute/metadata v0.2.3 // indirect + cloud.google.com/go/compute/metadata v0.3.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect github.com/goccy/go-json v0.10.2 // indirect diff --git a/go.sum b/go.sum index cdf061c89..4ea7484e0 100644 --- a/go.sum +++ b/go.sum @@ -2,6 +2,7 @@ cloud.google.com/go/compute v1.20.1 h1:6aKEtlUiwEpJzM001l0yFkpXmUVXaN8W+fbkb2AZN cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -94,6 +95,8 @@ golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/oauth2 v0.17.0 h1:6m3ZPmLEFdVxKKWnKq4VqZ60gutO35zm+zrAHVmHyDQ= golang.org/x/oauth2 v0.17.0/go.mod h1:OzPDGQiuQMguemayvdylqddI7qcD9lnSDb+1FiwQ5HA= +golang.org/x/oauth2 v0.27.0 h1:da9Vo7/tDv5RH/7nZDz1eMGS/q1Vv1N/7FCrBhI9I3M= +golang.org/x/oauth2 v0.27.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/providers/instagram/instagram.go b/providers/instagram/instagram.go index 0872a2778..bd7e182c4 100644 --- a/providers/instagram/instagram.go +++ b/providers/instagram/instagram.go @@ -9,6 +9,7 @@ import ( "fmt" "io" "io/ioutil" + "log" "net/http" "net/url" @@ -76,6 +77,7 @@ func (p *Provider) BeginAuth(state string) (goth.Session, error) { // FetchUser will go to Instagram and access basic information about the user. func (p *Provider) FetchUser(session goth.Session) (goth.User, error) { sess := session.(*Session) + log.Printf("[Instagram] Beginning FetchUser for provider: %s", p.Name()) user := goth.User{ AccessToken: sess.AccessToken, @@ -83,18 +85,22 @@ func (p *Provider) FetchUser(session goth.Session) (goth.User, error) { } if user.AccessToken == "" { + log.Printf("[Instagram] Error: Missing access token for provider %s", p.Name()) return user, fmt.Errorf("%s cannot get user information without accessToken", p.providerName) } requestURL := endPointProfile + "?fields=id,username,account_type,media_count&access_token=" + url.QueryEscape(sess.AccessToken) + log.Printf("[Instagram] Making request to: %s", requestURL) response, err := p.Client().Get(requestURL) if err != nil { + log.Printf("[Instagram] Error making request: %v", err) return user, err } defer response.Body.Close() if response.StatusCode != http.StatusOK { + log.Printf("[Instagram] Received non-200 status code: %d", response.StatusCode) return user, fmt.Errorf("%s responded with a %d trying to fetch user information", p.providerName, response.StatusCode) } @@ -117,6 +123,7 @@ func (p *Provider) FetchUser(session goth.Session) (goth.User, error) { } func userFromReader(reader io.Reader, user *goth.User) error { + log.Printf("[Instagram] Parsing user data from response") u := struct { ID string `json:"id"` UserName string `json:"username"` @@ -130,8 +137,10 @@ func userFromReader(reader io.Reader, user *goth.User) error { }{} err := json.NewDecoder(reader).Decode(&u) if err != nil { + log.Printf("[Instagram] Error decoding user data: %v", err) return err } + log.Printf("[Instagram] Successfully parsed user data for ID: %s", u.ID) user.UserID = u.ID user.NickName = u.UserName user.Description = u.Biography From d7dd0df00a81e206342a6cc63e86268e95aed5b6 Mon Sep 17 00:00:00 2001 From: theeufj <141145908+theeufj@users.noreply.github.com> Date: Tue, 25 Feb 2025 18:46:27 +1100 Subject: [PATCH 07/14] logout the reader --- go.sum | 1 + providers/instagram/instagram.go | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/go.sum b/go.sum index 4ea7484e0..4449261c8 100644 --- a/go.sum +++ b/go.sum @@ -2,6 +2,7 @@ cloud.google.com/go/compute v1.20.1 h1:6aKEtlUiwEpJzM001l0yFkpXmUVXaN8W+fbkb2AZN cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/compute/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc= cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/providers/instagram/instagram.go b/providers/instagram/instagram.go index bd7e182c4..9a534d62b 100644 --- a/providers/instagram/instagram.go +++ b/providers/instagram/instagram.go @@ -27,6 +27,7 @@ var ( // You should always call `instagram.New` to get a new Provider. Never try to craete // one manually. func New(clientKey, secret, callbackURL string, scopes ...string) *Provider { + log.Printf("[Instagram] Creating new provider with callback URL: %s", callbackURL) p := &Provider{ ClientKey: clientKey, Secret: secret, @@ -34,6 +35,7 @@ func New(clientKey, secret, callbackURL string, scopes ...string) *Provider { providerName: "instagram", } p.config = newConfig(p, scopes) + log.Printf("[Instagram] Provider created with scopes: %v", p.config.Scopes) return p } @@ -68,6 +70,7 @@ func (p *Provider) Debug(debug bool) {} // BeginAuth asks Instagram for an authentication end-point. func (p *Provider) BeginAuth(state string) (goth.Session, error) { url := p.config.AuthCodeURL(state) + log.Printf("[Instagram] Beginning auth process with URL: %s", url) session := &Session{ AuthURL: url, } @@ -135,7 +138,15 @@ func userFromReader(reader io.Reader, user *goth.User) error { // Add other fields as needed }{} - err := json.NewDecoder(reader).Decode(&u) + + // logout the entire reader + bytes, err := ioutil.ReadAll(reader) + if err != nil { + log.Printf("[Instagram] Error reading response: %v", err) + } + log.Printf("[Instagram] Response: %s", string(bytes)) + + err = json.NewDecoder(reader).Decode(&u) if err != nil { log.Printf("[Instagram] Error decoding user data: %v", err) return err @@ -151,6 +162,7 @@ func userFromReader(reader io.Reader, user *goth.User) error { } func newConfig(p *Provider, scopes []string) *oauth2.Config { + log.Printf("[Instagram] Configuring OAuth2 with ClientID: %s", p.ClientKey) c := &oauth2.Config{ ClientID: p.ClientKey, ClientSecret: p.Secret, @@ -173,6 +185,7 @@ func newConfig(p *Provider, scopes []string) *oauth2.Config { } } + log.Printf("[Instagram] OAuth2 configuration complete. Auth URL: %s, Token URL: %s", authURL, tokenURL) return c } From 9f690ad946eb985934d3ab287391c8f13ab2b185 Mon Sep 17 00:00:00 2001 From: theeufj <141145908+theeufj@users.noreply.github.com> Date: Tue, 25 Feb 2025 18:53:09 +1100 Subject: [PATCH 08/14] added account type --- providers/instagram/instagram.go | 2 ++ user.go | 1 + 2 files changed, 3 insertions(+) diff --git a/providers/instagram/instagram.go b/providers/instagram/instagram.go index 9a534d62b..b7b691b21 100644 --- a/providers/instagram/instagram.go +++ b/providers/instagram/instagram.go @@ -157,6 +157,8 @@ func userFromReader(reader io.Reader, user *goth.User) error { user.Description = u.Biography user.AvatarURL = u.ProfileUrl user.Name = u.Name + user.AccountType = u.AccountType + // Set other fields as needed return err } diff --git a/user.go b/user.go index 3a8fd6c54..c6389d410 100644 --- a/user.go +++ b/user.go @@ -28,4 +28,5 @@ type User struct { RefreshToken string ExpiresAt time.Time IDToken string + AccountType string } From 24557097278a61d7910364225fc12259e361629c Mon Sep 17 00:00:00 2001 From: theeufj <141145908+theeufj@users.noreply.github.com> Date: Tue, 25 Feb 2025 19:09:27 +1100 Subject: [PATCH 09/14] fixes --- providers/instagram/instagram.go | 1 - user.go | 1 - 2 files changed, 2 deletions(-) diff --git a/providers/instagram/instagram.go b/providers/instagram/instagram.go index b7b691b21..273b1491a 100644 --- a/providers/instagram/instagram.go +++ b/providers/instagram/instagram.go @@ -157,7 +157,6 @@ func userFromReader(reader io.Reader, user *goth.User) error { user.Description = u.Biography user.AvatarURL = u.ProfileUrl user.Name = u.Name - user.AccountType = u.AccountType // Set other fields as needed return err diff --git a/user.go b/user.go index c6389d410..3a8fd6c54 100644 --- a/user.go +++ b/user.go @@ -28,5 +28,4 @@ type User struct { RefreshToken string ExpiresAt time.Time IDToken string - AccountType string } From 7d744afd6b8a94f626e0d17abb1e1cd1943a1961 Mon Sep 17 00:00:00 2001 From: theeufj <141145908+theeufj@users.noreply.github.com> Date: Tue, 25 Feb 2025 19:11:59 +1100 Subject: [PATCH 10/14] fixes for byte reader --- providers/instagram/instagram.go | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/providers/instagram/instagram.go b/providers/instagram/instagram.go index 273b1491a..3681382d0 100644 --- a/providers/instagram/instagram.go +++ b/providers/instagram/instagram.go @@ -139,14 +139,7 @@ func userFromReader(reader io.Reader, user *goth.User) error { // Add other fields as needed }{} - // logout the entire reader - bytes, err := ioutil.ReadAll(reader) - if err != nil { - log.Printf("[Instagram] Error reading response: %v", err) - } - log.Printf("[Instagram] Response: %s", string(bytes)) - - err = json.NewDecoder(reader).Decode(&u) + err := json.NewDecoder(reader).Decode(&u) if err != nil { log.Printf("[Instagram] Error decoding user data: %v", err) return err @@ -157,7 +150,6 @@ func userFromReader(reader io.Reader, user *goth.User) error { user.Description = u.Biography user.AvatarURL = u.ProfileUrl user.Name = u.Name - // Set other fields as needed return err } From 48945ab799a24782a71f831caac1cf81407a41ae Mon Sep 17 00:00:00 2001 From: theeufj <141145908+theeufj@users.noreply.github.com> Date: Tue, 25 Feb 2025 19:14:18 +1100 Subject: [PATCH 11/14] adding an accountType --- providers/instagram/instagram.go | 2 ++ user.go | 1 + 2 files changed, 3 insertions(+) diff --git a/providers/instagram/instagram.go b/providers/instagram/instagram.go index 3681382d0..df39514b1 100644 --- a/providers/instagram/instagram.go +++ b/providers/instagram/instagram.go @@ -150,6 +150,8 @@ func userFromReader(reader io.Reader, user *goth.User) error { user.Description = u.Biography user.AvatarURL = u.ProfileUrl user.Name = u.Name + user.AccountType = u.AccountType + // Set other fields as needed return err } diff --git a/user.go b/user.go index 3a8fd6c54..c6389d410 100644 --- a/user.go +++ b/user.go @@ -28,4 +28,5 @@ type User struct { RefreshToken string ExpiresAt time.Time IDToken string + AccountType string } From ba97ca7af7ea3f2ce1af63204e5ee005e1f5e03a Mon Sep 17 00:00:00 2001 From: theeufj <141145908+theeufj@users.noreply.github.com> Date: Fri, 28 Feb 2025 22:23:51 +1100 Subject: [PATCH 12/14] reader --- providers/instagram/instagram.go | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/providers/instagram/instagram.go b/providers/instagram/instagram.go index df39514b1..39faa313e 100644 --- a/providers/instagram/instagram.go +++ b/providers/instagram/instagram.go @@ -126,7 +126,6 @@ func (p *Provider) FetchUser(session goth.Session) (goth.User, error) { } func userFromReader(reader io.Reader, user *goth.User) error { - log.Printf("[Instagram] Parsing user data from response") u := struct { ID string `json:"id"` UserName string `json:"username"` @@ -139,12 +138,14 @@ func userFromReader(reader io.Reader, user *goth.User) error { // Add other fields as needed }{} + // log the entire reader + b, _ := ioutil.ReadAll(reader) + log.Printf("[Instagram] Reader: %s", string(b)) err := json.NewDecoder(reader).Decode(&u) if err != nil { log.Printf("[Instagram] Error decoding user data: %v", err) return err } - log.Printf("[Instagram] Successfully parsed user data for ID: %s", u.ID) user.UserID = u.ID user.NickName = u.UserName user.Description = u.Biography @@ -157,7 +158,6 @@ func userFromReader(reader io.Reader, user *goth.User) error { } func newConfig(p *Provider, scopes []string) *oauth2.Config { - log.Printf("[Instagram] Configuring OAuth2 with ClientID: %s", p.ClientKey) c := &oauth2.Config{ ClientID: p.ClientKey, ClientSecret: p.Secret, @@ -179,8 +179,6 @@ func newConfig(p *Provider, scopes []string) *oauth2.Config { c.Scopes = append(c.Scopes, scope) } } - - log.Printf("[Instagram] OAuth2 configuration complete. Auth URL: %s, Token URL: %s", authURL, tokenURL) return c } From ce235a53ffb6f6eccf222ddf6268a7d3d7e73236 Mon Sep 17 00:00:00 2001 From: theeufj <141145908+theeufj@users.noreply.github.com> Date: Fri, 28 Feb 2025 22:32:09 +1100 Subject: [PATCH 13/14] add logging --- providers/instagram/instagram.go | 1 + 1 file changed, 1 insertion(+) diff --git a/providers/instagram/instagram.go b/providers/instagram/instagram.go index 39faa313e..6bb8bde80 100644 --- a/providers/instagram/instagram.go +++ b/providers/instagram/instagram.go @@ -108,6 +108,7 @@ func (p *Provider) FetchUser(session goth.Session) (goth.User, error) { } bits, err := ioutil.ReadAll(response.Body) + log.Println("[Instagram] Response body: ", string(bits)) if err != nil { return user, err } From 4a28463fe508e0da683f5fb2d0520ab355773b21 Mon Sep 17 00:00:00 2001 From: theeufj <141145908+theeufj@users.noreply.github.com> Date: Fri, 28 Feb 2025 22:38:54 +1100 Subject: [PATCH 14/14] profile url --- providers/instagram/instagram.go | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/providers/instagram/instagram.go b/providers/instagram/instagram.go index 6bb8bde80..dcdcb317b 100644 --- a/providers/instagram/instagram.go +++ b/providers/instagram/instagram.go @@ -27,7 +27,6 @@ var ( // You should always call `instagram.New` to get a new Provider. Never try to craete // one manually. func New(clientKey, secret, callbackURL string, scopes ...string) *Provider { - log.Printf("[Instagram] Creating new provider with callback URL: %s", callbackURL) p := &Provider{ ClientKey: clientKey, Secret: secret, @@ -35,7 +34,6 @@ func New(clientKey, secret, callbackURL string, scopes ...string) *Provider { providerName: "instagram", } p.config = newConfig(p, scopes) - log.Printf("[Instagram] Provider created with scopes: %v", p.config.Scopes) return p } @@ -70,7 +68,6 @@ func (p *Provider) Debug(debug bool) {} // BeginAuth asks Instagram for an authentication end-point. func (p *Provider) BeginAuth(state string) (goth.Session, error) { url := p.config.AuthCodeURL(state) - log.Printf("[Instagram] Beginning auth process with URL: %s", url) session := &Session{ AuthURL: url, } @@ -80,7 +77,6 @@ func (p *Provider) BeginAuth(state string) (goth.Session, error) { // FetchUser will go to Instagram and access basic information about the user. func (p *Provider) FetchUser(session goth.Session) (goth.User, error) { sess := session.(*Session) - log.Printf("[Instagram] Beginning FetchUser for provider: %s", p.Name()) user := goth.User{ AccessToken: sess.AccessToken, @@ -92,8 +88,7 @@ func (p *Provider) FetchUser(session goth.Session) (goth.User, error) { return user, fmt.Errorf("%s cannot get user information without accessToken", p.providerName) } - requestURL := endPointProfile + "?fields=id,username,account_type,media_count&access_token=" + url.QueryEscape(sess.AccessToken) - log.Printf("[Instagram] Making request to: %s", requestURL) + requestURL := endPointProfile + "?fields=id,username,account_type,media_count,profile_picture_url&access_token=" + url.QueryEscape(sess.AccessToken) response, err := p.Client().Get(requestURL) if err != nil { @@ -108,7 +103,6 @@ func (p *Provider) FetchUser(session goth.Session) (goth.User, error) { } bits, err := ioutil.ReadAll(response.Body) - log.Println("[Instagram] Response body: ", string(bits)) if err != nil { return user, err } @@ -138,10 +132,6 @@ func userFromReader(reader io.Reader, user *goth.User) error { // Add other fields as needed }{} - - // log the entire reader - b, _ := ioutil.ReadAll(reader) - log.Printf("[Instagram] Reader: %s", string(b)) err := json.NewDecoder(reader).Decode(&u) if err != nil { log.Printf("[Instagram] Error decoding user data: %v", err)