-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
b32286c
commit 034073a
Showing
4 changed files
with
1,847 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,277 @@ | ||
package main | ||
|
||
import ( | ||
"html/template" | ||
"log" | ||
"os" | ||
"sort" | ||
|
||
fiber_goth "github.com/zeiss/fiber-goth" | ||
|
||
"github.com/gofiber/fiber/v2" | ||
"github.com/markbates/goth" | ||
"github.com/markbates/goth/providers/amazon" | ||
"github.com/markbates/goth/providers/apple" | ||
"github.com/markbates/goth/providers/auth0" | ||
"github.com/markbates/goth/providers/azuread" | ||
"github.com/markbates/goth/providers/battlenet" | ||
"github.com/markbates/goth/providers/bitbucket" | ||
"github.com/markbates/goth/providers/box" | ||
"github.com/markbates/goth/providers/dailymotion" | ||
"github.com/markbates/goth/providers/deezer" | ||
"github.com/markbates/goth/providers/digitalocean" | ||
"github.com/markbates/goth/providers/discord" | ||
"github.com/markbates/goth/providers/dropbox" | ||
"github.com/markbates/goth/providers/eveonline" | ||
"github.com/markbates/goth/providers/facebook" | ||
"github.com/markbates/goth/providers/fitbit" | ||
"github.com/markbates/goth/providers/gitea" | ||
"github.com/markbates/goth/providers/github" | ||
"github.com/markbates/goth/providers/gitlab" | ||
"github.com/markbates/goth/providers/google" | ||
"github.com/markbates/goth/providers/gplus" | ||
"github.com/markbates/goth/providers/heroku" | ||
"github.com/markbates/goth/providers/instagram" | ||
"github.com/markbates/goth/providers/intercom" | ||
"github.com/markbates/goth/providers/kakao" | ||
"github.com/markbates/goth/providers/lastfm" | ||
"github.com/markbates/goth/providers/line" | ||
"github.com/markbates/goth/providers/linkedin" | ||
"github.com/markbates/goth/providers/mastodon" | ||
"github.com/markbates/goth/providers/meetup" | ||
"github.com/markbates/goth/providers/microsoftonline" | ||
"github.com/markbates/goth/providers/naver" | ||
"github.com/markbates/goth/providers/nextcloud" | ||
"github.com/markbates/goth/providers/okta" | ||
"github.com/markbates/goth/providers/onedrive" | ||
"github.com/markbates/goth/providers/openidConnect" | ||
"github.com/markbates/goth/providers/patreon" | ||
"github.com/markbates/goth/providers/paypal" | ||
"github.com/markbates/goth/providers/salesforce" | ||
"github.com/markbates/goth/providers/seatalk" | ||
"github.com/markbates/goth/providers/shopify" | ||
"github.com/markbates/goth/providers/slack" | ||
"github.com/markbates/goth/providers/soundcloud" | ||
"github.com/markbates/goth/providers/spotify" | ||
"github.com/markbates/goth/providers/steam" | ||
"github.com/markbates/goth/providers/strava" | ||
"github.com/markbates/goth/providers/stripe" | ||
"github.com/markbates/goth/providers/tiktok" | ||
"github.com/markbates/goth/providers/twitch" | ||
"github.com/markbates/goth/providers/twitter" | ||
"github.com/markbates/goth/providers/twitterv2" | ||
"github.com/markbates/goth/providers/typetalk" | ||
"github.com/markbates/goth/providers/uber" | ||
"github.com/markbates/goth/providers/vk" | ||
"github.com/markbates/goth/providers/wecom" | ||
"github.com/markbates/goth/providers/wepay" | ||
"github.com/markbates/goth/providers/xero" | ||
"github.com/markbates/goth/providers/yahoo" | ||
"github.com/markbates/goth/providers/yammer" | ||
"github.com/markbates/goth/providers/yandex" | ||
"github.com/markbates/goth/providers/zoom" | ||
) | ||
|
||
func main() { | ||
goth.UseProviders( | ||
// Use twitterv2 instead of twitter if you only have access to the Essential API Level | ||
// the twitter provider uses a v1.1 API that is not available to the Essential Level | ||
twitterv2.New(os.Getenv("TWITTER_KEY"), os.Getenv("TWITTER_SECRET"), "http://localhost:3000/auth/twitterv2/callback"), | ||
// If you'd like to use authenticate instead of authorize in TwitterV2 provider, use this instead. | ||
// twitterv2.NewAuthenticate(os.Getenv("TWITTER_KEY"), os.Getenv("TWITTER_SECRET"), "http://localhost:3000/auth/twitterv2/callback"), | ||
|
||
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"), | ||
|
||
tiktok.New(os.Getenv("TIKTOK_KEY"), os.Getenv("TIKTOK_SECRET"), "http://localhost:3000/auth/tiktok/callback"), | ||
facebook.New(os.Getenv("FACEBOOK_KEY"), os.Getenv("FACEBOOK_SECRET"), "http://localhost:3000/auth/facebook/callback"), | ||
fitbit.New(os.Getenv("FITBIT_KEY"), os.Getenv("FITBIT_SECRET"), "http://localhost:3000/auth/fitbit/callback"), | ||
google.New(os.Getenv("GOOGLE_KEY"), os.Getenv("GOOGLE_SECRET"), "http://localhost:3000/auth/google/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"), | ||
line.New(os.Getenv("LINE_KEY"), os.Getenv("LINE_SECRET"), "http://localhost:3000/auth/line/callback", "profile", "openid", "email"), | ||
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"), | ||
intercom.New(os.Getenv("INTERCOM_KEY"), os.Getenv("INTERCOM_SECRET"), "http://localhost:3000/auth/intercom/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"), | ||
seatalk.New(os.Getenv("SEATALK_KEY"), os.Getenv("SEATALK_SECRET"), "http://localhost:3000/auth/seatalk/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"), | ||
azuread.New(os.Getenv("AZUREAD_KEY"), os.Getenv("AZUREAD_SECRET"), "http://localhost:3000/auth/azuread/callback", nil), | ||
microsoftonline.New(os.Getenv("MICROSOFTONLINE_KEY"), os.Getenv("MICROSOFTONLINE_SECRET"), "http://localhost:3000/auth/microsoftonline/callback"), | ||
battlenet.New(os.Getenv("BATTLENET_KEY"), os.Getenv("BATTLENET_SECRET"), "http://localhost:3000/auth/battlenet/callback"), | ||
eveonline.New(os.Getenv("EVEONLINE_KEY"), os.Getenv("EVEONLINE_SECRET"), "http://localhost:3000/auth/eveonline/callback"), | ||
kakao.New(os.Getenv("KAKAO_KEY"), os.Getenv("KAKAO_SECRET"), "http://localhost:3000/auth/kakao/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"), | ||
typetalk.New(os.Getenv("TYPETALK_KEY"), os.Getenv("TYPETALK_SECRET"), "http://localhost:3000/auth/typetalk/callback", "my"), | ||
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"), | ||
dailymotion.New(os.Getenv("DAILYMOTION_KEY"), os.Getenv("DAILYMOTION_SECRET"), "http://localhost:3000/auth/dailymotion/callback", "email"), | ||
deezer.New(os.Getenv("DEEZER_KEY"), os.Getenv("DEEZER_SECRET"), "http://localhost:3000/auth/deezer/callback", "email"), | ||
discord.New(os.Getenv("DISCORD_KEY"), os.Getenv("DISCORD_SECRET"), "http://localhost:3000/auth/discord/callback", discord.ScopeIdentify, discord.ScopeEmail), | ||
meetup.New(os.Getenv("MEETUP_KEY"), os.Getenv("MEETUP_SECRET"), "http://localhost:3000/auth/meetup/callback"), | ||
|
||
// Auth0 allocates domain per customer, a domain must be provided for auth0 to work | ||
auth0.New(os.Getenv("AUTH0_KEY"), os.Getenv("AUTH0_SECRET"), "http://localhost:3000/auth/auth0/callback", os.Getenv("AUTH0_DOMAIN")), | ||
xero.New(os.Getenv("XERO_KEY"), os.Getenv("XERO_SECRET"), "http://localhost:3000/auth/xero/callback"), | ||
vk.New(os.Getenv("VK_KEY"), os.Getenv("VK_SECRET"), "http://localhost:3000/auth/vk/callback"), | ||
naver.New(os.Getenv("NAVER_KEY"), os.Getenv("NAVER_SECRET"), "http://localhost:3000/auth/naver/callback"), | ||
yandex.New(os.Getenv("YANDEX_KEY"), os.Getenv("YANDEX_SECRET"), "http://localhost:3000/auth/yandex/callback"), | ||
nextcloud.NewCustomisedDNS(os.Getenv("NEXTCLOUD_KEY"), os.Getenv("NEXTCLOUD_SECRET"), "http://localhost:3000/auth/nextcloud/callback", os.Getenv("NEXTCLOUD_URL")), | ||
gitea.New(os.Getenv("GITEA_KEY"), os.Getenv("GITEA_SECRET"), "http://localhost:3000/auth/gitea/callback"), | ||
shopify.New(os.Getenv("SHOPIFY_KEY"), os.Getenv("SHOPIFY_SECRET"), "http://localhost:3000/auth/shopify/callback", shopify.ScopeReadCustomers, shopify.ScopeReadOrders), | ||
apple.New(os.Getenv("APPLE_KEY"), os.Getenv("APPLE_SECRET"), "http://localhost:3000/auth/apple/callback", nil, apple.ScopeName, apple.ScopeEmail), | ||
strava.New(os.Getenv("STRAVA_KEY"), os.Getenv("STRAVA_SECRET"), "http://localhost:3000/auth/strava/callback"), | ||
okta.New(os.Getenv("OKTA_ID"), os.Getenv("OKTA_SECRET"), os.Getenv("OKTA_ORG_URL"), "http://localhost:3000/auth/okta/callback", "openid", "profile", "email"), | ||
mastodon.New(os.Getenv("MASTODON_KEY"), os.Getenv("MASTODON_SECRET"), "http://localhost:3000/auth/mastodon/callback", "read:accounts"), | ||
wecom.New(os.Getenv("WECOM_CORP_ID"), os.Getenv("WECOM_SECRET"), os.Getenv("WECOM_AGENT_ID"), "http://localhost:3000/auth/wecom/callback"), | ||
zoom.New(os.Getenv("ZOOM_KEY"), os.Getenv("ZOOM_SECRET"), "http://localhost:3000/auth/zoom/callback", "read:user"), | ||
patreon.New(os.Getenv("PATREON_KEY"), os.Getenv("PATREON_SECRET"), "http://localhost:3000/auth/patreon/callback"), | ||
) | ||
|
||
openidConnect, _ := openidConnect.New(os.Getenv("OPENID_CONNECT_KEY"), os.Getenv("OPENID_CONNECT_SECRET"), "http://localhost:3000/auth/openid-connect/callback", os.Getenv("OPENID_CONNECT_DISCOVERY_URL")) | ||
if openidConnect != nil { | ||
goth.UseProviders(openidConnect) | ||
} | ||
|
||
m := map[string]string{ | ||
"amazon": "Amazon", | ||
"apple": "Apple", | ||
"auth0": "Auth0", | ||
"azuread": "Azure AD", | ||
"battlenet": "Battle.net", | ||
"bitbucket": "Bitbucket", | ||
"box": "Box", | ||
"dailymotion": "Dailymotion", | ||
"deezer": "Deezer", | ||
"digitalocean": "Digital Ocean", | ||
"discord": "Discord", | ||
"dropbox": "Dropbox", | ||
"eveonline": "Eve Online", | ||
"facebook": "Facebook", | ||
"fitbit": "Fitbit", | ||
"gitea": "Gitea", | ||
"github": "Github", | ||
"gitlab": "Gitlab", | ||
"google": "Google", | ||
"gplus": "Google Plus", | ||
"heroku": "Heroku", | ||
"instagram": "Instagram", | ||
"intercom": "Intercom", | ||
"kakao": "Kakao", | ||
"lastfm": "Last FM", | ||
"line": "LINE", | ||
"linkedin": "LinkedIn", | ||
"mastodon": "Mastodon", | ||
"meetup": "Meetup.com", | ||
"microsoftonline": "Microsoft Online", | ||
"naver": "Naver", | ||
"nextcloud": "NextCloud", | ||
"okta": "Okta", | ||
"onedrive": "Onedrive", | ||
"openid-connect": "OpenID Connect", | ||
"patreon": "Patreon", | ||
"paypal": "Paypal", | ||
"salesforce": "Salesforce", | ||
"seatalk": "SeaTalk", | ||
"shopify": "Shopify", | ||
"slack": "Slack", | ||
"soundcloud": "SoundCloud", | ||
"spotify": "Spotify", | ||
"steam": "Steam", | ||
"strava": "Strava", | ||
"stripe": "Stripe", | ||
"tiktok": "TikTok", | ||
"twitch": "Twitch", | ||
"twitter": "Twitter", | ||
"twitterv2": "Twitter", | ||
"typetalk": "Typetalk", | ||
"uber": "Uber", | ||
"vk": "VK", | ||
"wecom": "WeCom", | ||
"wepay": "Wepay", | ||
"xero": "Xero", | ||
"yahoo": "Yahoo", | ||
"yammer": "Yammer", | ||
"yandex": "Yandex", | ||
"zoom": "Zoom", | ||
} | ||
var keys []string | ||
for k := range m { | ||
keys = append(keys, k) | ||
} | ||
sort.Strings(keys) | ||
|
||
providerIndex := &ProviderIndex{Providers: keys, ProvidersMap: m} | ||
|
||
app := fiber.New() | ||
engine := template.New("views") | ||
|
||
t, err := engine.Parse(indexTemplate) | ||
if err != nil { | ||
log.Fatal(err) | ||
} | ||
|
||
app.Get("/login/:provider", fiber_goth.NewBeginAuthHandler()) | ||
|
||
app.Get("/auth/:provider/callback/", func(c *fiber.Ctx) error { | ||
return nil | ||
}) | ||
|
||
app.Get("/logout/", func(c *fiber.Ctx) error { | ||
return nil | ||
}) | ||
|
||
app.Get("/", func(c *fiber.Ctx) error { | ||
c.Set(fiber.HeaderContentType, fiber.MIMETextHTML) | ||
return t.Execute(c.Response().BodyWriter(), providerIndex) | ||
}) | ||
|
||
if err := app.Listen(":3000"); err != nil { | ||
log.Fatal(err) | ||
} | ||
} | ||
|
||
type ProviderIndex struct { | ||
Providers []string | ||
ProvidersMap map[string]string | ||
} | ||
|
||
var indexTemplate = `{{range $key,$value:=.Providers}} | ||
<p><a href="/login/{{$value}}">Log in with {{index $.ProvidersMap $value}}</a></p> | ||
{{end}}` | ||
|
||
var userTemplate = ` | ||
<p><a href="/logout/{{.Provider}}">logout</a></p> | ||
<p>Name: {{.Name}} [{{.LastName}}, {{.FirstName}}]</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> | ||
<p>ExpiresAt: {{.ExpiresAt}}</p> | ||
<p>RefreshToken: {{.RefreshToken}}</p> | ||
` |
Oops, something went wrong.