module GitHub.WebHook.Handler.Snap
( module GitHub.WebHook.Handler
, webhookHandler
) where
import Control.Applicative
import Data.ByteString
import qualified Data.ByteString.Lazy as LBS
import qualified Data.CaseInsensitive as CI
import Data.UUID
import Snap.Core
import GitHub.Types
import GitHub.WebHook.Handler
import Prelude
webhookHandler :: ByteString -> [String] -> Snap (Either Error (UUID, Payload))
webhookHandler hookPath secretKeys =
path hookPath $ method POST $ runHandler handler
where
handler = Handler
{ hSecretKeys = secretKeys
, hBody = fmap LBS.toStrict $ readRequestBody (100 * 1000)
, hHeader = \name -> do
hdrs <- headers <$> getRequest
return $ getHeader (CI.mk name) hdrs
}