01d957677f
* initial stuff for oauth2 login, fails on: * login button on the signIn page to start the OAuth2 flow and a callback for each provider Only GitHub is implemented for now * show login button only when the OAuth2 consumer is configured (and activated) * create macaron group for oauth2 urls * prevent net/http in modules (other then oauth2) * use a new data sessions oauth2 folder for storing the oauth2 session data * add missing 2FA when this is enabled on the user * add password option for OAuth2 user , for use with git over http and login to the GUI * add tip for registering a GitHub OAuth application * at startup of Gitea register all configured providers and also on adding/deleting of new providers * custom handling of errors in oauth2 request init + show better tip * add ExternalLoginUser model and migration script to add it to database * link a external account to an existing account (still need to handle wrong login and signup) and remove if user is removed * remove the linked external account from the user his settings * if user is unknown we allow him to register a new account or link it to some existing account * sign up with button on signin page (als change OAuth2Provider structure so we can store basic stuff about providers) * from gorilla/sessions docs: "Important Note: If you aren't using gorilla/mux, you need to wrap your handlers with context.ClearHandler as or else you will leak memory!" (we're using gorilla/sessions for storing oauth2 sessions) * use updated goth lib that now supports getting the OAuth2 user if the AccessToken is still valid instead of re-authenticating (prevent flooding the OAuth2 provider)
143 lines
2.8 KiB
Markdown
143 lines
2.8 KiB
Markdown
# Goth: Multi-Provider Authentication for Go [![GoDoc](https://godoc.org/github.com/markbates/goth?status.svg)](https://godoc.org/github.com/markbates/goth) [![Build Status](https://travis-ci.org/markbates/goth.svg)](https://travis-ci.org/markbates/goth)
|
|
|
|
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](https://github.com/intridea/omniauth).
|
|
|
|
## Installation
|
|
|
|
```text
|
|
$ go get github.com/markbates/goth
|
|
```
|
|
|
|
## Supported Providers
|
|
|
|
* Amazon
|
|
* Auth0
|
|
* Bitbucket
|
|
* Box
|
|
* Cloud Foundry
|
|
* Dailymotion
|
|
* Deezer
|
|
* Digital Ocean
|
|
* Discord
|
|
* Dropbox
|
|
* Facebook
|
|
* Fitbit
|
|
* GitHub
|
|
* Gitlab
|
|
* Google+
|
|
* Heroku
|
|
* InfluxCloud
|
|
* Instagram
|
|
* Intercom
|
|
* Lastfm
|
|
* Linkedin
|
|
* Meetup
|
|
* OneDrive
|
|
* OpenID Connect (auto discovery)
|
|
* Paypal
|
|
* SalesForce
|
|
* Slack
|
|
* Soundcloud
|
|
* Spotify
|
|
* Steam
|
|
* Stripe
|
|
* Twitch
|
|
* Twitter
|
|
* Uber
|
|
* Wepay
|
|
* Yahoo
|
|
* Yammer
|
|
|
|
## Examples
|
|
|
|
See the [examples](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
|
|
|
|
```text
|
|
$ git clone git@github.com:markbates/goth.git
|
|
```
|
|
or use
|
|
```text
|
|
$ go get github.com/markbates/goth
|
|
```
|
|
```text
|
|
$ cd goth/examples
|
|
$ go get -v
|
|
$ go build
|
|
$ ./examples
|
|
```
|
|
|
|
Now open up your browser and go to [http://localhost:3000](http://localhost:3000) to see the example.
|
|
|
|
To actually use the different providers, please make sure you configure them given the system environments as defined in the examples/main.go file
|
|
|
|
## Issues
|
|
|
|
Issues always stand a significantly better chance of getting fixed if the 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. Commit your changes (git commit -am 'Add some feature')
|
|
5. Push to the branch (git push origin my-new-feature)
|
|
6. Create new Pull Request
|
|
|
|
## Contributors
|
|
|
|
* Mark Bates
|
|
* Tyler Bunnell
|
|
* Corey McGrillis
|
|
* willemvd
|
|
* Rakesh Goyal
|
|
* Andy Grunwald
|
|
* Glenn Walker
|
|
* Kevin Fitzpatrick
|
|
* Ben Tranter
|
|
* Sharad Ganapathy
|
|
* Andrew Chilton
|
|
* sharadgana
|
|
* Aurorae
|
|
* Craig P Jolicoeur
|
|
* Zac Bergquist
|
|
* Geoff Franks
|
|
* Raphael Geronimi
|
|
* Noah Shibley
|
|
* lumost
|
|
* oov
|
|
* Felix Lamouroux
|
|
* Rafael Quintela
|
|
* Tyler
|
|
* DenSm
|
|
* Samy KACIMI
|
|
* dante gray
|
|
* Noah
|
|
* Jacob Walker
|
|
* Marin Martinic
|
|
* Roy
|
|
* Omni Adams
|
|
* Sasa Brankovic
|
|
* dkhamsing
|
|
* Dante Swift
|
|
* Attila Domokos
|
|
* Albin Gilles
|
|
* Syed Zubairuddin
|
|
* Johnny Boursiquot
|
|
* Jerome Touffe-Blin
|
|
* bryanl
|
|
* Masanobu YOSHIOKA
|
|
* Jonathan Hall
|
|
* HaiMing.Yin
|
|
* Sairam Kunala
|