packages feed

snaplet-oauth-0.0.5: src/Snap/Snaplet/OAuth/Weibo.hs

{-# LANGUAGE CPP               #-}
{-# LANGUAGE OverloadedStrings #-}

module Snap.Snaplet.OAuth.Weibo
       ( routes
       , loginWithWeiboH
       , weiboCallbackH
       , userIdH
       , accountShowH
       , module Snap.Snaplet.OAuth.Weibo.Api
       ) where

------------------------------------------------------------------------------
import           Control.Category
import           Control.Monad
import           Data.ByteString                      (ByteString)
import           Data.Maybe
import           Network.OAuth2.OAuth2
import           Prelude                              hiding ((.))
import           Snap

import           Snap.Snaplet.OAuth.Internal.Handlers
import           Snap.Snaplet.OAuth.Internal.Types
import           Snap.Snaplet.OAuth.Weibo.Api

------------------------------------------------------------------------------
--              Weibo
------------------------------------------------------------------------------

loginWithWeiboH :: HasOAuth b => Handler b v ()
loginWithWeiboH = loginWithOauthH Weibo Nothing


-- | token access callback.
--   return a @OAuth2@ having access token has been filled.
--
weiboCallbackH :: HasOAuth b => Handler b v OAuth2
weiboCallbackH = oauthCallbackH Weibo

-- | userID is must for access other datas.
--
userIdH :: HasOAuth b => OAuth2 -> Handler b v (Maybe WeiboUserId)
userIdH = liftIO . requestUid

-- | Show Account detail info.
--
accountShowH :: HasOAuth b
                => (Maybe WeiboUser -> Handler b v ())
                -> OAuth2
                -> Handler b v ()
accountShowH fn oauth =
    userIdH oauth >>= maybe failure success
    where success uid = liftIO (requestAccount oauth uid) >>= fn
          failure = writeBS "Failed at getting UID."


------------------------------------------------------------------------------

-- | The application's routes.
routes :: HasOAuth b => [(ByteString, Handler b v ())]
routes  = [ ("/weibo" , loginWithWeiboH)
          ]


----------------------------------------------------------------------------