MCPcopy Index your code
hub / github.com/markbates/goth

github.com/markbates/goth @v1.82.0 sqlite

repository ↗ · DeepWiki ↗ · release v1.82.0 ↗
2,144 symbols 6,746 edges 306 files 1,081 documented · 50% 3 cross-repo links
README

Goth: Multi-Provider Authentication for Go GoDoc Build Status Go Report Card

Package goth provides a simple, clean, and idiomatic way to write authentication packages for Go web applications.

Unlike other similar packages, Goth, lets you write OAuth, OAuth2, or any other protocol providers, as long as they implement the Provider and Session interfaces.

This package was inspired by https://github.com/intridea/omniauth.

Installation

$ go get github.com/markbates/goth

Supported Providers

  • Amazon
  • Apple
  • Auth0
  • Azure AD
  • Battle.net
  • Bitbucket
  • Box
  • ClassLink
  • Cloud Foundry
  • Dailymotion
  • Deezer
  • DigitalOcean
  • Discord
  • Dropbox
  • Eve Online
  • Facebook
  • Fitbit
  • Gitea
  • GitHub
  • Gitlab
  • Google
  • Google+ (deprecated)
  • Heroku
  • InfluxCloud
  • Instagram
  • Intercom
  • Kakao
  • Lastfm
  • LINE
  • Linkedin
  • Mailru
  • Meetup
  • MicrosoftOnline
  • Naver
  • Nextcloud
  • Okta
  • OneDrive
  • OpenID Connect (auto discovery)
  • Oura
  • Patreon
  • Paypal
  • Reddit
  • SalesForce
  • Shopify
  • Slack
  • Soundcloud
  • Spotify
  • Steam
  • Strava
  • Stripe
  • TikTok
  • Tumblr
  • Twitch
  • Twitter
  • Typetalk
  • Uber
  • VK
  • WeCom
  • Wepay
  • Xero
  • Yahoo
  • Yammer
  • Yandex
  • Zoom

Examples

See the examples folder for a working application that lets users authenticate through Twitter, Facebook, Google Plus etc.

To run the example either clone the source from GitHub

$ git clone git@github.com:markbates/goth.git

or use

$ go get github.com/markbates/goth
$ cd goth/examples
$ go get -v
$ go build
$ ./examples

Now open up your browser and go to http://localhost:3000 to see the example.

To actually use the different providers, please make sure you set environment variables. Example given in the examples/main.go file

Security Notes

By default, gothic uses a CookieStore from the gorilla/sessions package to store session data.

As configured, this default store (gothic.Store) will generate cookies with Options:

&Options{
   Path:   "/",
   Domain: "",
   MaxAge: 86400 * 30,
   HttpOnly: true,
   Secure: false,
 }

To tailor these fields for your application, you can override the gothic.Store variable at startup.

The following snippet shows one way to do this:

key := ""             // Replace with your SESSION_SECRET or similar
maxAge := 86400 * 30  // 30 days
isProd := false       // Set to true when serving over https

store := sessions.NewCookieStore([]byte(key))
store.MaxAge(maxAge)
store.Options.Path = "/"
store.Options.HttpOnly = true   // HttpOnly should always be enabled
store.Options.Secure = isProd

gothic.Store = store

Issues

Issues always stand a significantly better chance of getting fixed if they are accompanied by a pull request.

Contributing

Would I love to see more providers? Certainly! Would you love to contribute one? Hopefully, yes!

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Write Tests!
  4. Make sure the codebase adhere to the Go coding standards by executing gofmt -s -w ./
  5. Commit your changes (git commit -am 'Add some feature')
  6. Push to the branch (git push origin my-new-feature)
  7. Create new Pull Request

Extension points exported contracts — how you extend this code

Provider (Interface)
Provider needs to be implemented for each 3rd party authentication provider e.g. Facebook, Twitter, etc... [74 implementers]
provider.go
Session (Interface)
Session needs to be implemented as part of the provider package. It will be marshaled and persisted between requests to [74 …
session.go
Lark (Interface)
Lark is the implementation of `goth.Provider` for accessing Lark [1 implementers]
providers/lark/lark.go
Params (Interface)
Params is used to pass data to sessions for authorization. An existing implementation, and the one most likely to be use [2 …
session.go

Core symbols most depended-on inside this repo

Get
called by 167
session.go
Error
called by 97
providers/oura/errors.go
BeginAuth
called by 91
provider.go
ContextForClient
called by 88
provider.go
Marshal
called by 85
session.go
HTTPClientWithFallBack
called by 74
provider.go
UnmarshalSession
called by 73
provider.go
FetchUser
called by 16
provider.go

Shape

Method 1,007
Function 944
Struct 184
TypeAlias 5
Interface 4

Languages

Go100%

Modules by API surface

providers/openidConnect/openidConnect.go26 symbols
providers/lark/lark.go21 symbols
gothic/gothic_test.go19 symbols
providers/dropbox/dropbox.go18 symbols
providers/bitbucket/bitbucket.go18 symbols
providers/apple/apple.go17 symbols
providers/google/google.go16 symbols
providers/azureadv2/azureadv2.go16 symbols
provider.go16 symbols
providers/xero/xero.go15 symbols
providers/wechat/wechat.go14 symbols
providers/tiktok/tiktok.go14 symbols

Dependencies from manifests, versioned

cloud.google.com/go/compute/metadatav0.3.0 · 1×
github.com/decred/dcrd/dcrec/secp256k1/v4v4.2.0 · 1×
github.com/gorilla/contextv1.1.1 · 1×
github.com/gorilla/patv0.0.0-2018011822202 · 1×
github.com/gorilla/securecookiev1.1.1 · 1×
github.com/jarcoal/httpmockv0.0.0-2018042417512 · 1×

For agents

$ claude mcp add goth \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact