From 9d363da8f9b8debe39c13c92498c4410fdc29d8e Mon Sep 17 00:00:00 2001 From: Joe Nelson Date: Mon, 10 Nov 2014 16:24:19 -0800 Subject: [PATCH] Consolidate auth functions --- src/Auth.hs | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/Auth.hs diff --git a/src/Auth.hs b/src/Auth.hs new file mode 100644 index 000000000..100accc0d --- /dev/null +++ b/src/Auth.hs @@ -0,0 +1,37 @@ +import qualified Data.Aeson as JSON +import qualified Data.ByteString.Char8 as BS +import Crypto.BCrypt +import Control.Monad (mzero) +import Control.Applicative ( (<$>), (<*>) ) +import Database.PostgreSQL.Simple + +data AuthUser = AuthUser { + userId :: String + , userPass :: String + , userRole :: String + } + +instance JSON.FromJSON AuthUser where + parseJSON (JSON.Object v) = AuthUser <$> + v JSON..: "id" <*> + v JSON..: "pass" <*> + v JSON..: "role" + parseJSON _ = mzero + +type DbRole = BS.ByteString + +data LoginAttempt = + NoCredentials + | MalformedAuth + | LoginFailed + | LoginSuccess DbRole + deriving (Eq, Show) + +checkPass :: BS.ByteString -> BS.ByteString -> Bool +checkPass = validatePassword + +setRole :: Connection -> DbRole -> IO () +setRole conn role = execute conn "set role ?" (Only role) + +resetRole :: Connection -> IO () +resetRole = flip execute_ "reset role"