oauth

package
v0.10.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 7, 2026 License: AGPL-3.0 Imports: 19 Imported by: 0

Documentation

Index

Constants

View Source
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

func GetAllProviders() map[string]Provider

GetAllProviders returns all registered OAuth providers

func IsCustomProvider

func IsCustomProvider(name string) bool

IsCustomProvider checks if a provider is a custom provider

func IsProviderRegistered

func IsProviderRegistered(name string) bool

IsProviderRegistered checks if a provider is registered

func LoadCustomProviders

func LoadCustomProviders() error

LoadCustomProviders loads all custom OAuth providers from the database

func Register

func Register(name string, provider Provider)

Register registers an OAuth provider with the given name

func RegisterCustom

func RegisterCustom(name string, provider Provider)

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 Unregister

func Unregister(name string)

Unregister removes a provider from the registry

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 (*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

func GetProvider(name string) Provider

GetProvider returns the OAuth provider for the given name

type TrustLevelError

type TrustLevelError struct {
	Required int
	Current  int
}

TrustLevelError indicates the user's trust level is too low

func (*TrustLevelError) Error

func (e *TrustLevelError) Error() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL