diff options
author | Joey Hess <joeyh@joeyh.name> | 2017-04-22 15:14:03 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2017-04-22 15:16:10 -0400 |
commit | 3adfdf1ae27cd4b6419ce5be14ffb3712339065a (patch) | |
tree | 9ce265ece85d2e3829eba85d964f2a123699f908 /SessionID.hs | |
parent | 7987157bfd99b8e2ec78f5030a49c2e16bf08321 (diff) | |
download | debug-me-3adfdf1ae27cd4b6419ce5be14ffb3712339065a.tar.gz |
add framing protocol for websockets
Diffstat (limited to 'SessionID.hs')
-rw-r--r-- | SessionID.hs | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/SessionID.hs b/SessionID.hs index 8bf8f7d..449f58c 100644 --- a/SessionID.hs +++ b/SessionID.hs @@ -14,9 +14,6 @@ import System.FilePath import System.IO import System.Directory import Network.Wai.Handler.Warp (Port) -import Network.WebSockets hiding (Message) -import qualified Data.Aeson -import Data.Maybe import Data.List import Data.UUID import Data.UUID.V4 @@ -28,17 +25,15 @@ import Control.Exception newtype SessionID = SessionID FilePath deriving (Show, Eq, Ord, Generic) +-- | Custom JSON deserialization so we can check smart constructor +-- to verify it's legal. +instance FromJSON SessionID where + parseJSON v = verify =<< genericParseJSON defaultOptions v + where + verify (SessionID unverified) = + maybe (fail "illegal SessionID") return + (mkSessionID unverified) instance ToJSON SessionID -instance FromJSON SessionID - -instance WebSocketsData SessionID where - -- fromDataMessage = fromLazyByteString . fromDataMessage - fromLazyByteString b = - -- Down't trust a legal SessionID to be deserialized; - -- use smart constructor to verify it's legal. - let SessionID unverified = fromMaybe (error "bad SessionID serialization") (Data.Aeson.decode b) - in fromMaybe (error "illegal SessionID") (mkSessionID unverified) - toLazyByteString = Data.Aeson.encode -- | Smart constructor that enforces legal SessionID contents. -- |