packages feed

servant-auth-cookie 0.1.0.0 → 0.1.0.1

raw patch · 2 files changed

+52/−19 lines, 2 filesdep +mtldep ~basedep ~time

Dependencies added: mtl

Dependency ranges changed: base, time

Files

example/Main.hs view
@@ -93,25 +93,30 @@  type ExampleAPI =        Get '[HTML] ByteString-  :<|> ReqBody '[FormUrlEncoded] LoginForm+  :<|> "login" :> Get '[HTML] ByteString+  :<|> "login" :> ReqBody '[FormUrlEncoded] LoginForm        :> Post '[HTML] (Headers '[Header "set-cookie" ByteString] ByteString)   :<|> "private" :> AuthProtect "cookie-auth" :> Get '[HTML] ByteString   server :: Server ExampleAPI-server = servePublicPage :<|> serveLogin :<|> servePrivatePage where--  servePrivatePage (Account uid u p) = return $ render (privatePage uid u p)+server = serveHome+    :<|> serveLogin+    :<|> serveLoginPost+    :<|> servePrivate where -  servePublicPage = return $ render (publicPage "")+  serveHome = return $ render homePage+  serveLogin = return $ render $ loginPage True -  serveLogin form = case userLookup (username form) (password form) usersDB of-    Nothing   -> return $ addHeader "" (render $ publicPage "Incorrect username/password")+  serveLoginPost form = case userLookup (username form) (password form) usersDB of+    Nothing   -> return $ addHeader "" (render $ loginPage False)     Just uid' -> addSession                     authSettings                    (Account uid' (username form) (password form))-                   (render $ publicPage "You are logged in")+                   (render $ redirectPage "/private") +  servePrivate (Account uid u p) = return $ render (privatePage uid u p)+   render = toStrict . renderHtml  @@ -133,29 +138,56 @@  pageMenu :: H.Html pageMenu = do-  H.a ! A.href "/"        $ "public"+  H.a ! A.href "/"        $ "home"   _ <- " "+  H.a ! A.href "/login"   $ "login"+  _ <- " "   H.a ! A.href "/private" $ "private"   H.hr -publicPage :: String -> H.Html-publicPage message = H.docTypeHtml $ do++homePage :: H.Html+homePage = H.docTypeHtml $ do   H.head $ do-    H.title "public page"+    H.title "home"   H.body $ do     pageMenu-    H.form ! A.method "post" ! A.action "/" $ do+    H.p "This is an example of using servant-auth-cookie library."+    H.p "Use login page to get access to the private page."+++loginPage :: Bool -> H.Html+loginPage firstTime = H.docTypeHtml $ do+  H.head $ do+    H.title "login"+  H.body $ do+    pageMenu+    H.form ! A.method "post" ! A.action "/login" $ do       H.input ! A.type_ "text"     ! A.name "username" >> H.br       H.input ! A.type_ "password" ! A.name "password" >> H.br       H.input ! A.type_ "submit"-    when (length message > 0) $ H.p (H.toHtml message)+    when (not firstTime) $ H.p "Incorrect username/password" + privatePage :: Int -> String -> String -> H.Html privatePage uid username' password' = H.docTypeHtml $ do   H.head $ do-    H.title "private page"+    H.title "private"   H.body $ do     pageMenu     H.p $ H.b "ID: "       >> H.toHtml (show uid)     H.p $ H.b "username: " >> H.toHtml username'     H.p $ H.b "password: " >> H.toHtml password'+++redirectPage :: String -> H.Html+redirectPage uri = H.docTypeHtml $ do+  H.head $ do+    H.title "redirecting..."+    H.meta ! A.httpEquiv "refresh" ! A.content (H.toValue $ "1; url=" ++ uri)+  H.body $ do+    H.p "You are being redirected."+    H.p $ do+      "If your browser does not refresh the page click "+      H.a ! A.href (H.toValue uri) $ "here"+
servant-auth-cookie.cabal view
@@ -1,5 +1,5 @@ name:                servant-auth-cookie-version:             0.1.0.0+version:             0.1.0.1 synopsis:            Authentication via encrypted cookies description:         Authentication via encrypted client-side cookies,                      inspired by client-session library by Michael Snoyman and based on@@ -21,7 +21,7 @@ library   exposed-modules:          Servant.Server.Experimental.Auth.Cookie-  build-depends: base >=4.8 && <4.9+  build-depends: base == 4.9.*                , base64-bytestring                , bytestring                , cereal@@ -31,7 +31,7 @@                , memory                , servant                , servant-server-               , time >=1.5 && <1.6+               , time                , transformers                , wai   hs-source-dirs:      src@@ -41,11 +41,12 @@ executable example   main-is:             Main.hs   other-extensions:    DataKinds, TypeFamilies, DeriveGeneric, TypeOperators-  build-depends: base >=4.8 && <4.9+  build-depends: base == 4.9.*                , blaze-html                , blaze-markup                , bytestring                , cereal+               , mtl                , http-media                , servant                , servant-auth-cookie