github

package
v0.4.7 Latest Latest
Warning

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

Go to latest
Published: Mar 25, 2024 License: Apache-2.0 Imports: 9 Imported by: 0

Documentation

Overview

Package github provides GitHub OAuth2 login and callback handlers.

Index

Constants

View Source
const (
	ProviderName = "GITHUB"
)

Variables

View Source
var (
	// ErrServerError returns a generic server error
	ErrServerError = errors.New("server error")

	// ErrContextMissingGithubUser is returned when the GitHub user is missing from the context
	ErrContextMissingGithubUser = errors.New("context missing github user")

	// ErrFailedConstructingEndpointURL is returned when URL is invalid and unable to be parsed
	ErrFailedConstructingEndpointURL = errors.New("error constructing URL")

	// ErrCreatingGithubClient is returned when the GitHub client cannot be created
	ErrCreatingGithubClient = errors.New("error creating github client")

	// ErrUnableToGetGithubUser when the user cannot be retrieved from GitHub
	ErrUnableToGetGithubUser = errors.New("unable to get github user")

	// ErrPrimaryEmailNotFound when the user's primary email cannot be retrieved from GitHub
	ErrPrimaryEmailNotFound = errors.New("unable to get primary email address")

	// ErrContextMissingErrorValue is returned when the context does not have an error value
	ErrContextMissingErrorValue = fmt.Errorf("context missing error value")
)
View Source
var DefaultFailureHandler = http.HandlerFunc(failureHandler)

DefaultFailureHandler responds with a 400 status code and message parsed from the context

Functions

func CallbackHandler

func CallbackHandler(config *oauth2.Config, success, failure http.Handler) http.Handler

CallbackHandler adds the GitHub access token and User to the ctx

func EnterpriseCallbackHandler

func EnterpriseCallbackHandler(config *oauth2.Config, success, failure http.Handler) http.Handler

EnterpriseCallbackHandler handles GitHub Enterprise redirection URI requests and adds the GitHub access token and User to the ctx

func ErrorFromContext

func ErrorFromContext(ctx context.Context) error

ErrorFromContext returns the error value from the ctx or an error that the context was missing an error value

func LoginHandler

func LoginHandler(config *oauth2.Config, failure http.Handler) http.Handler

LoginHandler handles Github login requests by reading the state value from the ctx and redirecting requests to the AuthURL with that state value

func StateHandler

func StateHandler(config sessions.CookieConfig, success http.Handler) http.Handler

StateHandler checks for a state cookie, if found, adds to context; if missing, a random generated value is added to the context and to a (short-lived) state cookie issued to the requester - this implements OAuth 2 RFC 6749 10.12 CSRF Protection

func UserFromContext

func UserFromContext(ctx context.Context) (*github.User, error)

UserFromContext returns the GitHub User from the context

func VerifyClientToken

func VerifyClientToken(ctx context.Context, token *oauth2.Token, config *oauth2.Config, email string, clientConfig *ClientConfig) (err error)

VerifyClientToken checks the client token and returns an error if it is invalid

func WithError

func WithError(ctx context.Context, err error) context.Context

WithError returns a copy of context that stores the given error value

func WithUser

func WithUser(ctx context.Context, user *github.User) context.Context

WithUser returns a copy of context that stores the GitHub User

Types

type ClientConfig

type ClientConfig struct {
	BaseURL   *url.URL
	UploadURL *url.URL

	IsEnterprise bool
	IsMock       bool
}

ClientConfig holds the configuration for the GitHub client

type GitHubClient

type GitHubClient struct {
	Users githubUserService
}

GitHubClient defines all necessary methods used by the client

type GitHubCreator

type GitHubCreator struct {
	Config *ClientConfig
}

GitHubCreator implements GitHubInterface

func (*GitHubCreator) GetConfig

func (g *GitHubCreator) GetConfig() *ClientConfig

GetConfig returns the current configuration

func (*GitHubCreator) NewClient

func (g *GitHubCreator) NewClient(httpClient *http.Client) GitHubClient

NewClient returns a new GitHubClient

func (*GitHubCreator) SetConfig

func (g *GitHubCreator) SetConfig(config *ClientConfig)

SetConfig sets the configuration

type GitHubInterface

type GitHubInterface interface {
	NewClient(httpClient *http.Client) GitHubClient
	GetConfig() *ClientConfig
	SetConfig(config *ClientConfig)
}

GitHubInterface defines all necessary methods https://godoc.org/github.com/google/go-github/github#NewClient

type GitHubMock

type GitHubMock struct {
	Config *ClientConfig
}

GitHubMock implements GitHubInterface

func (*GitHubMock) GetConfig

func (g *GitHubMock) GetConfig() *ClientConfig

GetConfig returns the current configuration

func (*GitHubMock) NewClient

func (g *GitHubMock) NewClient(httpClient *http.Client) GitHubClient

NewClient returns a new mock GitHubClient

func (*GitHubMock) SetConfig

func (g *GitHubMock) SetConfig(config *ClientConfig)

SetConfig sets the configuration

type ProviderConfig

type ProviderConfig struct {
	// ClientID is the public identifier for the GitHub oauth2 client
	ClientID string `json:"clientId" koanf:"clientId" jsonschema:"required"`
	// ClientSecret is the secret for the GitHub oauth2 client
	ClientSecret string `json:"clientSecret" koanf:"clientSecret" jsonschema:"required"`
	// ClientEndpoint is the endpoint for the GitHub oauth2 client
	ClientEndpoint string `json:"clientEndpoint" koanf:"clientEndpoint" default:"http://localhost:17608"`
	// Scopes are the scopes that the GitHub oauth2 client will request
	Scopes []string `json:"scopes" koanf:"scopes" jsonschema:"required"`
	// RedirectURL is the URL that the GitHub oauth2 client will redirect to after authentication with Github
	RedirectURL string `json:"redirectUrl" koanf:"redirectUrl" jsonschema:"required" default:"/v1/github/callback"`
}

ProviderConfig represents the configuration settings for a Github Oauth Provider

type UsersMock

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

UsersMock mocks UsersService

func (*UsersMock) Get

Get returns a Github user

func (*UsersMock) ListEmails

func (u *UsersMock) ListEmails(ctx context.Context, opts *github.ListOptions) ([]*github.UserEmail, *github.Response, error)

ListEmails returns a mock list of Github user emails

Jump to

Keyboard shortcuts

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