mirror of
https://github.com/freckle/yesod-auth-oauth2.git
synced 2026-04-26 12:47:44 +02:00
Add twitch.tv plugin
This commit is contained in:
parent
01ae7319f5
commit
80a410375a
@ -41,6 +41,9 @@ SLACK_CLIENT_SECRET=x
|
|||||||
SPOTIFY_CLIENT_ID=x
|
SPOTIFY_CLIENT_ID=x
|
||||||
SPOTIFY_CLIENT_SECRET=x
|
SPOTIFY_CLIENT_SECRET=x
|
||||||
|
|
||||||
|
TWITCH_CLIENT_ID=x
|
||||||
|
TWITCH_CLIENT_SECRET=x
|
||||||
|
|
||||||
UPCASE_CLIENT_ID=x
|
UPCASE_CLIENT_ID=x
|
||||||
UPCASE_CLIENT_SECRET=x
|
UPCASE_CLIENT_SECRET=x
|
||||||
|
|
||||||
|
|||||||
@ -47,6 +47,7 @@ import Yesod.Auth.OAuth2.Nylas
|
|||||||
import Yesod.Auth.OAuth2.Salesforce
|
import Yesod.Auth.OAuth2.Salesforce
|
||||||
import Yesod.Auth.OAuth2.Slack
|
import Yesod.Auth.OAuth2.Slack
|
||||||
import Yesod.Auth.OAuth2.Spotify
|
import Yesod.Auth.OAuth2.Spotify
|
||||||
|
import Yesod.Auth.OAuth2.Twitch
|
||||||
import Yesod.Auth.OAuth2.Upcase
|
import Yesod.Auth.OAuth2.Upcase
|
||||||
import Yesod.Auth.OAuth2.WordPressDotCom
|
import Yesod.Auth.OAuth2.WordPressDotCom
|
||||||
|
|
||||||
@ -147,6 +148,7 @@ mkFoundation = do
|
|||||||
, loadPlugin oauth2Salesforce "SALES_FORCE"
|
, loadPlugin oauth2Salesforce "SALES_FORCE"
|
||||||
, loadPlugin oauth2Slack "SLACK"
|
, loadPlugin oauth2Slack "SLACK"
|
||||||
, loadPlugin (oauth2Spotify []) "SPOTIFY"
|
, loadPlugin (oauth2Spotify []) "SPOTIFY"
|
||||||
|
, loadPlugin oauth2Twitch "TWITCH"
|
||||||
, loadPlugin oauth2WordPressDotCom "WORDPRESS_DOT_COM"
|
, loadPlugin oauth2WordPressDotCom "WORDPRESS_DOT_COM"
|
||||||
, loadPlugin oauth2Upcase "UPCASE"
|
, 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
|
-- see: https://github.com/sol/hpack
|
||||||
--
|
--
|
||||||
-- hash: d3ba666a53fb63a2f059501ac04eca709a905d0dd1f806ea5a7cd64e06ef890d
|
-- hash: 233909874fdbdbd71fa70c49f5a4223b4150b85d9415dbbed7fde2fff9e5ebcf
|
||||||
|
|
||||||
name: yesod-auth-oauth2
|
name: yesod-auth-oauth2
|
||||||
version: 0.7.0.1
|
version: 0.7.0.1
|
||||||
@ -57,6 +57,7 @@ library
|
|||||||
Yesod.Auth.OAuth2.Salesforce
|
Yesod.Auth.OAuth2.Salesforce
|
||||||
Yesod.Auth.OAuth2.Slack
|
Yesod.Auth.OAuth2.Slack
|
||||||
Yesod.Auth.OAuth2.Spotify
|
Yesod.Auth.OAuth2.Spotify
|
||||||
|
Yesod.Auth.OAuth2.Twitch
|
||||||
Yesod.Auth.OAuth2.Upcase
|
Yesod.Auth.OAuth2.Upcase
|
||||||
Yesod.Auth.OAuth2.WordPressDotCom
|
Yesod.Auth.OAuth2.WordPressDotCom
|
||||||
other-modules:
|
other-modules:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user