packages feed

snaplet-tasks-0.1: src/Snap/Snaplet/Tasks/Utils.hs

module Snap.Snaplet.Tasks.Utils(task) where

import           Snap.Core
import           Snap.Snaplet
import           Snap.Snaplet.Tasks.Internal

import qualified Data.ByteString.Char8 as B
import qualified Data.List.Utils as U
import           Data.List (intercalate)

-- | Helper function for creating tasks in Snaplets routes
--   that are available through Tasks Snaplet interface
task :: String -> (Handler b v ()) -> (B.ByteString, Handler b v ())
task name handler = (B.pack $ hashString canonizedName, taskify handler)
  where
    canonizedName = intercalate "/" $ U.split ":" name

taskify :: Handler b v () -> Handler b v ()
taskify handler = do
   --now here we *must* check if our apps IP
   --is the same as request's IP and if it is
   --continue or else pass
  setTimeout $ 60*60*24*31 -- approx 31 days
  localIp   <- return . rqLocalAddr  =<< getRequest
  requestIp <- return . rqRemoteAddr =<< getRequest
  case localIp == requestIp of
    True  -> handler
    False -> pass