Loading CHANGELOG.md +2 −1 Original line number Diff line number Diff line Loading @@ -4,7 +4,8 @@ All notable changes to this project are documented below. The format is based on [keep a changelog](http://keepachangelog.com) and this project uses [semantic versioning](http://semver.org). ## [Unreleased] ### Changed - Use the Facebook Graph API v11.0 version. ## [3.5.0] - 2021-08-10 ### Added Loading server/core_authenticate.go +1 −1 Original line number Diff line number Diff line Loading @@ -449,7 +449,7 @@ func AuthenticateFacebook(ctx context.Context, logger *zap.Logger, db *sql.DB, c // Create a new account. userID := uuid.Must(uuid.NewV4()).String() query = "INSERT INTO users (id, username, display_name, email, avatar_url, facebook_id, create_time, update_time) VALUES ($1, $2, $3, $4, $5, $6, now(), now())" result, err := db.ExecContext(ctx, query, userID, username, facebookProfile.Name, facebookProfile.Email, facebookProfile.Picture, facebookProfile.ID) result, err := db.ExecContext(ctx, query, userID, username, facebookProfile.Name, facebookProfile.Email, facebookProfile.Picture.Data.Url, facebookProfile.ID) if err != nil { var pgErr *pgconn.PgError if errors.As(err, &pgErr) && pgErr.Code == dbErrorUniqueViolation { Loading server/core_link.go +1 −1 Original line number Diff line number Diff line Loading @@ -213,7 +213,7 @@ AND (NOT EXISTS FROM users WHERE facebook_id = $2 AND NOT id = $1))`, userID, facebookProfile.ID, facebookProfile.Name, facebookProfile.Email, facebookProfile.Picture) facebookProfile.ID, facebookProfile.Name, facebookProfile.Email, facebookProfile.Picture.Data.Url) if err != nil { logger.Error("Could not link Facebook ID.", zap.Error(err), zap.Any("input", token)) Loading social/social.go +19 −8 Original line number Diff line number Diff line Loading @@ -86,7 +86,18 @@ type FacebookProfile struct { ID string `json:"id"` Name string `json:"name"` Email string `json:"email"` Picture string `json:"picture"` Picture FacebookPictureData `json:"picture"` } type FacebookPictureData struct { Data FacebookPicture `json:"data"` } type FacebookPicture struct { Height int `json:"height"` Width int `json:"width"` IsSilhouette bool `json:"is_silhouette"` Url string `json:"url"` } type facebookPagingCursors struct { Loading Loading @@ -166,8 +177,8 @@ func NewClient(logger *zap.Logger, timeout time.Duration) *Client { func (c *Client) GetFacebookProfile(ctx context.Context, accessToken string) (*FacebookProfile, error) { c.logger.Debug("Getting Facebook profile", zap.String("token", accessToken)) path := "https://graph.facebook.com/v9.0/me?access_token=" + url.QueryEscape(accessToken) + "&fields=" + url.QueryEscape("name,email") path := "https://graph.facebook.com/v11.0/me?access_token=" + url.QueryEscape(accessToken) + "&fields=" + url.QueryEscape("id,name,email,picture") var profile FacebookProfile err := c.request(ctx, "facebook profile", path, nil, &profile) if err != nil { Loading @@ -185,7 +196,7 @@ func (c *Client) GetFacebookFriends(ctx context.Context, accessToken string) ([] after := "" for { // In FB Graph API 2.0+ this only returns friends that also use the same app. path := "https://graph.facebook.com/v9.0/me/friends?access_token=" + url.QueryEscape(accessToken) path := "https://graph.facebook.com/v11.0/me/friends?access_token=" + url.QueryEscape(accessToken) if after != "" { path += "&after=" + after } Loading Loading @@ -807,7 +818,7 @@ func (c *Client) CheckFacebookLimitedLoginToken(ctx context.Context, appId strin } } if v, ok := claims["picture"]; ok { if profile.Picture, ok = v.(string); !ok { if profile.Picture.Data.Url, ok = v.(string); !ok { return nil, errors.New("facebook limited login token picture field invalid") } } Loading Loading
CHANGELOG.md +2 −1 Original line number Diff line number Diff line Loading @@ -4,7 +4,8 @@ All notable changes to this project are documented below. The format is based on [keep a changelog](http://keepachangelog.com) and this project uses [semantic versioning](http://semver.org). ## [Unreleased] ### Changed - Use the Facebook Graph API v11.0 version. ## [3.5.0] - 2021-08-10 ### Added Loading
server/core_authenticate.go +1 −1 Original line number Diff line number Diff line Loading @@ -449,7 +449,7 @@ func AuthenticateFacebook(ctx context.Context, logger *zap.Logger, db *sql.DB, c // Create a new account. userID := uuid.Must(uuid.NewV4()).String() query = "INSERT INTO users (id, username, display_name, email, avatar_url, facebook_id, create_time, update_time) VALUES ($1, $2, $3, $4, $5, $6, now(), now())" result, err := db.ExecContext(ctx, query, userID, username, facebookProfile.Name, facebookProfile.Email, facebookProfile.Picture, facebookProfile.ID) result, err := db.ExecContext(ctx, query, userID, username, facebookProfile.Name, facebookProfile.Email, facebookProfile.Picture.Data.Url, facebookProfile.ID) if err != nil { var pgErr *pgconn.PgError if errors.As(err, &pgErr) && pgErr.Code == dbErrorUniqueViolation { Loading
server/core_link.go +1 −1 Original line number Diff line number Diff line Loading @@ -213,7 +213,7 @@ AND (NOT EXISTS FROM users WHERE facebook_id = $2 AND NOT id = $1))`, userID, facebookProfile.ID, facebookProfile.Name, facebookProfile.Email, facebookProfile.Picture) facebookProfile.ID, facebookProfile.Name, facebookProfile.Email, facebookProfile.Picture.Data.Url) if err != nil { logger.Error("Could not link Facebook ID.", zap.Error(err), zap.Any("input", token)) Loading
social/social.go +19 −8 Original line number Diff line number Diff line Loading @@ -86,7 +86,18 @@ type FacebookProfile struct { ID string `json:"id"` Name string `json:"name"` Email string `json:"email"` Picture string `json:"picture"` Picture FacebookPictureData `json:"picture"` } type FacebookPictureData struct { Data FacebookPicture `json:"data"` } type FacebookPicture struct { Height int `json:"height"` Width int `json:"width"` IsSilhouette bool `json:"is_silhouette"` Url string `json:"url"` } type facebookPagingCursors struct { Loading Loading @@ -166,8 +177,8 @@ func NewClient(logger *zap.Logger, timeout time.Duration) *Client { func (c *Client) GetFacebookProfile(ctx context.Context, accessToken string) (*FacebookProfile, error) { c.logger.Debug("Getting Facebook profile", zap.String("token", accessToken)) path := "https://graph.facebook.com/v9.0/me?access_token=" + url.QueryEscape(accessToken) + "&fields=" + url.QueryEscape("name,email") path := "https://graph.facebook.com/v11.0/me?access_token=" + url.QueryEscape(accessToken) + "&fields=" + url.QueryEscape("id,name,email,picture") var profile FacebookProfile err := c.request(ctx, "facebook profile", path, nil, &profile) if err != nil { Loading @@ -185,7 +196,7 @@ func (c *Client) GetFacebookFriends(ctx context.Context, accessToken string) ([] after := "" for { // In FB Graph API 2.0+ this only returns friends that also use the same app. path := "https://graph.facebook.com/v9.0/me/friends?access_token=" + url.QueryEscape(accessToken) path := "https://graph.facebook.com/v11.0/me/friends?access_token=" + url.QueryEscape(accessToken) if after != "" { path += "&after=" + after } Loading Loading @@ -807,7 +818,7 @@ func (c *Client) CheckFacebookLimitedLoginToken(ctx context.Context, appId strin } } if v, ok := claims["picture"]; ok { if profile.Picture, ok = v.(string); !ok { if profile.Picture.Data.Url, ok = v.(string); !ok { return nil, errors.New("facebook limited login token picture field invalid") } } Loading