/src/Models/User.hs

http://github.com/biilmann/eventsource-broker · Haskell · 28 lines · 22 code · 5 blank · 1 comment · 1 complexity · fdd917fdb7620df6477a8098663fdc31 MD5 · raw file

  1. {-# LANGUAGE OverloadedStrings #-}
  2. module Models.User where
  3. import Prelude hiding (lookup)
  4. import Data.UString (UString)
  5. import qualified Data.UString as US
  6. import Data.ByteString (ByteString)
  7. import qualified Data.ByteString.Char8 as BS
  8. import qualified Data.ByteString.Lazy as LBS
  9. import Data.Digest.Pure.SHA (sha1)
  10. import DB
  11. data User = User { apiKey :: UString, apiSecret :: UString }
  12. get :: DB -> UString -> IO (Either Failure (Maybe User))
  13. get db key = do
  14. result <- run db $ findOne (select ["key" =: key] "users")
  15. return $ returnModel constructor result
  16. authenticate :: User -> ByteString -> ByteString -> Bool
  17. authenticate user token timestamp =
  18. let key = US.toByteString $ apiKey user
  19. secret = US.toByteString $ apiSecret user
  20. digest = sha1 $ LBS.fromChunks [key, ":", secret, ":", timestamp] in
  21. show digest == BS.unpack token
  22. constructor :: Document -> User
  23. constructor doc = User (at "key" doc) (at "secret" doc)