module Model.Audit
( module Model.Audit.Types
, MonadAudit
, getRemoteIp
, getAuditIdentity
) where
import Data.Maybe (fromMaybe)
import Database.PostgreSQL.Typed.Inet (PGInet(..), sockAddrPGInet)
import Network.Wai (remoteHost)
import Has
import Service.DB
import HTTP.Request
import Model.Id.Types
import Model.Party.Types
import Model.Audit.Types
type MonadAudit c m = (MonadHasRequest c m, MonadHas (Id Party) c m, MonadDB c m)
getRemoteIp :: MonadHasRequest c m => m PGInet
getRemoteIp = peeks (fromMaybe (PGInet 0 32) . sockAddrPGInet . remoteHost)
getAuditIdentity :: (MonadHasRequest c m, MonadHas (Id Party) c m) => m AuditIdentity
getAuditIdentity = AuditIdentity <$> peek <*> getRemoteIp