This commit is contained in:
Julian Ospald 2018-06-24 16:09:17 +02:00
parent a32661e913
commit 3a7c74a67a
No known key found for this signature in database
GPG Key ID: 511B62C09D50CD28
4 changed files with 80 additions and 3 deletions

22
.gitignore vendored Normal file
View File

@ -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.*

View File

@ -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

8
src/Helpers.hs Normal file
View File

@ -0,0 +1,8 @@
module Helpers where
import Data.String
fS :: IsString a => String -> a
fS = fromString

View File

@ -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 "<h1>Scotty, ", beam, fS " me up!</h1>"]
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")