providers

package
v0.0.15 Latest Latest
Warning

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

Go to latest
Published: Feb 11, 2026 License: Apache-2.0 Imports: 21 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func FetchJSON

func FetchJSON(ctx context.Context, client *http.Client, url string, v any) error

FetchJSON is a helper to fetch and decode JSON from an API endpoint.

func GenerateAppleClientSecret

func GenerateAppleClientSecret(teamID, clientID, keyID string, privateKey *rsa.PrivateKey) (string, error)

GenerateClientSecret generates a client secret JWT for Apple GenerateAppleClientSecret for Apple's OAuth flow.

func PostForm

func PostForm(ctx context.Context, client *http.Client, url string, data url.Values, v any) error

PostForm is a helper for POST requests with form data.

Types

type AppleProvider

type AppleProvider struct {
	*BaseProvider
	// contains filtered or unexported fields
}

AppleProvider implements Sign in with Apple.

func NewAppleProvider

func NewAppleProvider(config ProviderConfig) *AppleProvider

NewAppleProvider creates a new Apple OAuth provider.

func (*AppleProvider) GetUserInfo

func (a *AppleProvider) GetUserInfo(ctx context.Context, token *oauth2.Token) (*UserInfo, error)

GetUserInfo extracts user information from Apple's ID token.

type BaseProvider

type BaseProvider struct {
	// contains filtered or unexported fields
}

BaseProvider provides common OAuth2 functionality.

func NewBaseProvider

func NewBaseProvider(id, name, authURL, tokenURL, userInfoURL, clientID, clientSecret, redirectURL string, scopes []string) *BaseProvider

NewBaseProvider creates a new base provider.

func (*BaseProvider) GetOAuth2Config

func (bp *BaseProvider) GetOAuth2Config() *oauth2.Config

func (*BaseProvider) GetScopes

func (bp *BaseProvider) GetScopes() []string

func (*BaseProvider) ID

func (bp *BaseProvider) ID() string

func (*BaseProvider) Name

func (bp *BaseProvider) Name() string

type BitbucketProvider

type BitbucketProvider struct {
	*BaseProvider
}

BitbucketProvider implements OAuth for Bitbucket.

func NewBitbucketProvider

func NewBitbucketProvider(config ProviderConfig) *BitbucketProvider

NewBitbucketProvider creates a new Bitbucket OAuth provider.

func (*BitbucketProvider) GetUserInfo

func (b *BitbucketProvider) GetUserInfo(ctx context.Context, token *oauth2.Token) (*UserInfo, error)

GetUserInfo fetches user information from Bitbucket API.

type DiscordProvider

type DiscordProvider struct {
	*BaseProvider
}

DiscordProvider implements OAuth for Discord.

func NewDiscordProvider

func NewDiscordProvider(config ProviderConfig) *DiscordProvider

NewDiscordProvider creates a new Discord OAuth provider.

func (*DiscordProvider) GetUserInfo

func (d *DiscordProvider) GetUserInfo(ctx context.Context, token *oauth2.Token) (*UserInfo, error)

GetUserInfo fetches user information from Discord API.

type DropboxProvider

type DropboxProvider struct {
	*BaseProvider
}

DropboxProvider implements OAuth for Dropbox.

func NewDropboxProvider

func NewDropboxProvider(config ProviderConfig) *DropboxProvider

NewDropboxProvider creates a new Dropbox OAuth provider.

func (*DropboxProvider) GetUserInfo

func (d *DropboxProvider) GetUserInfo(ctx context.Context, token *oauth2.Token) (*UserInfo, error)

GetUserInfo fetches user information from Dropbox API.

type FacebookProvider

type FacebookProvider struct {
	*BaseProvider
}

FacebookProvider implements OAuth for Facebook.

func NewFacebookProvider

func NewFacebookProvider(config ProviderConfig) *FacebookProvider

NewFacebookProvider creates a new Facebook OAuth provider.

func (*FacebookProvider) GetUserInfo

func (f *FacebookProvider) GetUserInfo(ctx context.Context, token *oauth2.Token) (*UserInfo, error)

GetUserInfo fetches user information from Facebook Graph API.

type GitHubProvider

type GitHubProvider struct {
	*BaseProvider
}

GitHubProvider implements OAuth for GitHub.

func NewGitHubProvider

func NewGitHubProvider(config ProviderConfig) *GitHubProvider

NewGitHubProvider creates a new GitHub OAuth provider.

func (*GitHubProvider) GetUserInfo

func (gh *GitHubProvider) GetUserInfo(ctx context.Context, token *oauth2.Token) (*UserInfo, error)

GetUserInfo fetches user information from GitHub.

type GitLabProvider

type GitLabProvider struct {
	*BaseProvider
}

GitLabProvider implements OAuth for GitLab.

func NewGitLabProvider

func NewGitLabProvider(config ProviderConfig) *GitLabProvider

NewGitLabProvider creates a new GitLab OAuth provider.

func (*GitLabProvider) GetUserInfo

func (g *GitLabProvider) GetUserInfo(ctx context.Context, token *oauth2.Token) (*UserInfo, error)

GetUserInfo fetches user information from GitLab API.

type GoogleProvider

type GoogleProvider struct {
	*BaseProvider
	// contains filtered or unexported fields
}

GoogleProvider implements OAuth for Google.

func NewGoogleProvider

func NewGoogleProvider(config ProviderConfig) *GoogleProvider

NewGoogleProvider creates a new Google OAuth provider.

func (*GoogleProvider) GetAuthURL

func (g *GoogleProvider) GetAuthURL(state string) string

GetAuthURL returns the authorization URL with Google-specific parameters.

func (*GoogleProvider) GetOAuth2Config

func (g *GoogleProvider) GetOAuth2Config() *oauth2.Config

GetOAuth2Config overrides to add Google-specific options.

func (*GoogleProvider) GetUserInfo

func (g *GoogleProvider) GetUserInfo(ctx context.Context, token *oauth2.Token) (*UserInfo, error)

GetUserInfo fetches user information from Google.

type LINEProvider

type LINEProvider struct {
	*BaseProvider
}

LINEProvider implements OAuth for LINE.

func NewLINEProvider

func NewLINEProvider(config ProviderConfig) *LINEProvider

NewLINEProvider creates a new LINE OAuth provider.

func (*LINEProvider) GetUserInfo

func (l *LINEProvider) GetUserInfo(ctx context.Context, token *oauth2.Token) (*UserInfo, error)

GetUserInfo fetches user information from LINE API.

type LinkedInProvider

type LinkedInProvider struct {
	*BaseProvider
}

LinkedInProvider implements OAuth for LinkedIn.

func NewLinkedInProvider

func NewLinkedInProvider(config ProviderConfig) *LinkedInProvider

NewLinkedInProvider creates a new LinkedIn OAuth provider.

func (*LinkedInProvider) GetUserInfo

func (l *LinkedInProvider) GetUserInfo(ctx context.Context, token *oauth2.Token) (*UserInfo, error)

GetUserInfo fetches user information from LinkedIn API.

type MicrosoftProvider

type MicrosoftProvider struct {
	*BaseProvider
}

MicrosoftProvider implements OAuth for Microsoft.

func NewMicrosoftProvider

func NewMicrosoftProvider(config ProviderConfig) *MicrosoftProvider

NewMicrosoftProvider creates a new Microsoft OAuth provider.

func (*MicrosoftProvider) GetUserInfo

func (m *MicrosoftProvider) GetUserInfo(ctx context.Context, token *oauth2.Token) (*UserInfo, error)

GetUserInfo fetches user information from Microsoft Graph API.

type NotionProvider

type NotionProvider struct {
	*BaseProvider
}

NotionProvider implements OAuth for Notion.

func NewNotionProvider

func NewNotionProvider(config ProviderConfig) *NotionProvider

NewNotionProvider creates a new Notion OAuth provider.

func (*NotionProvider) GetUserInfo

func (n *NotionProvider) GetUserInfo(ctx context.Context, token *oauth2.Token) (*UserInfo, error)

GetUserInfo fetches user information from Notion API.

type Provider

type Provider interface {
	// ID returns the provider identifier (e.g., "google", "github")
	ID() string

	// Name returns the human-readable provider name
	Name() string

	// GetOAuth2Config returns the OAuth2 configuration
	GetOAuth2Config() *oauth2.Config

	// GetUserInfo fetches user information from the provider
	GetUserInfo(ctx context.Context, token *oauth2.Token) (*UserInfo, error)

	// GetScopes returns the default scopes for this provider
	GetScopes() []string
}

Provider defines the interface for OAuth providers.

type ProviderConfig

type ProviderConfig struct {
	ClientID     string   `json:"clientId"     yaml:"clientId"`
	ClientSecret string   `json:"clientSecret" yaml:"clientSecret"`
	RedirectURL  string   `json:"redirectUrl"  yaml:"redirectUrl"`
	CallbackURL  string   `json:"callbackUrl"  yaml:"callbackUrl"`
	Scopes       []string `json:"scopes"       yaml:"scopes"`
	Enabled      bool     `json:"enabled"      yaml:"enabled"`

	// Advanced options (provider-specific)
	AccessType string `json:"accessType" yaml:"accessType"` // For Google: "offline" for refresh tokens
	Prompt     string `json:"prompt"     yaml:"prompt"`     // For Google: "select_account consent"
}

ProviderConfig holds configuration for a social provider.

type RedditProvider

type RedditProvider struct {
	*BaseProvider
}

RedditProvider implements OAuth for Reddit.

func NewRedditProvider

func NewRedditProvider(config ProviderConfig) *RedditProvider

NewRedditProvider creates a new Reddit OAuth provider.

func (*RedditProvider) GetUserInfo

func (r *RedditProvider) GetUserInfo(ctx context.Context, token *oauth2.Token) (*UserInfo, error)

GetUserInfo fetches user information from Reddit API.

type SlackProvider

type SlackProvider struct {
	*BaseProvider
}

SlackProvider implements OAuth for Slack.

func NewSlackProvider

func NewSlackProvider(config ProviderConfig) *SlackProvider

NewSlackProvider creates a new Slack OAuth provider.

func (*SlackProvider) GetUserInfo

func (s *SlackProvider) GetUserInfo(ctx context.Context, token *oauth2.Token) (*UserInfo, error)

GetUserInfo fetches user information from Slack API.

type SpotifyProvider

type SpotifyProvider struct {
	*BaseProvider
}

SpotifyProvider implements OAuth for Spotify.

func NewSpotifyProvider

func NewSpotifyProvider(config ProviderConfig) *SpotifyProvider

NewSpotifyProvider creates a new Spotify OAuth provider.

func (*SpotifyProvider) GetUserInfo

func (s *SpotifyProvider) GetUserInfo(ctx context.Context, token *oauth2.Token) (*UserInfo, error)

GetUserInfo fetches user information from Spotify API.

type TokenResponse

type TokenResponse struct {
	AccessToken  string    `json:"access_token"`
	RefreshToken string    `json:"refresh_token,omitempty"`
	TokenType    string    `json:"token_type"`
	ExpiresIn    int       `json:"expires_in,omitempty"`
	Scope        string    `json:"scope,omitempty"`
	IDToken      string    `json:"id_token,omitempty"` // For OIDC providers
	ExpiresAt    time.Time `json:"-"`                  // Calculated expiration time
}

TokenResponse represents a standardized OAuth token response.

func (*TokenResponse) CalculateExpiration

func (tr *TokenResponse) CalculateExpiration()

CalculateExpiration calculates the token expiration time.

type TwitchProvider

type TwitchProvider struct {
	*BaseProvider
}

TwitchProvider implements OAuth for Twitch.

func NewTwitchProvider

func NewTwitchProvider(config ProviderConfig) *TwitchProvider

NewTwitchProvider creates a new Twitch OAuth provider.

func (*TwitchProvider) GetUserInfo

func (t *TwitchProvider) GetUserInfo(ctx context.Context, token *oauth2.Token) (*UserInfo, error)

GetUserInfo fetches user information from Twitch API.

type TwitterProvider

type TwitterProvider struct {
	*BaseProvider
}

TwitterProvider implements OAuth 2.0 for Twitter (X).

func NewTwitterProvider

func NewTwitterProvider(config ProviderConfig) *TwitterProvider

NewTwitterProvider creates a new Twitter OAuth provider.

func (*TwitterProvider) GetUserInfo

func (t *TwitterProvider) GetUserInfo(ctx context.Context, token *oauth2.Token) (*UserInfo, error)

GetUserInfo fetches user information from Twitter API v2.

type UserInfo

type UserInfo struct {
	ID            string         // Provider's user ID
	Email         string         // User email
	EmailVerified bool           // Whether email is verified
	Name          string         // Full name
	FirstName     string         // First name
	LastName      string         // Last name
	Avatar        string         // Profile picture URL
	Username      string         // Username (if available)
	Raw           map[string]any // Raw provider response
}

UserInfo represents standardized user information from OAuth providers.

Jump to

Keyboard shortcuts

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