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 +47/−15
- servant-auth-cookie.cabal +5/−4
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