summaryrefslogtreecommitdiffhomepage
path: root/SessionID.hs
diff options
context:
space:
mode:
authorJoey Hess <joeyh@joeyh.name>2017-04-22 15:14:03 -0400
committerJoey Hess <joeyh@joeyh.name>2017-04-22 15:16:10 -0400
commit3adfdf1ae27cd4b6419ce5be14ffb3712339065a (patch)
tree9ce265ece85d2e3829eba85d964f2a123699f908 /SessionID.hs
parent7987157bfd99b8e2ec78f5030a49c2e16bf08321 (diff)
downloaddebug-me-3adfdf1ae27cd4b6419ce5be14ffb3712339065a.tar.gz
add framing protocol for websockets
Diffstat (limited to 'SessionID.hs')
-rw-r--r--SessionID.hs21
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.
--