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 ()