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