module Snap.Snaplet.CustomAuth.OAuth2.Splices (addOAuth2Splices) where
import Control.Lens
import Control.Monad.Trans
import Control.Monad.State
import Data.Map.Syntax
import Data.Maybe
import Data.Monoid
import Heist
import Heist.Compiled
import Snap
import Snap.Snaplet.Heist
import Snap.Snaplet.Session
import Snap.Snaplet.CustomAuth.AuthManager
import Snap.Snaplet.CustomAuth.Util
addOAuth2Splices
:: Snaplet (Heist b)
-> SnapletLens b (AuthManager u e b)
-> Initializer b v ()
addOAuth2Splices h auth = addConfig h sc
where
sc = mempty & scCompiledSplices .~ cs
cs = do
"ifHaveOAuth2Token" ## spliceOAuth2Token True auth
"ifNoOAuth2Token" ## spliceOAuth2Token False auth
spliceOAuth2Token
:: Bool
-> SnapletLens b (AuthManager u e b)
-> SnapletCSplice b
spliceOAuth2Token t auth = do
cs <- runChildren
return $ yieldRuntime $ do
name <- lift $ (<> "_token") <$> withTop auth getStateName
store <- lift $ withTop auth $ gets stateStore'
chk <- lift $ withTop' store $ (fmap isJust $ getFromSession name)
if chk == t then codeGen cs else mempty