fix: add email query to github idp if email empty (#10705)

# Which Problems Are Solved

In the integration with Github, private emails are not returned with the
userinfo.

# How the Problems Are Solved

If the scope `user:email` is set in the Github IDP and the email is not
included in the userinfo, a request to Github's API is executed to query
the email of the user.

# Additional Changes

Additional tests.

# Additional Context

Closes #10098

---------

Co-authored-by: Marco A. <[email protected]>
Co-authored-by: Livio Spring <[email protected]>
This commit is contained in:
Stefan Benz
2025-10-07 06:13:06 +00:00
committed by GitHub
co-authored by Marco A. Livio Spring
parent 695db96745
commit a7e1bfb4a3
7 changed files with 458 additions and 42 deletions
+7 -4
View File
@@ -13,10 +13,11 @@ import (
)
const (
authURL = "https://github.com/login/oauth/authorize"
tokenURL = "https://github.com/login/oauth/access_token"
profileURL = "https://api.github.com/user"
name = "GitHub"
authURL = "https://github.com/login/oauth/authorize"
tokenURL = "https://github.com/login/oauth/access_token"
profileURL = "https://api.github.com/user"
emailURLSuffix = "/emails"
name = "GitHub"
)
var _ idp.Provider = (*Provider)(nil)
@@ -43,12 +44,14 @@ func NewCustomURL(name, clientID, secret, callbackURL, authURL, tokenURL, profil
}
return &Provider{
Provider: rp,
emailURL: profileURL + emailURLSuffix,
}, nil
}
// Provider is the [idp.Provider] implementation for GitHub
type Provider struct {
*oauth.Provider
emailURL string
}
func newConfig(clientID, secret, callbackURL, authURL, tokenURL string, scopes []string) *oauth2.Config {