git.iko.soy/typeable/servant-reflex
on master help sign in
Escape all path pieces and query parameters
commit1cf61d3fa377d346e3e028f0d04e513da6c072ef authorGreg Hale <imalsogreg@gmail.com> dateMon 25 Sep 2017, 22:16 (9 years ago) parent838a97f
3 files changed+24−3
changelog.md+15 servant-reflex.cabal+1−1 src/Servant/Common/Req.hs+8−2
changelog.md+15
@@ -1,3 +1,18 @@
1+0.3.3
2+-----
3+
4+Explicitly escape reserved characters from path pieces and query parameters
5+
6+
7+0.3.2
8+-----
9+
10+- **Addition of 'Servant.Reflex.Common.Req.ClientOpts'** which
11+allows the users to apply a final adjustment to Requests before
12+thery are sent, such as setting the 'withCredentials' flag
13+or print the Request to the console for debugging
14+[PR #47](https://github.com/imalsogreg/servant-reflex/pull/47)
15+
1160.3
217---
318
servant-reflex.cabal+1−1
@@ -1,5 +1,5 @@
11Name: servant-reflex
2−Version: 0.3.2
2+Version: 0.3.3
33Synopsis: Servant reflex API generator
44Description: Servant reflex API generator
55License: BSD3
src/Servant/Common/Req.hs+8−2
@@ -28,6 +28,7 @@ import qualified Data.Text as T
2828import qualified Data.Text.Encoding as TE
2929import Data.Traversable (forM)
3030import Language.Javascript.JSaddle.Monad (JSM, MonadJSM)
31+import qualified Network.URI as N
3132import Reflex.Dom hiding (tag)
3233import Servant.Common.BaseUrl (BaseUrl, showBaseUrl,
3334 SupportsServantReflex)
@@ -170,7 +171,7 @@ reqToReflexRequest reqMeth reqHost req =
170171
171172 urlPath :: Dynamic t (Either Text Text)
172173 urlPath = (fmap.fmap)
173− (T.intercalate "/" . fmap (builderToText . toEncodedUrlPiece))
174+ (T.intercalate "/" . fmap escape)
174175 urlParts
175176
176177 queryPartString :: (Text, QueryPart t) -> Dynamic t (Maybe (Either Text Text))
@@ -182,7 +183,9 @@ reqToReflexRequest reqMeth reqHost req =
182183 QueryPartParams ps -> ffor ps $ \pStrings ->
183184 if null pStrings
184185 then Nothing
185− else Just $ Right (T.intercalate "&" (fmap (\p -> pName <> "=" <> p) pStrings))
186+ else Just . Right
187+ . T.intercalate "&"
188+ $ fmap (\p -> pName <> "=" <> escape p) pStrings
186189 QueryPartFlag fl -> ffor fl $ \case
187190 True -> Just $ Right pName
188191 False -> Nothing
@@ -400,3 +403,6 @@ fmapL f (Left e) = Left (f e)
400403
401404builderToText :: Builder.Builder -> T.Text
402405builderToText = TE.decodeUtf8 . BL.toStrict . Builder.toLazyByteString
406+
407+escape :: T.Text -> T.Text
408+escape = T.pack . N.escapeURIString (not . N.isReserved) . T.unpack . TE.decodeUtf8 . BL.toStrict . Builder.toLazyByteString . toEncodedUrlPiece