diff options
Diffstat (limited to 'fig-frontend/src/Fig/Frontend/Utils.hs')
| -rw-r--r-- | fig-frontend/src/Fig/Frontend/Utils.hs | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/fig-frontend/src/Fig/Frontend/Utils.hs b/fig-frontend/src/Fig/Frontend/Utils.hs index 3081ddb..090c6ba 100644 --- a/fig-frontend/src/Fig/Frontend/Utils.hs +++ b/fig-frontend/src/Fig/Frontend/Utils.hs @@ -5,12 +5,17 @@ module Fig.Frontend.Utils ( FigFrontendException(..) , loadConfig , Config(..) + , websocket , module Network.HTTP.Types.Status ) where import Fig.Prelude import Network.HTTP.Types.Status +import qualified Network.Wai.Handler.WebSockets as Wai.WS +import qualified Network.WebSockets as WS + +import qualified Web.Scotty as Sc import qualified Toml @@ -39,3 +44,10 @@ loadConfig :: FilePath -> IO Config loadConfig path = Toml.decodeFileEither configCodec path >>= \case Left err -> throwM . FigFrontendException $ tshow err Right config -> pure config + +websocket :: ByteString -> (WS.Connection -> IO ()) -> Sc.ScottyM () +websocket pat h = Sc.middleware $ Wai.WS.websocketsOr WS.defaultConnectionOptions handler + where + handler pending = if WS.requestPath (WS.pendingRequest pending) == pat + then WS.acceptRequest pending >>= h + else WS.rejectRequest pending "" |
