* 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)
		
			
				
	
	
		
			144 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			144 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # Goth: Multi-Provider Authentication for Go [](https://godoc.org/github.com/markbates/goth) [](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
 |