packages feed

users-postgresql-simple 0.3.0.0 → 0.4.0.0

raw patch · 2 files changed

+25/−14 lines, 2 filesdep ~usersPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: users

API changes (from Hackage documentation)

- Web.Users.Postgresql: instance UserStorageBackend Connection
+ Web.Users.Postgresql: instance Web.Users.Types.UserStorageBackend Database.PostgreSQL.Simple.Internal.Connection

Files

src/Web/Users/Postgresql.hs view
@@ -1,3 +1,4 @@+{-# OPTIONS_GHC -fno-warn-orphans #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE TypeFamilies #-}@@ -7,7 +8,6 @@  import Web.Users.Types -import Control.Applicative ((<$>)) import Control.Monad #if MIN_VERSION_mtl(2,2,0) import Control.Monad.Except@@ -141,32 +141,38 @@     createUser conn user =         case u_password user of           PasswordHash p ->-              do [(Only counter)] <--                     query conn [sql|SELECT COUNT(lid) FROM login WHERE username = ? OR email = ?;|] (u_name user, u_email user)-                 if (counter :: Int64) /= 0-                 then return $ Left UsernameOrEmailAlreadyTaken-                 else do [(Only userId)] <--                             query conn [sql|INSERT INTO login (username, password, email, is_active, more) VALUES (?, ?, ?, ?, ?) RETURNING lid|]-                                   (u_name user, p, u_email user, u_active user, toJSON $ u_more user)-                         return $ Right userId+              do ([(Only emailCounter)], [(Only nameCounter)]) <- (,) <$>+                     query conn [sql|SELECT COUNT(lid) FROM login WHERE email = ? LIMIT 1;|] (Only $ u_email user)+                     <*> query conn [sql|SELECT COUNT(lid) FROM login WHERE username = ? LIMIT 1;|] (Only $ u_name user)+                 let both f (x, y) = (f x, f y)+                     bothCount = both (== 1) (emailCounter :: Int64, nameCounter :: Int64)+                 case bothCount of+                      (True, True)   -> return $ Left UsernameAndEmailAlreadyTaken+                      (True, False)  -> return $ Left EmailAlreadyTaken+                      (False, True)  -> return $ Left UsernameAlreadyTaken+                      (False, False) ->+                        do [(Only userId)] <-+                               query conn [sql|INSERT INTO login (username, password, email, is_active, more) VALUES (?, ?, ?, ?, ?) RETURNING lid|]+                                     (u_name user, p, u_email user, u_active user, toJSON $ u_more user)+                           return $ Right userId           _ ->               return $ Left InvalidPassword     updateUser conn userId updateFun =         do mUser <- getUserById conn userId            case mUser of              Nothing ->-                 return $ Left UserDoesntExit+                 return $ Left UserDoesntExist              Just origUser ->                  runErrorT $                  do let newUser = updateFun origUser                     when (u_name newUser /= u_name origUser) $                          do [(Only counter)] <-                                 liftIO $ query conn [sql|SELECT COUNT(lid) FROM login WHERE username = ?;|] (Only $ u_name newUser)-                            when ((counter :: Int64) /= 0) $ throwError UsernameOrEmailAlreadyExists+                            when ((counter :: Int64) /= 0) $ throwError UsernameAlreadyExists                     when (u_email newUser /= u_email origUser) $                          do [(Only counter)] <-                                 liftIO $ query conn [sql|SELECT COUNT(lid) FROM login WHERE email = ?;|] (Only $ u_email newUser)-                            when ((counter :: Int64) /= 0) $ throwError UsernameOrEmailAlreadyExists+                            when ((counter :: Int64) /= 0) $ throwError EmailAlreadyExists                     liftIO $                        do _ <-                               execute conn [sql|UPDATE login SET username = ?, email = ?, is_active = ?, more = ? WHERE lid = ?;|]@@ -184,6 +190,11 @@     authUser conn username password sessionTtl =         withAuthUser conn username (\(user :: User Value) -> verifyPassword password $ u_password user) $ \userId ->            SessionId <$> createToken conn "session" userId sessionTtl+    createSession conn userId sessionTtl =+        do mUser <- getUserById conn userId+           case (mUser :: Maybe (User Value)) of+             Nothing -> return Nothing+             Just _ -> Just . SessionId <$> createToken conn "session" userId sessionTtl     withAuthUser conn username authFn action =         do resultSet <- query conn [sql|SELECT lid, username, password, email, is_active, more FROM login WHERE (username = ? OR email = ?) LIMIT 1;|] (username, username)            case resultSet of
users-postgresql-simple.cabal view
@@ -1,5 +1,5 @@ name:                users-postgresql-simple-version:             0.3.0.0+version:             0.4.0.0 synopsis:            A PostgreSQL backend for the users package description:         This library is a backend driver using <http://hackage.haskell.org/package/postgresql-simple postgresql-simple> for                      <http://hackage.haskell.org/package/users the "users" library>.@@ -33,7 +33,7 @@   exposed-modules:     Web.Users.Postgresql   build-depends:                        base >=4.6 && <5,-                       users >=0.3.0.0,+                       users >=0.4.0.0,                        postgresql-simple >=0.4,                        aeson >=0.7,                        text >=1.2,