-- | Verification of the socket recipient PID
module SocketActivation.CheckRecipient where
import Essentials
import Control.Monad.IO.Class (MonadIO (liftIO))
import Data.Either (Either)
import System.IO (IO)
import qualified Control.Monad as Monad
import qualified System.Posix.Process as Sys
import SocketActivation.Concepts (Error(WrongProcess), Recipient (recipientPID))
import SocketActivation.Env (getEnv')
import SocketActivation.IO (IO' (IO', run), throwError)
checkRecipient :: IO (Either Error ())
checkRecipient = run do
recipient <- IO' $ getEnv' @Recipient
IO' $ checkRecipient' recipient
checkRecipient' :: Recipient -> IO (Either Error ())
checkRecipient' recipient = run do
myPid <- liftIO Sys.getProcessID
Monad.unless (recipientPID recipient == myPid) $ throwError WrongProcess