func init() { gothic.Store = sessions.NewFilesystemStore(os.TempDir(), []byte("goth-example")) goth.UseProviders( twitter.New(os.Getenv("TWITTER_KEY"), os.Getenv("TWITTER_SECRET"), "http://localhost:3000/auth/twitter/callback"), // If you'd like to use authenticate instead of authorize in Twitter provider, use this instead. // twitter.NewAuthenticate(os.Getenv("TWITTER_KEY"), os.Getenv("TWITTER_SECRET"), "http://localhost:3000/auth/twitter/callback"), facebook.New(os.Getenv("FACEBOOK_KEY"), os.Getenv("FACEBOOK_SECRET"), "http://localhost:3000/auth/facebook/callback"), gplus.New("281140391713-b1dskle4dtsi6nn4ce01tbkpcp3aovs6.apps.googleusercontent.com", "cIM92vsFvLyfhIZASmAo2ZaE", "http://localhost:8080/auth/gplus/callback"), github.New(os.Getenv("GITHUB_KEY"), os.Getenv("GITHUB_SECRET"), "http://localhost:3000/auth/github/callback"), spotify.New(os.Getenv("SPOTIFY_KEY"), os.Getenv("SPOTIFY_SECRET"), "http://localhost:3000/auth/spotify/callback"), linkedin.New(os.Getenv("LINKEDIN_KEY"), os.Getenv("LINKEDIN_SECRET"), "http://localhost:3000/auth/linkedin/callback"), lastfm.New(os.Getenv("LASTFM_KEY"), os.Getenv("LASTFM_SECRET"), "http://localhost:3000/auth/lastfm/callback"), twitch.New(os.Getenv("TWITCH_KEY"), os.Getenv("TWITCH_SECRET"), "http://localhost:3000/auth/twitch/callback"), dropbox.New(os.Getenv("DROPBOX_KEY"), os.Getenv("DROPBOX_SECRET"), "http://localhost:3000/auth/dropbox/callback"), digitalocean.New(os.Getenv("DIGITALOCEAN_KEY"), os.Getenv("DIGITALOCEAN_SECRET"), "http://localhost:3000/auth/digitalocean/callback", "read"), bitbucket.New(os.Getenv("BITBUCKET_KEY"), os.Getenv("BITBUCKET_SECRET"), "http://localhost:3000/auth/bitbucket/callback"), instagram.New(os.Getenv("INSTAGRAM_KEY"), os.Getenv("INSTAGRAM_SECRET"), "http://localhost:3000/auth/instagram/callback"), box.New(os.Getenv("BOX_KEY"), os.Getenv("BOX_SECRET"), "http://localhost:3000/auth/box/callback"), salesforce.New(os.Getenv("SALESFORCE_KEY"), os.Getenv("SALESFORCE_SECRET"), "http://localhost:3000/auth/salesforce/callback"), amazon.New(os.Getenv("AMAZON_KEY"), os.Getenv("AMAZON_SECRET"), "http://localhost:3000/auth/amazon/callback"), yammer.New(os.Getenv("YAMMER_KEY"), os.Getenv("YAMMER_SECRET"), "http://localhost:3000/auth/yammer/callback"), onedrive.New(os.Getenv("ONEDRIVE_KEY"), os.Getenv("ONEDRIVE_SECRET"), "http://localhost:3000/auth/onedrive/callback"), ) //set a global session globalSessions, _ = session.NewManager("memory", `{"cookieName":"gosessionid", "enableSetCookie,omitempty": true, "gclifetime":3600, "maxLifetime": 3600, "secure": false, "sessionIDHashFunc": "sha1", "sessionIDHashKey": "", "cookieLifeTime": 3600, "providerConfig": ""}`) go globalSessions.GC() }
func (s *Server) InitGothic() { goth.UseProviders( facebook.New(s.Config.Facebook.AppId, s.Config.Facebook.Secret, s.Config.Facebook.CallbackURL), ) // Since we are using only ONE provider, FACEBOOK - it doesn't have make sense to parse url for provider name gothic.GetProviderName = func(req *http.Request) (string, error) { return "facebook", nil } }
func main() { const BaseURL = "http://localhost:8000" goth.UseProviders( twitter.New(os.Getenv("TWITTER_KEY"), os.Getenv("TWITTER_SECRET"), BaseURL+"/auth/twitter/callback"), facebook.New(os.Getenv("FACEBOOK_KEY"), os.Getenv("FACEBOOK_SECRET"), BaseURL+"/auth/facebook/callback"), gplus.New(os.Getenv("GPLUS_KEY"), os.Getenv("GPLUS_SECRET"), BaseURL+"/auth/gplus/callback"), github.New(os.Getenv("GITHUB_KEY"), os.Getenv("GITHUB_SECRET"), BaseURL+"/auth/github/callback"), spotify.New(os.Getenv("SPOTIFY_KEY"), os.Getenv("SPOTIFY_SECRET"), BaseURL+"/auth/spotify/callback"), linkedin.New(os.Getenv("LINKEDIN_KEY"), os.Getenv("LINKEDIN_SECRET"), BaseURL+"/auth/linkedin/callback"), lastfm.New(os.Getenv("LASTFM_KEY"), os.Getenv("LASTFM_SECRET"), BaseURL+"/auth/lastfm/callback"), twitch.New(os.Getenv("TWITCH_KEY"), os.Getenv("TWITCH_SECRET"), BaseURL+"/auth/twitch/callback"), ) tpl := template.New("") template.Must(tpl.New("index.html").Parse(` <p><a href="/auth/twitter">Log in with Twitter</a></p> <p><a href="/auth/facebook">Log in with Facebook</a></p> <p><a href="/auth/gplus">Log in with GPlus</a></p> <p><a href="/auth/github">Log in with Github</a></p> <p><a href="/auth/spotify">Log in with Spotify</a></p> <p><a href="/auth/lastfm">Log in with LastFM</a></p> <p><a href="/auth/twitch">Log in with Twitch</a></p> `)) template.Must(tpl.New("user.html").Parse(` <p>Name: {{.Name}}</p> <p>Email: {{.Email}}</p> <p>NickName: {{.NickName}}</p> <p>Location: {{.Location}}</p> <p>AvatarURL: {{.AvatarURL}} <img src="{{.AvatarURL}}"></p> <p>Description: {{.Description}}</p> <p>UserID: {{.UserID}}</p> <p>AccessToken: {{.AccessToken}}</p> `)) r := gin.Default() r.SetHTMLTemplate(tpl) r.GET("/auth/:provider", func(c *gin.Context) { err := gothic.BeginAuth(c.Param("provider"), c.Writer, c.Request) if err != nil { c.AbortWithError(http.StatusInternalServerError, err) return } }) r.GET("/auth/:provider/callback", func(c *gin.Context) { user, err := gothic.CompleteAuth(c.Param("provider"), c.Writer, c.Request) if err != nil { c.AbortWithError(http.StatusInternalServerError, err) return } c.HTML(http.StatusOK, "user.html", user) }) r.GET("/", func(c *gin.Context) { c.HTML(http.StatusOK, "index.html", nil) }) log.Fatal(r.Run(":8000")) }
func main() { log.SetFlags(log.LstdFlags | log.Lshortfile) googleJsonKey, err := ioutil.ReadFile(GOOGLE_CLIENT_SECRET_FILE_PATH) if err != nil { log.Fatalln("unable to read file ", GOOGLE_CLIENT_SECRET_FILE_PATH, ":", err) } facebookJsonKey, err := ioutil.ReadFile(FACEBOOK_CLIENT_SECRET_FILE_PATH) if err != nil { log.Fatalln("unable to read file ", FACEBOOK_CLIENT_SECRET_FILE_PATH, ":", err) } // do I need more scopes? // https://developers.google.com/+/domains/authentication/scopes googleConfig, err := google.ConfigFromJSON(googleJsonKey) if err != nil { log.Fatalln("unable to get google provider config:", err) } facebookConfig := &genericConfig{} err = json.Unmarshal(facebookJsonKey, facebookConfig) if err != nil { log.Fatalln("unable to get facebook provider config:", err) } //I need "profile", "email", scopes. gplus and facebook provide these by //default. goth.UseProviders( gplus.New(googleConfig.ClientID, googleConfig.ClientSecret, AUTH_CALLBACK_URL), facebook.New(facebookConfig.Client_id, facebookConfig.Client_secret, AUTH_CALLBACK_URL), ) chat = NewChat() router = pat.New() router.Get("/ws", WsHandler) router.Get("/oauth2callback", AuthCallbackHandler) router.Get("/auth/{provider}", BeginAuthHandler) router.Get("/", AuthChoiceHandler) // router.Add("GET", "/app", http.FileServer(http.Dir("app/"))) // router.PathPrefix("/app").Handler(http.FileServer(http.Dir("app/"))) http.Handle("/", router) http.Handle("/app/", http.StripPrefix("/app/", http.FileServer(http.Dir("app/")))) go http.ListenAndServeTLS(":8080", "cert.crt", "key.key", nil) http.ListenAndServe(":8000", http.HandlerFunc(redirectHandler)) }
func main() { goth.UseProviders( twitter.New(os.Getenv("TWITTER_KEY"), os.Getenv("TWITTER_SECRET"), "http://localhost:3000/auth/twitter/callback"), // If you'd like to use authenticate instead of authorize in Twitter provider, use this instead. // twitter.NewAuthenticate(os.Getenv("TWITTER_KEY"), os.Getenv("TWITTER_SECRET"), "http://localhost:3000/auth/twitter/callback"), facebook.New(os.Getenv("FACEBOOK_KEY"), os.Getenv("FACEBOOK_SECRET"), "http://localhost:3000/auth/facebook/callback"), gplus.New(os.Getenv("GPLUS_KEY"), os.Getenv("GPLUS_SECRET"), "http://localhost:3000/auth/gplus/callback"), github.New(os.Getenv("GITHUB_KEY"), os.Getenv("GITHUB_SECRET"), "http://localhost:3000/auth/github/callback"), spotify.New(os.Getenv("SPOTIFY_KEY"), os.Getenv("SPOTIFY_SECRET"), "http://localhost:3000/auth/spotify/callback"), linkedin.New(os.Getenv("LINKEDIN_KEY"), os.Getenv("LINKEDIN_SECRET"), "http://localhost:3000/auth/linkedin/callback"), lastfm.New(os.Getenv("LASTFM_KEY"), os.Getenv("LASTFM_SECRET"), "http://localhost:3000/auth/lastfm/callback"), twitch.New(os.Getenv("TWITCH_KEY"), os.Getenv("TWITCH_SECRET"), "http://localhost:3000/auth/twitch/callback"), dropbox.New(os.Getenv("DROPBOX_KEY"), os.Getenv("DROPBOX_SECRET"), "http://localhost:3000/auth/dropbox/callback"), ) // Assign the GetState function variable so we can return the // state string we want to get back at the end of the oauth process. // Only works with facebook and gplus providers. gothic.GetState = func(req *http.Request) string { // Get the state string from the query parameters. return req.URL.Query().Get("state") } p := pat.New() p.Get("/auth/{provider}/callback", func(res http.ResponseWriter, req *http.Request) { // print our state string to the console fmt.Println(gothic.GetState(req)) user, err := gothic.CompleteUserAuth(res, req) if err != nil { fmt.Fprintln(res, err) return } t, _ := template.New("foo").Parse(userTemplate) t.Execute(res, user) }) p.Get("/auth/{provider}", gothic.BeginAuthHandler) p.Get("/", func(res http.ResponseWriter, req *http.Request) { t, _ := template.New("foo").Parse(indexTemplate) t.Execute(res, nil) }) http.ListenAndServe(":3000", p) }
func main() { goth.UseProviders( twitter.New(os.Getenv("TWITTER_KEY"), os.Getenv("TWITTER_SECRET"), "http://localhost:3000/auth/twitter/callback"), // If you'd like to use authenticate instead of authorize in Twitter provider, use this instead. // twitter.NewAuthenticate(os.Getenv("TWITTER_KEY"), os.Getenv("TWITTER_SECRET"), "http://localhost:3000/auth/twitter/callback"), facebook.New(os.Getenv("FACEBOOK_KEY"), os.Getenv("FACEBOOK_SECRET"), "http://localhost:3000/auth/facebook/callback"), gplus.New(os.Getenv("GPLUS_KEY"), os.Getenv("GPLUS_SECRET"), "http://localhost:3000/auth/gplus/callback"), github.New(os.Getenv("GITHUB_KEY"), os.Getenv("GITHUB_SECRET"), "http://localhost:3000/auth/github/callback"), spotify.New(os.Getenv("SPOTIFY_KEY"), os.Getenv("SPOTIFY_SECRET"), "http://localhost:3000/auth/spotify/callback"), linkedin.New(os.Getenv("LINKEDIN_KEY"), os.Getenv("LINKEDIN_SECRET"), "http://localhost:3000/auth/linkedin/callback"), lastfm.New(os.Getenv("LASTFM_KEY"), os.Getenv("LASTFM_SECRET"), "http://localhost:3000/auth/lastfm/callback"), twitch.New(os.Getenv("TWITCH_KEY"), os.Getenv("TWITCH_SECRET"), "http://localhost:3000/auth/twitch/callback"), dropbox.New(os.Getenv("DROPBOX_KEY"), os.Getenv("DROPBOX_SECRET"), "http://localhost:3000/auth/dropbox/callback"), digitalocean.New(os.Getenv("DIGITALOCEAN_KEY"), os.Getenv("DIGITALOCEAN_SECRET"), "http://localhost:3000/auth/digitalocean/callback", "read"), bitbucket.New(os.Getenv("BITBUCKET_KEY"), os.Getenv("BITBUCKET_SECRET"), "http://localhost:3000/auth/bitbucket/callback"), instagram.New(os.Getenv("INSTAGRAM_KEY"), os.Getenv("INSTAGRAM_SECRET"), "http://localhost:3000/auth/instagram/callback"), ) p := pat.New() p.Get("/auth/{provider}/callback", func(res http.ResponseWriter, req *http.Request) { // print our state string to the console. Ideally, you should verify // that it's the same string as the one you set in `setState` fmt.Println("State: ", gothic.GetState(req)) user, err := gothic.CompleteUserAuth(res, req) if err != nil { fmt.Fprintln(res, err) return } t, _ := template.New("foo").Parse(userTemplate) t.Execute(res, user) }) p.Get("/auth/{provider}", gothic.BeginAuthHandler) p.Get("/", func(res http.ResponseWriter, req *http.Request) { t, _ := template.New("foo").Parse(indexTemplate) t.Execute(res, nil) }) http.ListenAndServe(":3000", p) }
func main() { //Register OAuth2 providers with Goth goth.UseProviders( twitter.New(config.TwitterKey, config.TwitterSecret, "http://localhost:8080/auth/twitter/callback"), facebook.New(config.FacebookKey, config.FacebookSecret, "http://localhost:8080/auth/facebook/callback"), ) //Routing using Pat package r := pat.New() r.Get("/auth/{provider}/callback", callbackAuthHandler) r.Get("/auth/{provider}", gothic.BeginAuthHandler) r.Get("/", indexHandler) server := &http.Server{ Addr: ":8080", Handler: r, } log.Println("Listening...") server.ListenAndServe() }
// GetAll returns the valid goth providers and the relative url paths (because the goth.Provider doesn't have a public method to get the Auth path...) // we do the hard-core/hand checking here at the configs. // // receives one parameter which is the host from the server,ex: http://localhost:3000, will be used as prefix for the oauth callback func (c OAuth) GetAll(vhost string) (providers []goth.Provider) { getCallbackURL := func(providerName string) string { return vhost + c.Path + "/" + providerName + "/callback" } //we could use a map but that's easier for the users because of code completion of their IDEs/editors if c.TwitterKey != "" && c.TwitterSecret != "" { println(getCallbackURL("twitter")) providers = append(providers, twitter.New(c.TwitterKey, c.TwitterSecret, getCallbackURL(c.TwitterName))) } if c.FacebookKey != "" && c.FacebookSecret != "" { providers = append(providers, facebook.New(c.FacebookKey, c.FacebookSecret, getCallbackURL(c.FacebookName))) } if c.GplusKey != "" && c.GplusSecret != "" { providers = append(providers, gplus.New(c.GplusKey, c.GplusSecret, getCallbackURL(c.GplusName))) } if c.GithubKey != "" && c.GithubSecret != "" { providers = append(providers, github.New(c.GithubKey, c.GithubSecret, getCallbackURL(c.GithubName))) } if c.SpotifyKey != "" && c.SpotifySecret != "" { providers = append(providers, spotify.New(c.SpotifyKey, c.SpotifySecret, getCallbackURL(c.SpotifyName))) } if c.LinkedinKey != "" && c.LinkedinSecret != "" { providers = append(providers, linkedin.New(c.LinkedinKey, c.LinkedinSecret, getCallbackURL(c.LinkedinName))) } if c.LastfmKey != "" && c.LastfmSecret != "" { providers = append(providers, lastfm.New(c.LastfmKey, c.LastfmSecret, getCallbackURL(c.LastfmName))) } if c.TwitchKey != "" && c.TwitchSecret != "" { providers = append(providers, twitch.New(c.TwitchKey, c.TwitchSecret, getCallbackURL(c.TwitchName))) } if c.DropboxKey != "" && c.DropboxSecret != "" { providers = append(providers, dropbox.New(c.DropboxKey, c.DropboxSecret, getCallbackURL(c.DropboxName))) } if c.DigitaloceanKey != "" && c.DigitaloceanSecret != "" { providers = append(providers, digitalocean.New(c.DigitaloceanKey, c.DigitaloceanSecret, getCallbackURL(c.DigitaloceanName))) } if c.BitbucketKey != "" && c.BitbucketSecret != "" { providers = append(providers, bitbucket.New(c.BitbucketKey, c.BitbucketSecret, getCallbackURL(c.BitbucketName))) } if c.InstagramKey != "" && c.InstagramSecret != "" { providers = append(providers, instagram.New(c.InstagramKey, c.InstagramSecret, getCallbackURL(c.InstagramName))) } if c.BoxKey != "" && c.BoxSecret != "" { providers = append(providers, box.New(c.BoxKey, c.BoxSecret, getCallbackURL(c.BoxName))) } if c.SalesforceKey != "" && c.SalesforceSecret != "" { providers = append(providers, salesforce.New(c.SalesforceKey, c.SalesforceSecret, getCallbackURL(c.SalesforceName))) } if c.AmazonKey != "" && c.AmazonSecret != "" { providers = append(providers, amazon.New(c.AmazonKey, c.AmazonSecret, getCallbackURL(c.AmazonName))) } if c.YammerKey != "" && c.YammerSecret != "" { providers = append(providers, yammer.New(c.YammerKey, c.YammerSecret, getCallbackURL(c.YammerName))) } if c.OneDriveKey != "" && c.OneDriveSecret != "" { providers = append(providers, onedrive.New(c.OneDriveKey, c.OneDriveSecret, getCallbackURL(c.OneDriveName))) } if c.YahooKey != "" && c.YahooSecret != "" { providers = append(providers, yahoo.New(c.YahooKey, c.YahooSecret, getCallbackURL(c.YahooName))) } if c.SlackKey != "" && c.SlackSecret != "" { providers = append(providers, slack.New(c.SlackKey, c.SlackSecret, getCallbackURL(c.SlackName))) } if c.StripeKey != "" && c.StripeSecret != "" { providers = append(providers, stripe.New(c.StripeKey, c.StripeSecret, getCallbackURL(c.StripeName))) } if c.WepayKey != "" && c.WepaySecret != "" { providers = append(providers, wepay.New(c.WepayKey, c.WepaySecret, getCallbackURL(c.WepayName))) } if c.PaypalKey != "" && c.PaypalSecret != "" { providers = append(providers, paypal.New(c.PaypalKey, c.PaypalSecret, getCallbackURL(c.PaypalName))) } if c.SteamKey != "" { providers = append(providers, steam.New(c.SteamKey, getCallbackURL(c.SteamName))) } if c.HerokuKey != "" && c.HerokuSecret != "" { providers = append(providers, heroku.New(c.HerokuKey, c.HerokuSecret, getCallbackURL(c.HerokuName))) } if c.UberKey != "" && c.UberSecret != "" { providers = append(providers, uber.New(c.UberKey, c.UberSecret, getCallbackURL(c.UberName))) } if c.SoundcloudKey != "" && c.SoundcloudSecret != "" { providers = append(providers, soundcloud.New(c.SoundcloudKey, c.SoundcloudSecret, getCallbackURL(c.SoundcloudName))) } if c.GitlabKey != "" && c.GitlabSecret != "" { providers = append(providers, gitlab.New(c.GitlabKey, c.GitlabSecret, getCallbackURL(c.GithubName))) } return }
func main() { goth.UseProviders( twitter.New(os.Getenv("TWITTER_KEY"), os.Getenv("TWITTER_SECRET"), "http://localhost:3000/auth/twitter/callback"), // If you'd like to use authenticate instead of authorize in Twitter provider, use this instead. // twitter.NewAuthenticate(os.Getenv("TWITTER_KEY"), os.Getenv("TWITTER_SECRET"), "http://localhost:3000/auth/twitter/callback"), facebook.New(os.Getenv("FACEBOOK_KEY"), os.Getenv("FACEBOOK_SECRET"), "http://localhost:3000/auth/facebook/callback"), gplus.New(os.Getenv("GPLUS_KEY"), os.Getenv("GPLUS_SECRET"), "http://localhost:3000/auth/gplus/callback"), github.New(os.Getenv("GITHUB_KEY"), os.Getenv("GITHUB_SECRET"), "http://localhost:3000/auth/github/callback"), spotify.New(os.Getenv("SPOTIFY_KEY"), os.Getenv("SPOTIFY_SECRET"), "http://localhost:3000/auth/spotify/callback"), linkedin.New(os.Getenv("LINKEDIN_KEY"), os.Getenv("LINKEDIN_SECRET"), "http://localhost:3000/auth/linkedin/callback"), lastfm.New(os.Getenv("LASTFM_KEY"), os.Getenv("LASTFM_SECRET"), "http://localhost:3000/auth/lastfm/callback"), twitch.New(os.Getenv("TWITCH_KEY"), os.Getenv("TWITCH_SECRET"), "http://localhost:3000/auth/twitch/callback"), dropbox.New(os.Getenv("DROPBOX_KEY"), os.Getenv("DROPBOX_SECRET"), "http://localhost:3000/auth/dropbox/callback"), digitalocean.New(os.Getenv("DIGITALOCEAN_KEY"), os.Getenv("DIGITALOCEAN_SECRET"), "http://localhost:3000/auth/digitalocean/callback", "read"), bitbucket.New(os.Getenv("BITBUCKET_KEY"), os.Getenv("BITBUCKET_SECRET"), "http://localhost:3000/auth/bitbucket/callback"), instagram.New(os.Getenv("INSTAGRAM_KEY"), os.Getenv("INSTAGRAM_SECRET"), "http://localhost:3000/auth/instagram/callback"), box.New(os.Getenv("BOX_KEY"), os.Getenv("BOX_SECRET"), "http://localhost:3000/auth/box/callback"), salesforce.New(os.Getenv("SALESFORCE_KEY"), os.Getenv("SALESFORCE_SECRET"), "http://localhost:3000/auth/salesforce/callback"), amazon.New(os.Getenv("AMAZON_KEY"), os.Getenv("AMAZON_SECRET"), "http://localhost:3000/auth/amazon/callback"), yammer.New(os.Getenv("YAMMER_KEY"), os.Getenv("YAMMER_SECRET"), "http://localhost:3000/auth/yammer/callback"), onedrive.New(os.Getenv("ONEDRIVE_KEY"), os.Getenv("ONEDRIVE_SECRET"), "http://localhost:3000/auth/onedrive/callback"), //Pointed localhost.com to http://localhost:3000/auth/yahoo/callback through proxy as yahoo // does not allow to put custom ports in redirection uri yahoo.New(os.Getenv("YAHOO_KEY"), os.Getenv("YAHOO_SECRET"), "http://localhost.com"), slack.New(os.Getenv("SLACK_KEY"), os.Getenv("SLACK_SECRET"), "http://localhost:3000/auth/slack/callback"), stripe.New(os.Getenv("STRIPE_KEY"), os.Getenv("STRIPE_SECRET"), "http://localhost:3000/auth/stripe/callback"), wepay.New(os.Getenv("WEPAY_KEY"), os.Getenv("WEPAY_SECRET"), "http://localhost:3000/auth/wepay/callback", "view_user"), //By default paypal production auth urls will be used, please set PAYPAL_ENV=sandbox as environment variable for testing //in sandbox environment paypal.New(os.Getenv("PAYPAL_KEY"), os.Getenv("PAYPAL_SECRET"), "http://localhost:3000/auth/paypal/callback"), steam.New(os.Getenv("STEAM_KEY"), "http://localhost:3000/auth/steam/callback"), heroku.New(os.Getenv("HEROKU_KEY"), os.Getenv("HEROKU_SECRET"), "http://localhost:3000/auth/heroku/callback"), uber.New(os.Getenv("UBER_KEY"), os.Getenv("UBER_SECRET"), "http://localhost:3000/auth/uber/callback"), soundcloud.New(os.Getenv("SOUNDCLOUD_KEY"), os.Getenv("SOUNDCLOUD_SECRET"), "http://localhost:3000/auth/soundcloud/callback"), gitlab.New(os.Getenv("GITLAB_KEY"), os.Getenv("GITLAB_SECRET"), "http://localhost:3000/auth/gitlab/callback"), ) m := make(map[string]string) m["amazon"] = "Amazon" m["bitbucket"] = "Bitbucket" m["box"] = "Box" m["digitalocean"] = "Digital Ocean" m["dropbox"] = "Dropbox" m["facebook"] = "Facebook" m["github"] = "Github" m["gitlab"] = "Gitlab" m["soundcloud"] = "SoundCloud" m["spotify"] = "Spotify" m["steam"] = "Steam" m["stripe"] = "Stripe" m["twitch"] = "Twitch" m["uber"] = "Uber" m["wepay"] = "Wepay" m["yahoo"] = "Yahoo" m["yammer"] = "Yammer" m["gplus"] = "Google Plus" m["heroku"] = "Heroku" m["instagram"] = "Instagram" m["lastfm"] = "Last FM" m["linkedin"] = "Linkedin" m["onedrive"] = "Onedrive" m["paypal"] = "Paypal" m["twitter"] = "Twitter" m["salesforce"] = "Salesforce" m["slack"] = "Slack" var keys []string for k := range m { keys = append(keys, k) } sort.Strings(keys) providerIndex := &ProviderIndex{Providers: keys, ProvidersMap: m} p := pat.New() p.Get("/auth/{provider}/callback", func(res http.ResponseWriter, req *http.Request) { user, err := gothic.CompleteUserAuth(res, req) if err != nil { fmt.Fprintln(res, err) return } t, _ := template.New("foo").Parse(userTemplate) t.Execute(res, user) }) p.Get("/auth/{provider}", gothic.BeginAuthHandler) p.Get("/", func(res http.ResponseWriter, req *http.Request) { t, _ := template.New("foo").Parse(indexTemplate) t.Execute(res, providerIndex) }) http.ListenAndServe(":3000", p) }
func useFacebook(providerKey, providerSecret string) { goth.UseProviders( facebook.New(providerKey, providerSecret, app.EndPointURL+"auth/facebook/callback"), ) }
func main() { const BaseURL = "http://localhost:8000" goth.UseProviders( twitter.New(os.Getenv("TWITTER_KEY"), os.Getenv("TWITTER_SECRET"), BaseURL+"/auth/twitter/callback"), facebook.New(os.Getenv("FACEBOOK_KEY"), os.Getenv("FACEBOOK_SECRET"), BaseURL+"/auth/facebook/callback"), gplus.New(os.Getenv("GPLUS_KEY"), os.Getenv("GPLUS_SECRET"), BaseURL+"/auth/gplus/callback"), github.New(os.Getenv("GITHUB_KEY"), os.Getenv("GITHUB_SECRET"), BaseURL+"/auth/github/callback"), spotify.New(os.Getenv("SPOTIFY_KEY"), os.Getenv("SPOTIFY_SECRET"), BaseURL+"/auth/spotify/callback"), linkedin.New(os.Getenv("LINKEDIN_KEY"), os.Getenv("LINKEDIN_SECRET"), BaseURL+"/auth/linkedin/callback"), lastfm.New(os.Getenv("LASTFM_KEY"), os.Getenv("LASTFM_SECRET"), BaseURL+"/auth/lastfm/callback"), twitch.New(os.Getenv("TWITCH_KEY"), os.Getenv("TWITCH_SECRET"), BaseURL+"/auth/twitch/callback"), ) tpl := template.New("") template.Must(tpl.New("index.html").Parse(` <p><a href="/auth/twitter">Log in with Twitter</a></p> <p><a href="/auth/facebook">Log in with Facebook</a></p> <p><a href="/auth/gplus">Log in with GPlus</a></p> <p><a href="/auth/github">Log in with Github</a></p> <p><a href="/auth/spotify">Log in with Spotify</a></p> <p><a href="/auth/lastfm">Log in with LastFM</a></p> <p><a href="/auth/twitch">Log in with Twitch</a></p> `)) template.Must(tpl.New("user.html").Parse(` <p>Name: {{.Name}}</p> <p>Email: {{.Email}}</p> <p>NickName: {{.NickName}}</p> <p>Location: {{.Location}}</p> <p>AvatarURL: {{.AvatarURL}} <img src="{{.AvatarURL}}"></p> <p>Description: {{.Description}}</p> <p>UserID: {{.UserID}}</p> <p>AccessToken: {{.AccessToken}}</p> `)) goji.Get("/auth/:provider", func(c web.C, w http.ResponseWriter, r *http.Request) { err := gothic.BeginAuth(c.URLParams["provider"], w, r) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } }) goji.Get("/auth/:provider/callback", func(c web.C, w http.ResponseWriter, r *http.Request) { user, err := gothic.CompleteAuth(c.URLParams["provider"], w, r) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } err = tpl.ExecuteTemplate(w, "user.html", user) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } }) goji.Get("/", func(c web.C, w http.ResponseWriter, r *http.Request) { err := tpl.ExecuteTemplate(w, "index.html", nil) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } }) goji.Serve() }
func main() { getPathFromParameterAndLoadConfigFile() goth.UseProviders( facebook.New("870850926323133", "54c9687312192961b6e2b5caa319db4b", "http://localhost:8081/auth/facebook/callback"), ) gothic.GetState = func(req *http.Request) string { return req.URL.Query().Get("state") } router := gin.New() router.Use(cors.Middleware(cors.Options{ AllowHeaders: []string{"Origin", "Accept", "Content-Type", "Authorization", "Access-Control-Allow-Headers", "Access-Control-Allow-Methods", "Access-Control-Allow-Origin"}, })) // Set Logger gin.DefaultWriter = config.GetLogFile() router.Use(gin.Logger()) router.Use(gin.Recovery()) tasks.SetRoutes(router) public := router.Group("/api") public.GET("/", func(c *gin.Context) { tokenString, err := createJWTToken("AnonymousUser") if err != nil { c.JSON(500, gin.H{"message": "Could not generate token"}) return } c.JSON(200, gin.H{"accessToken": tokenString}) }) private := router.Group("/api/private") private.Use(jwt.Auth(config.TokenSecret)) /* Set this header in your request to get here. Authorization: Bearer `token` */ private.GET("/", func(c *gin.Context) { c.JSON(200, gin.H{"message": "Hello from private"}) }) authRoute := router.Group("/auth") authRoute.GET("/", func(c *gin.Context) { c.JSON(200, gin.H{"message": "Go to /auth/facebook"}) }) authRoute.GET("/facebook", func(c *gin.Context) { gothic.GetProviderName = getProviderFacebook gothic.BeginAuthHandler(c.Writer, c.Request) }) authRoute.GET("/facebook/callback", func(c *gin.Context) { user, err := gothic.CompleteUserAuth(c.Writer, c.Request) if err != nil { fmt.Fprintln(c.Writer, err) return } tokenString, err := createJWTToken(user.Email) if err != nil { c.JSON(500, gin.H{"message": "Could not generate token"}) } c.JSON(200, gin.H{ "name": user.Name, "email": user.Email, "userId": user.UserID, "facebookAccessToken": user.AccessToken, "accessToken": tokenString, }) }) router.Run(config.Settings["ListenAddress"].(string)) }
func main() { const BaseURL = "http://localhost:8000" goth.UseProviders( twitter.New(os.Getenv("TWITTER_KEY"), os.Getenv("TWITTER_SECRET"), BaseURL+"/auth/twitter/callback"), facebook.New(os.Getenv("FACEBOOK_KEY"), os.Getenv("FACEBOOK_SECRET"), BaseURL+"/auth/facebook/callback"), gplus.New(os.Getenv("GPLUS_KEY"), os.Getenv("GPLUS_SECRET"), BaseURL+"/auth/gplus/callback"), github.New(os.Getenv("GITHUB_KEY"), os.Getenv("GITHUB_SECRET"), BaseURL+"/auth/github/callback"), spotify.New(os.Getenv("SPOTIFY_KEY"), os.Getenv("SPOTIFY_SECRET"), BaseURL+"/auth/spotify/callback"), linkedin.New(os.Getenv("LINKEDIN_KEY"), os.Getenv("LINKEDIN_SECRET"), BaseURL+"/auth/linkedin/callback"), lastfm.New(os.Getenv("LASTFM_KEY"), os.Getenv("LASTFM_SECRET"), BaseURL+"/auth/lastfm/callback"), twitch.New(os.Getenv("TWITCH_KEY"), os.Getenv("TWITCH_SECRET"), BaseURL+"/auth/twitch/callback"), ) tpl := template.New("") template.Must(tpl.New("index.html").Parse(` <p><a href="/auth/twitter">Log in with Twitter</a></p> <p><a href="/auth/facebook">Log in with Facebook</a></p> <p><a href="/auth/gplus">Log in with GPlus</a></p> <p><a href="/auth/github">Log in with Github</a></p> <p><a href="/auth/spotify">Log in with Spotify</a></p> <p><a href="/auth/lastfm">Log in with LastFM</a></p> <p><a href="/auth/twitch">Log in with Twitch</a></p> `)) template.Must(tpl.New("user.html").Parse(` <p>Name: {{.Name}}</p> <p>Email: {{.Email}}</p> <p>NickName: {{.NickName}}</p> <p>Location: {{.Location}}</p> <p>AvatarURL: {{.AvatarURL}} <img src="{{.AvatarURL}}"></p> <p>Description: {{.Description}}</p> <p>UserID: {{.UserID}}</p> <p>AccessToken: {{.AccessToken}}</p> `)) http.HandleFunc("/auth/", func(w http.ResponseWriter, r *http.Request) { ss := strings.SplitN(r.URL.Path, "/", 4) switch { case len(ss) == 3: err := gothic.BeginAuth(ss[2], w, r) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } case len(ss) == 4 && ss[3] == "callback": user, err := gothic.CompleteAuth(ss[2], w, r) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } err = tpl.ExecuteTemplate(w, "user.html", user) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } default: http.NotFound(w, r) } }) http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { err := tpl.ExecuteTemplate(w, "index.html", nil) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } }) log.Fatal(http.ListenAndServe(":8000", nil)) }