packages feed

scotty-path-normalizer-0.1.0.0: README.md

# Scotty path normalizer

This library provides a [Scotty] action that normalizes the HTTP request target
as if it were a Unix file path. When the path normalization action detects a
path that can be simplified in one of the following ways, it issues a [redirect]
to a more canonical path.

1. Remove trailing slashes: `https://typeclasses.com/contravariance/`
   becomes `https://typeclasses.com/contravariance`
2. Remove double slashes: `https://typeclasses.com//web-servers////lesson-4`
   becomes `https://typeclasses.com/web-servers/lesson-4`
3. Remove `.` segments, because `.` represents "the current directory":
   `https://typeclasses.com/ghc/./scoped-type-variables` becomes
   `https://typeclasses.com/ghc/scoped-type-variables`
4. Remove segments of the form `xyz/..`, because `..` represents "the parent
   directory": `https://typeclasses.com/python/../javascript/monoidal-folds`
   becomes `https://typeclasses.com/javascript/monoidal-folds`

The typical way to apply this to your Scotty server is to put
`addPathNormalizer` at the top of your `ScottyM` app definition.

```haskell
import qualified Web.Scotty as Scotty
import Web.Scotty.PathNormalizer (addPathNormalizer)

main :: IO ()
main =
    Scotty.scotty 3000 $
      do
        addPathNormalizer

        Scotty.get (Scotty.capture "/:word") $
          do
            beam <- Scotty.param (Data.Text.Lazy.pack "word")
            Scotty.html $ fold
                [ Data.Text.Lazy.pack "<h1>Scotty, "
                , beam
                , Data.Text.Lazy.pack " me up!</h1>"
                ]
```

  [Scotty]: https://hackage.haskell.org/package/scotty

  [redirect]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/302