{-# LANGUAGE TypeFamilies, QuasiQuotes, MultiParamTypeClasses, TemplateHaskell, OverloadedStrings, StandaloneDeriving #-} import System.Environment (getEnv) import System.Exit (exitFailure) import System.IO.Error (isDoesNotExistError) import Yesod import Yesod.Auth import Yesod.Auth.Facebook.ClientSide import Yesod.Form.I18n.English import qualified Control.Exception.Lifted as E import qualified Data.ByteString.Char8 as B import qualified Data.Text as T import qualified Facebook as FB import qualified Network.HTTP.Conduit as H data Test = Test { httpManager :: H.Manager , fbCreds :: FB.Credentials } mkYesod "Test" [parseRoutes| / HomeR GET /auth AuthR Auth getAuth /fbchannelfile FbChannelFileR GET |] instance Yesod Test where approot = ApprootStatic "http://dev.whonodes.org:3000" instance RenderMessage Test FormMessage where renderMessage _ _ = englishFormMessage instance YesodAuth Test where type AuthId Test = T.Text loginDest _ = HomeR logoutDest _ = HomeR getAuthId creds@(Creds _ id_ _) = do setSession "creds" (T.pack $ show creds) return (Just id_) authPlugins _ = [authFacebookClientSide] redirectToReferer _ = True authHttpManager = httpManager deriving instance Show (Creds m) instance YesodAuthFbClientSide Test where fbCredentials = fbCreds getFbChannelFile = return FbChannelFileR getHomeR :: Handler RepHtml getHomeR = do muid <- maybeAuthId mcreds <- lookupSession "creds" mtoken <- getUserAccessToken let perms = [] pc <- widgetToPageContent $ [whamlet| ^{facebookJSSDK AuthR}

Current uid: #{show muid}
Current credentials: #{show mcreds}
Current access token: #{show mtoken}