module Yesod.Auth.OAuth2.Twitter
( oauth2Twitter
, module Yesod.Auth.OAuth2
) where
#if __GLASGOW_HASKELL__ < 710
import Control.Applicative ((<$>), (<*>))
#endif
import Control.Monad (mzero)
import Data.Aeson
import Data.Text (Text)
import Data.Text.Encoding (encodeUtf8)
import Yesod.Auth
import Yesod.Auth.OAuth2
data TwitterUser = TwitterUser
{ twitterUserId :: Text
, twitterUserName :: Text
, twitterScreenName :: Text
}
instance FromJSON TwitterUser where
parseJSON (Object o) = TwitterUser
<$> o .: "id_str"
<*> o .: "name"
<*> o .: "screen_name"
parseJSON _ = mzero
oauth2Twitter :: YesodAuth m
=> Text
-> Text
-> AuthPlugin m
oauth2Twitter clientId clientSecret = authOAuth2 "twitter"
OAuth2
{ oauthClientId = encodeUtf8 clientId
, oauthClientSecret = encodeUtf8 clientSecret
, oauthOAuthorizeEndpoint = "https://api.twitter.com/oauth/authorize"
, oauthAccessTokenEndpoint = "https://api.twitter.com/oauth/access_token"
, oauthCallback = Nothing
}
$ fromProfileURL "twitter" "https://api.twitter.com/1.1/account/verify_credentials.json"
$ \user -> Creds
{ credsPlugin = "twitter"
, credsIdent = twitterUserId user
, credsExtra =
[ ("name", twitterUserName user)
, ("screen_name", twitterScreenName user)
]
}