{-# LANGUAGE BangPatterns #-} module Network.Wai.Handler.WarpTLS.UID (runTLSSocket, runTLSSocketWithID, tlsSettings, Group, User) where import Network.Wai.Handler.WarpTLS.Params (makeParams) import Network.Wai.Handler.WarpTLS.Getter (getter) import Control.Applicative import qualified Data.ByteString as B import Network.Socket (Socket) import Network.Wai (Application) import Network.Wai.Handler.Warp (Settings, runSettingsConnection) import System.Posix data TLSSettings = TLSSettings FilePath FilePath tlsSettings :: FilePath -> FilePath -> TLSSettings tlsSettings = TLSSettings runTLSSocket :: FilePath -> FilePath -> Settings -> Socket -> Application -> IO () runTLSSocket crt key set sock app = do params <- makeParams <$> B.readFile crt <*> B.readFile key runSettingsConnection set (getter params sock) app type Group = String type User = String runTLSSocketWithID :: TLSSettings -> Settings -> Socket -> (Group, User) -> Application -> IO () runTLSSocketWithID (TLSSettings crt key) set sock (gid, uid) app = do !c <- B.readFile crt !k <- B.readFile key getGroupEntryForName gid >>= setGroupID . groupID getUserEntryForName uid >>= setUserID . userID runSettingsConnection set (getter (makeParams c k) sock) app runTLSSocketCnt :: B.ByteString -> B.ByteString -> Settings -> Socket -> Application -> IO () runTLSSocketCnt crt key set sock app = runSettingsConnection set (getter (makeParams crt key) sock) app