diff options
author | Joey Hess <joeyh@joeyh.name> | 2017-04-21 17:42:10 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2017-04-21 17:52:18 -0400 |
commit | 5572dbc8289de934e9ee5bc3f74a0f98365ce3e5 (patch) | |
tree | 9c1bba1a5d40748f72e13be788c29ed24dc3dd28 /SessionID.hs | |
parent | 360d8ac4601dc5b48c22eeb93eb1853cee99e6c9 (diff) | |
download | debug-me-5572dbc8289de934e9ee5bc3f74a0f98365ce3e5.tar.gz |
initial http server
Incomplete, but the client is able to connect and send messages which
get logged.
Split up debug-me.hs into Role/*
Switched from cereal to binary, since websockets operate on lazy
ByteStrings, and using cereal would involve a copy on every receive.
This commit was sponsored by Boyd Stephen Smith Jr. on Patreon.
Diffstat (limited to 'SessionID.hs')
-rw-r--r-- | SessionID.hs | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/SessionID.hs b/SessionID.hs new file mode 100644 index 0000000..a47de8f --- /dev/null +++ b/SessionID.hs @@ -0,0 +1,28 @@ +module SessionID (SessionID, mkSessionID, sessionLogFile, withSessionID) where + +import System.FilePath +import Data.Text +import System.IO + +-- | A SessionID is the base name of the log file to use, +-- and may not contain any path information. +newtype SessionID = SessionID FilePath + deriving (Show, Eq, Ord) + +-- | Smart constructor that enforces security requirements. +mkSessionID :: Text -> Maybe SessionID +mkSessionID t = + let f = unpack t + in if takeFileName f == f + then Just (SessionID f) + else Nothing + +sessionLogFile :: FilePath -> SessionID -> FilePath +sessionLogFile dir (SessionID f) = dir </> "debug-me." ++ f ++ ".log" + +-- | Allocate a new SessionID and return an open Handle to its log file. +withSessionID :: FilePath -> ((Handle, SessionID) -> IO a) -> IO a +withSessionID dir a = do + -- TODO find an unused log file and open it + let sid = SessionID "1" + withFile "debug-me-server.log" WriteMode $ \h -> a (h, sid) |