Documentation
¶
Index ¶
- Constants
- Variables
- type BaseConfig
- type BaseProvider
- func (b *BaseProvider) ExchangeCode(ctx context.Context, code string, opts ...oauth2.AuthCodeOption) (*http.Client, *oauth2.Token, *ProviderTokens, error)
- func (b *BaseProvider) FetchUserInfo(ctx context.Context, client *http.Client) ([]byte, error)
- func (b *BaseProvider) GetOAuth2Config() *oauth2.Config
- func (b *BaseProvider) Logger() *zap.Logger
- func (b *BaseProvider) MapClaims(data []byte, customClaims *CustomClaims) error
- func (b *BaseProvider) Name() string
- func (b *BaseProvider) ParseUserInfo(data []byte) (*UserInfo, error)
- func (b *BaseProvider) SetupOAuth2Config(cfg *ProviderConfig)
- type CustomClaims
- type GitHubConfig
- type GitHubProvider
- func (p *GitHubProvider) AuthCodeURL(state string, opts ...oauth2.AuthCodeOption) string
- func (p *GitHubProvider) Configure(cfg *ProviderConfig) error
- func (p *GitHubProvider) ConfigureWithTeams(cfg *GitHubProviderConfig) error
- func (p *GitHubProvider) GetUserInfo(ctx context.Context, r *http.Request, opts ...oauth2.AuthCodeOption) (*UserInfo, *ProviderTokens, error)
- type GitHubProviderConfig
- type GitHubTeamMembershipState
- type GitHubUserInfo
- type GoogleConfig
- type GoogleProvider
- type GoogleUserInfo
- type OpenIDConfig
- type OpenIDDiscoveryConfig
- type OpenIDProvider
- func (p *OpenIDProvider) AuthCodeURL(state string, opts ...oauth2.AuthCodeOption) string
- func (p *OpenIDProvider) Configure(cfg *ProviderConfig) error
- func (p *OpenIDProvider) GetDiscoveryConfig() *OpenIDDiscoveryConfig
- func (p *OpenIDProvider) GetUserInfo(ctx context.Context, r *http.Request, opts ...oauth2.AuthCodeOption) (*UserInfo, *ProviderTokens, error)
- type Provider
- type ProviderConfig
- type ProviderTokens
- type UserInfo
Constants ¶
const ( GitHubProviderName = "github" GitHubUserInfoURL = "https://api.github.com/user" GitHubUserOrgURL = "https://api.github.com/orgs/:org_id/members/:username" GitHubUserTeamURL = "https://api.github.com/orgs/:org_id/teams/:team_slug/memberships/:username" )
const ( GoogleProviderName = "google" GoogleUserInfoURL = "https://www.googleapis.com/oauth2/v3/userinfo" )
const (
OpenIDProviderName = "openid"
)
Variables ¶
var ( ErrMissingClientID = errors.New("client_id is required") ErrMissingClientSecret = errors.New("client_secret is required") ErrMissingIssuerURL = errors.New("issuer_url is required") ErrMissingRedirectURL = errors.New("redirect_url is required") )
Config validation errors
Functions ¶
This section is empty.
Types ¶
type BaseConfig ¶
type BaseConfig struct {
ClientID string `json:"client_id"`
ClientSecret string `json:"client_secret"`
RedirectURL string `json:"redirect_url"`
Scopes []string `json:"scopes,omitempty"`
}
BaseConfig holds common OAuth configuration fields shared by all providers.
func (*BaseConfig) Validate ¶
func (c *BaseConfig) Validate() error
Validate checks that required base fields are present.
type BaseProvider ¶
type BaseProvider struct {
// contains filtered or unexported fields
}
BaseProvider provides common functionality for OAuth providers.
func (*BaseProvider) ExchangeCode ¶
func (b *BaseProvider) ExchangeCode(ctx context.Context, code string, opts ...oauth2.AuthCodeOption) (*http.Client, *oauth2.Token, *ProviderTokens, error)
ExchangeCode exchanges the authorization code for tokens and returns an HTTP client.
func (*BaseProvider) FetchUserInfo ¶
FetchUserInfo fetches user information from the provider's userinfo endpoint.
func (*BaseProvider) GetOAuth2Config ¶
func (b *BaseProvider) GetOAuth2Config() *oauth2.Config
GetOAuth2Config returns the OAuth2 configuration for generating auth URLs.
func (*BaseProvider) Logger ¶
func (b *BaseProvider) Logger() *zap.Logger
Logger returns the configured logger.
func (*BaseProvider) MapClaims ¶
func (b *BaseProvider) MapClaims(data []byte, customClaims *CustomClaims) error
MapClaims extracts configured claims from the raw response.
func (*BaseProvider) ParseUserInfo ¶
func (b *BaseProvider) ParseUserInfo(data []byte) (*UserInfo, error)
ParseUserInfo unmarshals the userinfo response into a UserInfo struct.
func (*BaseProvider) SetupOAuth2Config ¶
func (b *BaseProvider) SetupOAuth2Config(cfg *ProviderConfig)
SetupOAuth2Config initializes the OAuth2 configuration.
type CustomClaims ¶
CustomClaims holds additional claims extracted from the provider response.
type GitHubConfig ¶
type GitHubConfig struct {
BaseConfig
// Organization restricts login to members of specific GitHub orgs (optional)
AllowedOrgs []string `json:"allowed_orgs,omitempty"`
// Teams restricts login to members of specific teams (format: "org/team")
AllowedTeams []string `json:"allowed_teams,omitempty"`
// GitHub Enterprise support (optional)
EnterpriseURL string `json:"enterprise_url,omitempty"`
}
GitHubConfig holds configuration for GitHub OAuth.
func (*GitHubConfig) Validate ¶
func (c *GitHubConfig) Validate() error
Validate checks that required GitHub fields are present.
type GitHubProvider ¶
type GitHubProvider struct {
BaseProvider
// contains filtered or unexported fields
}
GitHubProvider implements the Provider interface for GitHub OAuth.
func NewGitHubProvider ¶
func NewGitHubProvider() *GitHubProvider
NewGitHubProvider creates a new GitHub OAuth provider instance.
func (*GitHubProvider) AuthCodeURL ¶
func (p *GitHubProvider) AuthCodeURL(state string, opts ...oauth2.AuthCodeOption) string
AuthCodeURL returns the URL to redirect the user to for authentication.
func (*GitHubProvider) Configure ¶
func (p *GitHubProvider) Configure(cfg *ProviderConfig) error
Configure initializes the GitHub provider with the given configuration.
func (*GitHubProvider) ConfigureWithTeams ¶
func (p *GitHubProvider) ConfigureWithTeams(cfg *GitHubProviderConfig) error
ConfigureWithTeams initializes the GitHub provider with team/org membership checking.
func (*GitHubProvider) GetUserInfo ¶
func (p *GitHubProvider) GetUserInfo(ctx context.Context, r *http.Request, opts ...oauth2.AuthCodeOption) (*UserInfo, *ProviderTokens, error)
GetUserInfo exchanges the authorization code for tokens and retrieves user information.
type GitHubProviderConfig ¶
type GitHubProviderConfig struct {
*ProviderConfig
TeamWhitelist []string // List of org or org/team to check membership
UserOrgURL string // URL template for checking org membership
UserTeamURL string // URL template for checking team membership
}
GitHubProviderConfig extends ProviderConfig with GitHub-specific options.
type GitHubTeamMembershipState ¶
type GitHubTeamMembershipState struct {
State string `json:"state"` // "active" or "pending"
Role string `json:"role"` // "member" or "maintainer"
}
GitHubTeamMembershipState represents the team membership response from GitHub.
type GitHubUserInfo ¶
type GitHubUserInfo struct {
ID int `json:"id"`
Login string `json:"login"`
Name string `json:"name"`
Email string `json:"email"`
AvatarURL string `json:"avatar_url"`
HTMLURL string `json:"html_url"`
Type string `json:"type"`
Company string `json:"company"`
Blog string `json:"blog"`
Location string `json:"location"`
Bio string `json:"bio"`
}
GitHubUserInfo represents user information from GitHub's API.
type GoogleConfig ¶
type GoogleConfig struct {
BaseConfig
// HostedDomain restricts login to a specific G Suite domain (optional)
HostedDomain string `json:"hosted_domain,omitempty"`
}
GoogleConfig holds configuration for Google OAuth.
func (*GoogleConfig) Validate ¶
func (c *GoogleConfig) Validate() error
Validate checks that required Google fields are present.
type GoogleProvider ¶
type GoogleProvider struct {
BaseProvider
}
GoogleProvider implements the Provider interface for Google OAuth.
func NewGoogleProvider ¶
func NewGoogleProvider() *GoogleProvider
NewGoogleProvider creates a new Google OAuth provider instance.
func (*GoogleProvider) AuthCodeURL ¶
func (p *GoogleProvider) AuthCodeURL(state string, opts ...oauth2.AuthCodeOption) string
AuthCodeURL returns the URL to redirect the user to for authentication.
func (*GoogleProvider) Configure ¶
func (p *GoogleProvider) Configure(cfg *ProviderConfig) error
Configure initializes the Google provider with the given configuration.
func (*GoogleProvider) GetUserInfo ¶
func (p *GoogleProvider) GetUserInfo(ctx context.Context, r *http.Request, opts ...oauth2.AuthCodeOption) (*UserInfo, *ProviderTokens, error)
GetUserInfo exchanges the authorization code for tokens and retrieves user information.
type GoogleUserInfo ¶
type GoogleUserInfo struct {
Sub string `json:"sub"`
Email string `json:"email"`
EmailVerified bool `json:"email_verified"`
Name string `json:"name"`
GivenName string `json:"given_name"`
FamilyName string `json:"family_name"`
Picture string `json:"picture"`
Locale string `json:"locale"`
HostDomain string `json:"hd"` // G Suite domain
}
GoogleUserInfo represents user information from Google's userinfo endpoint.
type OpenIDConfig ¶
type OpenIDConfig struct {
BaseConfig
// IssuerURL is used for OIDC discovery (/.well-known/openid-configuration)
IssuerURL string `json:"issuer_url"`
// Optional: explicit URLs if discovery is not available
AuthURL string `json:"auth_url,omitempty"`
TokenURL string `json:"token_url,omitempty"`
UserInfoURL string `json:"userinfo_url,omitempty"`
// Optional: claims to extract from the ID token or userinfo response
ClaimsToExtract []string `json:"claims_to_extract,omitempty"`
}
OpenIDConfig holds configuration for generic OpenID Connect providers.
func (*OpenIDConfig) Validate ¶
func (c *OpenIDConfig) Validate() error
Validate checks that required OpenID fields are present.
type OpenIDDiscoveryConfig ¶
type OpenIDDiscoveryConfig struct {
Issuer string `json:"issuer"`
AuthorizationEndpoint string `json:"authorization_endpoint"`
TokenEndpoint string `json:"token_endpoint"`
UserinfoEndpoint string `json:"userinfo_endpoint"`
JwksURI string `json:"jwks_uri"`
ScopesSupported []string `json:"scopes_supported"`
ClaimsSupported []string `json:"claims_supported"`
}
OpenIDDiscoveryConfig holds the discovered OIDC configuration from the well-known endpoint.
type OpenIDProvider ¶
type OpenIDProvider struct {
BaseProvider
// contains filtered or unexported fields
}
OpenIDProvider implements the Provider interface for generic OpenID Connect providers.
func NewOpenIDProvider ¶
func NewOpenIDProvider() *OpenIDProvider
NewOpenIDProvider creates a new OpenID Connect provider instance.
func (*OpenIDProvider) AuthCodeURL ¶
func (p *OpenIDProvider) AuthCodeURL(state string, opts ...oauth2.AuthCodeOption) string
AuthCodeURL returns the URL to redirect the user to for authentication.
func (*OpenIDProvider) Configure ¶
func (p *OpenIDProvider) Configure(cfg *ProviderConfig) error
Configure initializes the OpenID provider with the given configuration. If IssuerURL is provided, it will attempt OIDC discovery to auto-configure endpoints.
func (*OpenIDProvider) GetDiscoveryConfig ¶
func (p *OpenIDProvider) GetDiscoveryConfig() *OpenIDDiscoveryConfig
GetDiscoveryConfig returns the discovered OIDC configuration, if available.
func (*OpenIDProvider) GetUserInfo ¶
func (p *OpenIDProvider) GetUserInfo(ctx context.Context, r *http.Request, opts ...oauth2.AuthCodeOption) (*UserInfo, *ProviderTokens, error)
GetUserInfo exchanges the authorization code for tokens and retrieves user information.
type Provider ¶
type Provider interface {
// Name returns the provider identifier (e.g., "google", "github", "openid").
Name() string
// Configure initializes the provider with the given configuration.
Configure(cfg *ProviderConfig) error
// GetUserInfo exchanges the authorization code for tokens and retrieves user information.
GetUserInfo(ctx context.Context, r *http.Request, opts ...oauth2.AuthCodeOption) (*UserInfo, *ProviderTokens, error)
}
Provider defines the interface that all OAuth/OIDC providers must implement.
type ProviderConfig ¶
type ProviderConfig struct {
// OAuth2 configuration
ClientID string
ClientSecret string
RedirectURL string
Scopes []string
// Provider-specific URLs (some providers use discovery, others need explicit URLs)
AuthURL string
TokenURL string
UserInfoURL string
// For OIDC providers
IssuerURL string
// Optional: claims to extract from the ID token or userinfo response
ClaimsToExtract []string
// Logger
Logger *zap.Logger
}
ProviderConfig holds the configuration needed to set up an OAuth provider.
type ProviderTokens ¶
type ProviderTokens struct {
AccessToken string
RefreshToken string
IDToken string
TokenType string
Expiry int64 // Unix timestamp
}
ProviderTokens holds the tokens received from the OAuth provider.
type UserInfo ¶
type UserInfo struct {
// Standard claims
Subject string `json:"sub"`
Email string `json:"email"`
EmailVerified bool `json:"email_verified"`
Name string `json:"name"`
Username string `json:"username,omitempty"`
Picture string `json:"picture,omitempty"`
// Provider-specific identifier
ProviderUserID string `json:"-"`
// Raw claims from the provider (for custom claim extraction)
RawClaims map[string]any `json:"-"`
}
UserInfo represents the authenticated user's information.
func (*UserInfo) PrepareUserData ¶
func (u *UserInfo) PrepareUserData()
PrepareUserData ensures required fields are populated with fallbacks.