mirror of
https://github.com/freckle/yesod-auth-oauth2.git
synced 2026-01-11 19:58:28 +01:00
Add twitch.tv plugin
This commit is contained in:
parent
01ae7319f5
commit
77a66fa6e8
@ -41,6 +41,9 @@ SLACK_CLIENT_SECRET=x
|
||||
SPOTIFY_CLIENT_ID=x
|
||||
SPOTIFY_CLIENT_SECRET=x
|
||||
|
||||
TWITCH_CLIENT_ID=x
|
||||
TWITCH_CLIENT_SECRET=x
|
||||
|
||||
UPCASE_CLIENT_ID=x
|
||||
UPCASE_CLIENT_SECRET=x
|
||||
|
||||
|
||||
@ -47,6 +47,7 @@ import Yesod.Auth.OAuth2.Nylas
|
||||
import Yesod.Auth.OAuth2.Salesforce
|
||||
import Yesod.Auth.OAuth2.Slack
|
||||
import Yesod.Auth.OAuth2.Spotify
|
||||
import Yesod.Auth.OAuth2.Twitch
|
||||
import Yesod.Auth.OAuth2.Upcase
|
||||
import Yesod.Auth.OAuth2.WordPressDotCom
|
||||
|
||||
@ -147,6 +148,7 @@ mkFoundation = do
|
||||
, loadPlugin oauth2Salesforce "SALES_FORCE"
|
||||
, loadPlugin oauth2Slack "SLACK"
|
||||
, loadPlugin (oauth2Spotify []) "SPOTIFY"
|
||||
, loadPlugin oauth2Twitch "TWITCH"
|
||||
, loadPlugin oauth2WordPressDotCom "WORDPRESS_DOT_COM"
|
||||
, loadPlugin oauth2Upcase "UPCASE"
|
||||
]
|
||||
|
||||
56
src/Yesod/Auth/OAuth2/Twitch.hs
Normal file
56
src/Yesod/Auth/OAuth2/Twitch.hs
Normal file
@ -0,0 +1,56 @@
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
-- |
|
||||
--
|
||||
-- OAuth2 plugin for http://twitch.tv
|
||||
--
|
||||
-- * Authenticates against twitch
|
||||
-- * Uses twitch user id as credentials identifier
|
||||
--
|
||||
module Yesod.Auth.OAuth2.Twitch
|
||||
( oauth2Twitch
|
||||
, oauth2TwitchScoped
|
||||
) where
|
||||
|
||||
import Yesod.Auth.OAuth2.Prelude
|
||||
|
||||
import qualified Data.Text.Encoding as T
|
||||
|
||||
newtype User = User Text
|
||||
|
||||
instance FromJSON User where
|
||||
parseJSON = withObject "User" $ \o -> User <$> o .: "user_id"
|
||||
|
||||
pluginName :: Text
|
||||
pluginName = "twitch"
|
||||
|
||||
defaultScopes :: [Text]
|
||||
defaultScopes = ["user:read:email"]
|
||||
|
||||
oauth2Twitch :: YesodAuth m => Text -> Text -> AuthPlugin m
|
||||
oauth2Twitch = oauth2TwitchScoped defaultScopes
|
||||
|
||||
oauth2TwitchScoped :: YesodAuth m => [Text] -> Text -> Text -> AuthPlugin m
|
||||
oauth2TwitchScoped scopes clientId clientSecret =
|
||||
authOAuth2 pluginName oauth2 $ \manager token -> do
|
||||
(User userId, userResponse) <- authGetProfile
|
||||
pluginName
|
||||
manager
|
||||
token
|
||||
"https://id.twitch.tv/oauth2/validate"
|
||||
|
||||
pure Creds { credsPlugin = pluginName
|
||||
, credsIdent = userId
|
||||
, credsExtra = setExtra token userResponse
|
||||
}
|
||||
where
|
||||
oauth2 = OAuth2
|
||||
{ oauth2ClientId = clientId
|
||||
, oauth2ClientSecret = Just clientSecret
|
||||
, oauth2AuthorizeEndpoint = "https://id.twitch.tv/oauth2/authorize"
|
||||
`withQuery` [scopeParam " " scopes]
|
||||
, oauth2TokenEndpoint = "https://id.twitch.tv/oauth2/token"
|
||||
`withQuery` [ ("client_id", T.encodeUtf8 clientId)
|
||||
, ("client_secret", T.encodeUtf8 clientSecret)
|
||||
]
|
||||
, oauth2RedirectUri = Nothing
|
||||
}
|
||||
@ -4,7 +4,7 @@ cabal-version: 1.12
|
||||
--
|
||||
-- see: https://github.com/sol/hpack
|
||||
--
|
||||
-- hash: d3ba666a53fb63a2f059501ac04eca709a905d0dd1f806ea5a7cd64e06ef890d
|
||||
-- hash: 233909874fdbdbd71fa70c49f5a4223b4150b85d9415dbbed7fde2fff9e5ebcf
|
||||
|
||||
name: yesod-auth-oauth2
|
||||
version: 0.7.0.1
|
||||
@ -57,6 +57,7 @@ library
|
||||
Yesod.Auth.OAuth2.Salesforce
|
||||
Yesod.Auth.OAuth2.Slack
|
||||
Yesod.Auth.OAuth2.Spotify
|
||||
Yesod.Auth.OAuth2.Twitch
|
||||
Yesod.Auth.OAuth2.Upcase
|
||||
Yesod.Auth.OAuth2.WordPressDotCom
|
||||
other-modules:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user