Documentation
¶
Index ¶
- Constants
- func GetAllProviders() map[string]Provider
- func IsCustomProvider(name string) bool
- func IsProviderRegistered(name string) bool
- func LoadCustomProviders() error
- func Register(name string, provider Provider)
- func RegisterCustom(name string, provider Provider)
- func RegisterOrUpdateCustomProvider(config *model.CustomOAuthProvider)
- func ReloadCustomProviders() error
- func Unregister(name string)
- func UnregisterCustomProvider(slug string)
- type DiscordProvider
- func (p *DiscordProvider) ExchangeToken(ctx context.Context, code string, c *gin.Context) (*OAuthToken, error)
- func (p *DiscordProvider) FillUserByProviderID(user *model.User, providerUserID string) error
- func (p *DiscordProvider) GetName() string
- func (p *DiscordProvider) GetProviderPrefix() string
- func (p *DiscordProvider) GetUserInfo(ctx context.Context, token *OAuthToken) (*OAuthUser, error)
- func (p *DiscordProvider) IsEnabled() bool
- func (p *DiscordProvider) IsUserIDTaken(providerUserID string) bool
- func (p *DiscordProvider) SetProviderUserID(user *model.User, providerUserID string)
- type GenericOAuthProvider
- func (p *GenericOAuthProvider) ExchangeToken(ctx context.Context, code string, c *gin.Context) (*OAuthToken, error)
- func (p *GenericOAuthProvider) FillUserByProviderID(user *model.User, providerUserID string) error
- func (p *GenericOAuthProvider) GetConfig() *model.CustomOAuthProvider
- func (p *GenericOAuthProvider) GetName() string
- func (p *GenericOAuthProvider) GetProviderId() int
- func (p *GenericOAuthProvider) GetProviderPrefix() string
- func (p *GenericOAuthProvider) GetUserInfo(ctx context.Context, token *OAuthToken) (*OAuthUser, error)
- func (p *GenericOAuthProvider) IsEnabled() bool
- func (p *GenericOAuthProvider) IsGenericProvider() bool
- func (p *GenericOAuthProvider) IsUserIDTaken(providerUserID string) bool
- func (p *GenericOAuthProvider) SetProviderUserID(user *model.User, providerUserID string)
- type GitHubProvider
- func (p *GitHubProvider) ExchangeToken(ctx context.Context, code string, c *gin.Context) (*OAuthToken, error)
- func (p *GitHubProvider) FillUserByProviderID(user *model.User, providerUserID string) error
- func (p *GitHubProvider) GetName() string
- func (p *GitHubProvider) GetProviderPrefix() string
- func (p *GitHubProvider) GetUserInfo(ctx context.Context, token *OAuthToken) (*OAuthUser, error)
- func (p *GitHubProvider) IsEnabled() bool
- func (p *GitHubProvider) IsUserIDTaken(providerUserID string) bool
- func (p *GitHubProvider) SetProviderUserID(user *model.User, providerUserID string)
- type LinuxDOProvider
- func (p *LinuxDOProvider) ExchangeToken(ctx context.Context, code string, c *gin.Context) (*OAuthToken, error)
- func (p *LinuxDOProvider) FillUserByProviderID(user *model.User, providerUserID string) error
- func (p *LinuxDOProvider) GetName() string
- func (p *LinuxDOProvider) GetProviderPrefix() string
- func (p *LinuxDOProvider) GetUserInfo(ctx context.Context, token *OAuthToken) (*OAuthUser, error)
- func (p *LinuxDOProvider) IsEnabled() bool
- func (p *LinuxDOProvider) IsUserIDTaken(providerUserID string) bool
- func (p *LinuxDOProvider) SetProviderUserID(user *model.User, providerUserID string)
- type OAuthError
- type OAuthToken
- type OAuthUser
- type OIDCProvider
- func (p *OIDCProvider) ExchangeToken(ctx context.Context, code string, c *gin.Context) (*OAuthToken, error)
- func (p *OIDCProvider) FillUserByProviderID(user *model.User, providerUserID string) error
- func (p *OIDCProvider) GetName() string
- func (p *OIDCProvider) GetProviderPrefix() string
- func (p *OIDCProvider) GetUserInfo(ctx context.Context, token *OAuthToken) (*OAuthUser, error)
- func (p *OIDCProvider) IsEnabled() bool
- func (p *OIDCProvider) IsUserIDTaken(providerUserID string) bool
- func (p *OIDCProvider) SetProviderUserID(user *model.User, providerUserID string)
- type Provider
- type TrustLevelError
Constants ¶
const ( AuthStyleAutoDetect = 0 // Auto-detect based on server response AuthStyleInParams = 1 // Send client_id and client_secret as POST parameters AuthStyleInHeader = 2 // Send as Basic Auth header )
AuthStyle defines how to send client credentials
Variables ¶
This section is empty.
Functions ¶
func GetAllProviders ¶
GetAllProviders returns all registered OAuth providers
func IsCustomProvider ¶
IsCustomProvider checks if a provider is a custom provider
func IsProviderRegistered ¶
IsProviderRegistered checks if a provider is registered
func LoadCustomProviders ¶
func LoadCustomProviders() error
LoadCustomProviders loads all custom OAuth providers from the database
func RegisterCustom ¶
RegisterCustom registers a custom OAuth provider (can be unregistered later)
func RegisterOrUpdateCustomProvider ¶
func RegisterOrUpdateCustomProvider(config *model.CustomOAuthProvider)
RegisterOrUpdateCustomProvider registers or updates a single custom provider
func ReloadCustomProviders ¶
func ReloadCustomProviders() error
ReloadCustomProviders reloads all custom OAuth providers from the database
func UnregisterCustomProvider ¶
func UnregisterCustomProvider(slug string)
UnregisterCustomProvider unregisters a custom provider by slug
Types ¶
type DiscordProvider ¶
type DiscordProvider struct{}
DiscordProvider implements OAuth for Discord
func (*DiscordProvider) ExchangeToken ¶
func (p *DiscordProvider) ExchangeToken(ctx context.Context, code string, c *gin.Context) (*OAuthToken, error)
func (*DiscordProvider) FillUserByProviderID ¶
func (p *DiscordProvider) FillUserByProviderID(user *model.User, providerUserID string) error
func (*DiscordProvider) GetName ¶
func (p *DiscordProvider) GetName() string
func (*DiscordProvider) GetProviderPrefix ¶
func (p *DiscordProvider) GetProviderPrefix() string
func (*DiscordProvider) GetUserInfo ¶
func (p *DiscordProvider) GetUserInfo(ctx context.Context, token *OAuthToken) (*OAuthUser, error)
func (*DiscordProvider) IsEnabled ¶
func (p *DiscordProvider) IsEnabled() bool
func (*DiscordProvider) IsUserIDTaken ¶
func (p *DiscordProvider) IsUserIDTaken(providerUserID string) bool
func (*DiscordProvider) SetProviderUserID ¶
func (p *DiscordProvider) SetProviderUserID(user *model.User, providerUserID string)
type GenericOAuthProvider ¶
type GenericOAuthProvider struct {
// contains filtered or unexported fields
}
GenericOAuthProvider implements OAuth for custom/generic OAuth providers
func GetEnabledCustomProviders ¶
func GetEnabledCustomProviders() []*GenericOAuthProvider
GetEnabledCustomProviders returns all enabled custom OAuth providers
func NewGenericOAuthProvider ¶
func NewGenericOAuthProvider(config *model.CustomOAuthProvider) *GenericOAuthProvider
NewGenericOAuthProvider creates a new generic OAuth provider from config
func (*GenericOAuthProvider) ExchangeToken ¶
func (p *GenericOAuthProvider) ExchangeToken(ctx context.Context, code string, c *gin.Context) (*OAuthToken, error)
func (*GenericOAuthProvider) FillUserByProviderID ¶
func (p *GenericOAuthProvider) FillUserByProviderID(user *model.User, providerUserID string) error
func (*GenericOAuthProvider) GetConfig ¶
func (p *GenericOAuthProvider) GetConfig() *model.CustomOAuthProvider
func (*GenericOAuthProvider) GetName ¶
func (p *GenericOAuthProvider) GetName() string
func (*GenericOAuthProvider) GetProviderId ¶
func (p *GenericOAuthProvider) GetProviderId() int
GetProviderId returns the provider ID for binding purposes
func (*GenericOAuthProvider) GetProviderPrefix ¶
func (p *GenericOAuthProvider) GetProviderPrefix() string
func (*GenericOAuthProvider) GetUserInfo ¶
func (p *GenericOAuthProvider) GetUserInfo(ctx context.Context, token *OAuthToken) (*OAuthUser, error)
func (*GenericOAuthProvider) IsEnabled ¶
func (p *GenericOAuthProvider) IsEnabled() bool
func (*GenericOAuthProvider) IsGenericProvider ¶
func (p *GenericOAuthProvider) IsGenericProvider() bool
IsGenericProvider returns true for generic providers
func (*GenericOAuthProvider) IsUserIDTaken ¶
func (p *GenericOAuthProvider) IsUserIDTaken(providerUserID string) bool
func (*GenericOAuthProvider) SetProviderUserID ¶
func (p *GenericOAuthProvider) SetProviderUserID(user *model.User, providerUserID string)
type GitHubProvider ¶
type GitHubProvider struct{}
GitHubProvider implements OAuth for GitHub
func (*GitHubProvider) ExchangeToken ¶
func (p *GitHubProvider) ExchangeToken(ctx context.Context, code string, c *gin.Context) (*OAuthToken, error)
func (*GitHubProvider) FillUserByProviderID ¶
func (p *GitHubProvider) FillUserByProviderID(user *model.User, providerUserID string) error
func (*GitHubProvider) GetName ¶
func (p *GitHubProvider) GetName() string
func (*GitHubProvider) GetProviderPrefix ¶
func (p *GitHubProvider) GetProviderPrefix() string
func (*GitHubProvider) GetUserInfo ¶
func (p *GitHubProvider) GetUserInfo(ctx context.Context, token *OAuthToken) (*OAuthUser, error)
func (*GitHubProvider) IsEnabled ¶
func (p *GitHubProvider) IsEnabled() bool
func (*GitHubProvider) IsUserIDTaken ¶
func (p *GitHubProvider) IsUserIDTaken(providerUserID string) bool
func (*GitHubProvider) SetProviderUserID ¶
func (p *GitHubProvider) SetProviderUserID(user *model.User, providerUserID string)
type LinuxDOProvider ¶
type LinuxDOProvider struct{}
LinuxDOProvider implements OAuth for Linux DO
func (*LinuxDOProvider) ExchangeToken ¶
func (p *LinuxDOProvider) ExchangeToken(ctx context.Context, code string, c *gin.Context) (*OAuthToken, error)
func (*LinuxDOProvider) FillUserByProviderID ¶
func (p *LinuxDOProvider) FillUserByProviderID(user *model.User, providerUserID string) error
func (*LinuxDOProvider) GetName ¶
func (p *LinuxDOProvider) GetName() string
func (*LinuxDOProvider) GetProviderPrefix ¶
func (p *LinuxDOProvider) GetProviderPrefix() string
func (*LinuxDOProvider) GetUserInfo ¶
func (p *LinuxDOProvider) GetUserInfo(ctx context.Context, token *OAuthToken) (*OAuthUser, error)
func (*LinuxDOProvider) IsEnabled ¶
func (p *LinuxDOProvider) IsEnabled() bool
func (*LinuxDOProvider) IsUserIDTaken ¶
func (p *LinuxDOProvider) IsUserIDTaken(providerUserID string) bool
func (*LinuxDOProvider) SetProviderUserID ¶
func (p *LinuxDOProvider) SetProviderUserID(user *model.User, providerUserID string)
type OAuthError ¶
type OAuthError struct {
// MsgKey is the i18n message key
MsgKey string
// Params contains optional parameters for the message template
Params map[string]any
// RawError is the underlying error for logging purposes
RawError string
}
OAuthError represents a translatable OAuth error
func NewOAuthError ¶
func NewOAuthError(msgKey string, params map[string]any) *OAuthError
NewOAuthError creates a new OAuth error with the given message key
func NewOAuthErrorWithRaw ¶
func NewOAuthErrorWithRaw(msgKey string, params map[string]any, rawError string) *OAuthError
NewOAuthErrorWithRaw creates a new OAuth error with raw error message for logging
func (*OAuthError) Error ¶
func (e *OAuthError) Error() string
type OAuthToken ¶
type OAuthToken struct {
AccessToken string `json:"access_token"`
TokenType string `json:"token_type"`
RefreshToken string `json:"refresh_token,omitempty"`
ExpiresIn int `json:"expires_in,omitempty"`
Scope string `json:"scope,omitempty"`
IDToken string `json:"id_token,omitempty"`
}
OAuthToken represents the token received from OAuth provider
type OAuthUser ¶
type OAuthUser struct {
// ProviderUserID is the unique identifier from the OAuth provider
ProviderUserID string
// Username is the username from the OAuth provider (e.g., GitHub login)
Username string
// DisplayName is the display name from the OAuth provider
DisplayName string
// Email is the email from the OAuth provider
Email string
// Extra contains any additional provider-specific data
Extra map[string]any
}
OAuthUser represents the user info from OAuth provider
type OIDCProvider ¶
type OIDCProvider struct{}
OIDCProvider implements OAuth for OIDC
func (*OIDCProvider) ExchangeToken ¶
func (p *OIDCProvider) ExchangeToken(ctx context.Context, code string, c *gin.Context) (*OAuthToken, error)
func (*OIDCProvider) FillUserByProviderID ¶
func (p *OIDCProvider) FillUserByProviderID(user *model.User, providerUserID string) error
func (*OIDCProvider) GetName ¶
func (p *OIDCProvider) GetName() string
func (*OIDCProvider) GetProviderPrefix ¶
func (p *OIDCProvider) GetProviderPrefix() string
func (*OIDCProvider) GetUserInfo ¶
func (p *OIDCProvider) GetUserInfo(ctx context.Context, token *OAuthToken) (*OAuthUser, error)
func (*OIDCProvider) IsEnabled ¶
func (p *OIDCProvider) IsEnabled() bool
func (*OIDCProvider) IsUserIDTaken ¶
func (p *OIDCProvider) IsUserIDTaken(providerUserID string) bool
func (*OIDCProvider) SetProviderUserID ¶
func (p *OIDCProvider) SetProviderUserID(user *model.User, providerUserID string)
type Provider ¶
type Provider interface {
// GetName returns the display name of the provider (e.g., "GitHub", "Discord")
GetName() string
// IsEnabled returns whether this OAuth provider is enabled
IsEnabled() bool
// ExchangeToken exchanges the authorization code for an access token
// The gin.Context is passed for providers that need request info (e.g., for redirect_uri)
ExchangeToken(ctx context.Context, code string, c *gin.Context) (*OAuthToken, error)
// GetUserInfo retrieves user information using the access token
GetUserInfo(ctx context.Context, token *OAuthToken) (*OAuthUser, error)
// IsUserIDTaken checks if the provider user ID is already associated with an account
IsUserIDTaken(providerUserID string) bool
// FillUserByProviderID fills the user model by provider user ID
FillUserByProviderID(user *model.User, providerUserID string) error
// SetProviderUserID sets the provider user ID on the user model
SetProviderUserID(user *model.User, providerUserID string)
// GetProviderPrefix returns the prefix for auto-generated usernames (e.g., "github_")
GetProviderPrefix() string
}
Provider defines the interface for OAuth providers
func GetProvider ¶
GetProvider returns the OAuth provider for the given name
type TrustLevelError ¶
TrustLevelError indicates the user's trust level is too low
func (*TrustLevelError) Error ¶
func (e *TrustLevelError) Error() string