OAuth2 authentication for yesod
Go to file
Sergei Trofimovich c514df2c39 Slack.hs: fix haddock markup
haddock complained thusly:
  Yesod/Auth/OAuth2/Slack.hs:9:1: error:
    parse error on input ‘module’

Signed-off-by: Sergei Trofimovich <siarheit@google.com>
2016-07-02 15:13:38 +01:00
example Add example application 2016-02-10 09:50:51 -05:00
test Add basic testing infrastructure 2016-01-03 10:36:52 -05:00
Yesod/Auth Slack.hs: fix haddock markup 2016-07-02 15:13:38 +01:00
.gitignore Add example application 2016-02-10 09:50:51 -05:00
circle.yml Add example application 2016-02-10 09:50:51 -05:00
LICENSE Initial import 2013-07-14 11:11:44 +02:00
README.md Sign in with Slack 2016-07-01 11:00:14 -04:00
Setup.lhs Initial import 2013-07-14 11:11:44 +02:00
stack.yaml Add example application 2016-02-10 09:50:51 -05:00
yesod-auth-oauth2.cabal Bump to version 0.2.0 2016-07-01 11:10:15 -04:00

Yesod.Auth.OAuth2

OAuth2 AuthPlugins for Yesod.

Basic Usage

To use one of the supported providers:

import Yesod.Auth
import Yesod.Auth.OAuth2.Github

instance YesodAuth App where
    -- ...

    authPlugins _ = [oauth2Github clientId clientSecret]

clientId :: Text
clientId = "..."

clientSecret :: Text
clientSecret = "..."

Some plugins, such as GitHub and Slack, have scoped functions for requesting additional information:

import Yesod.Auth
import Yesod.Auth.OAuth2.Slack

instance YesodAuth App where
    -- ...

    authPlugins _ =
        [oauth2SlackScoped clientId clientSecret slackScopes]
      where
        slackScopes = [SlackEmailScope, SlackAvatarScope, ScopeSlackTeamScope]

clientId :: Text
clientId = "..."

clientSecret :: Text
clientSecret = "..."

Advanced Usage

To use any other provider:

import Yesod.Auth
import Yesod.Auth.OAuth2

instance YesodAuth App where
    -- ...

    authPlugins _ = [myPlugin]

myPlugin :: AuthPlugin m
myPlugin = authOAuth2 "mysite"
    (OAuth2
        { oauthClientId            = "..."
        , oauthClientSecret        = "..."
        , oauthOAuthorizeEndpoint  = "https://mysite.com/oauth/authorize"
        , oauthAccessTokenEndpoint = "https://mysite.com/oauth/token"
        , oauthCallback            = Nothing
        })
    makeCredentials

makeCredentials :: Manager -> AccessToken -> IO (Creds m)
makeCredentials manager token = do
    result <- authGetJSON manager token "https://mysite.com/api/me.json"
    return $ -- Parse the JSON into (Creds m)

If you write one of these, please consider opening a Pull Request