1 {-# LANGUAGE OverloadedStrings, ScopedTypeVariables #-} 2 module Databrary.Static.Fillin 3 ( staticSendInvestigator 4 ) where 5 6 import Control.Concurrent (forkIO) 7 import Control.Exception (handle) 8 import Control.Monad (void) 9 import Data.ByteArray.Encoding (convertToBase, Base(Base16)) 10 import qualified Data.ByteString.Char8 as BSC 11 import qualified Data.Text.Encoding as TE 12 import Data.Time.Format (formatTime, defaultTimeLocale) 13 import qualified Network.HTTP.Client as HC 14 import Network.HTTP.Types.URI (renderSimpleQuery) 15 16 import Databrary.Service.Types 17 import Databrary.Service.Log 18 import Databrary.Context 19 import Databrary.Model.Party 20 import Databrary.Static.Service 21 22 staticSendInvestigator :: Party -> ActionContext -> IO () 23 staticSendInvestigator p ActionContext{ contextTimestamp = t, contextService = rc@Service{ serviceStatic = Static{ staticAuthorizeAddr = a, staticInvestigator = Just req, staticKey = key } } } = void $ forkIO $ do 24 handle 25 (\(e :: HC.HttpException) -> logMsg t ("staticSendInvestigator: " ++ show e) (serviceLogs rc)) 26 $ void $ HC.httpNoBody req 27 { HC.requestBody = HC.RequestBodyBS $ renderSimpleQuery False fields 28 } (serviceHTTPClient rc) 29 where 30 fields = 31 [ ("auth", convertToBase Base16 $ key $ foldMap snd $ tail fields) 32 , ("id", BSC.pack $ show $ partyId $ partyRow p) 33 , ("name", TE.encodeUtf8 $ partyName $ partyRow p) 34 , ("date", BSC.pack $ formatTime defaultTimeLocale "%B %e, %Y" t) 35 , ("mail", a) 36 ] 37 staticSendInvestigator _ _ = return ()