diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..82f3a88 --- /dev/null +++ b/.gitignore @@ -0,0 +1,22 @@ +dist +dist-* +cabal-dev +*.o +*.hi +*.chi +*.chs.h +*.dyn_o +*.dyn_hi +.hpc +.hsenv +.cabal-sandbox/ +cabal.sandbox.config +*.prof +*.aux +*.hp +*.eventlog +.stack-work/ +cabal.project.local +cabal.project.local~ +.HTF/ +.ghc.environment.* diff --git a/scotty-example.cabal b/scotty-example.cabal index 7399b9b..9f25156 100644 --- a/scotty-example.cabal +++ b/scotty-example.cabal @@ -17,9 +17,15 @@ cabal-version: >=1.10 executable scotty-example main-is: Main.hs - -- other-modules: + other-modules: Helpers -- other-extensions: build-depends: base >=4.9 && <4.10, - scotty + bytestring, + scotty, + http-types, + text, + wai, + wai-extra, + utf8-string hs-source-dirs: src default-language: Haskell2010 diff --git a/src/Helpers.hs b/src/Helpers.hs new file mode 100644 index 0000000..1f7ffe3 --- /dev/null +++ b/src/Helpers.hs @@ -0,0 +1,8 @@ +module Helpers where + +import Data.String + + +fS :: IsString a => String -> a +fS = fromString + diff --git a/src/Main.hs b/src/Main.hs index 65ae4a0..4e533e5 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -1,4 +1,45 @@ module Main where +import Web.Scotty + +import Data.Monoid (mconcat) +import Helpers +import Network.HTTP.Types.Status +import qualified Data.Text.Lazy as T +import Network.Wai +import Network.Wai.Middleware.RequestLogger +import Network.Wai.Middleware.HttpAuth +import qualified Data.ByteString as BS +import qualified Data.ByteString.UTF8 as U8 + + main :: IO () -main = putStrLn "Hello, Haskell!" +main = scotty 3000 $ do + middleware auth + middleware logging + get (fS "/foo") foo + get (fS "/:word") word_pattern + + +word_pattern :: ActionM () +word_pattern = do + beam <- param (fS "word") + html $ mconcat [fS "

Scotty, ", beam, fS " me up!

"] + + +foo :: ActionM () +foo = do + status ok200 + text $ T.pack "Blah" + return () + + +logging :: Middleware +logging = logStdout + + +auth :: Middleware +auth = basicAuth (\u p -> return $ + u == U8.fromString "michael" && + p == U8.fromString "mypass") + (fS "My Realm")