summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/markbates/goth/provider.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/markbates/goth/provider.go')
-rw-r--r--vendor/github.com/markbates/goth/provider.go75
1 files changed, 75 insertions, 0 deletions
diff --git a/vendor/github.com/markbates/goth/provider.go b/vendor/github.com/markbates/goth/provider.go
new file mode 100644
index 0000000000..58d0d60bbf
--- /dev/null
+++ b/vendor/github.com/markbates/goth/provider.go
@@ -0,0 +1,75 @@
+package goth
+
+import (
+ "fmt"
+ "net/http"
+
+ "golang.org/x/net/context"
+ "golang.org/x/oauth2"
+)
+
+// Provider needs to be implemented for each 3rd party authentication provider
+// e.g. Facebook, Twitter, etc...
+type Provider interface {
+ Name() string
+ SetName(name string)
+ BeginAuth(state string) (Session, error)
+ UnmarshalSession(string) (Session, error)
+ FetchUser(Session) (User, error)
+ Debug(bool)
+ RefreshToken(refreshToken string) (*oauth2.Token, error) //Get new access token based on the refresh token
+ RefreshTokenAvailable() bool //Refresh token is provided by auth provider or not
+}
+
+const NoAuthUrlErrorMessage = "an AuthURL has not been set"
+
+// Providers is list of known/available providers.
+type Providers map[string]Provider
+
+var providers = Providers{}
+
+// UseProviders adds a list of available providers for use with Goth.
+// Can be called multiple times. If you pass the same provider more
+// than once, the last will be used.
+func UseProviders(viders ...Provider) {
+ for _, provider := range viders {
+ providers[provider.Name()] = provider
+ }
+}
+
+// GetProviders returns a list of all the providers currently in use.
+func GetProviders() Providers {
+ return providers
+}
+
+// GetProvider returns a previously created provider. If Goth has not
+// been told to use the named provider it will return an error.
+func GetProvider(name string) (Provider, error) {
+ provider := providers[name]
+ if provider == nil {
+ return nil, fmt.Errorf("no provider for %s exists", name)
+ }
+ return provider, nil
+}
+
+// ClearProviders will remove all providers currently in use.
+// This is useful, mostly, for testing purposes.
+func ClearProviders() {
+ providers = Providers{}
+}
+
+// ContextForClient provides a context for use with oauth2.
+func ContextForClient(h *http.Client) context.Context {
+ if h == nil {
+ return oauth2.NoContext
+ }
+ return context.WithValue(oauth2.NoContext, oauth2.HTTPClient, h)
+}
+
+// HTTPClientWithFallBack to be used in all fetch operations.
+func HTTPClientWithFallBack(h *http.Client) *http.Client {
+ if h != nil {
+ return h
+ }
+ return http.DefaultClient
+}