providers

package
v0.0.11 Latest Latest
Warning

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

Go to latest
Published: Jan 3, 2026 License: Apache-2.0 Imports: 20 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 interface{}) 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 Required for Apple's OAuth flow

func PostForm

func PostForm(ctx context.Context, client *http.Client, url string, data url.Values, v interface{}) 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]interface{} // 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