Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2017
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.63 KB | None | 0 0
  1. module Auth where
  2.  
  3. import Data.Map (Map)
  4. import qualified Data.Map as Map
  5.  
  6. import Data.Maybe (Maybe)
  7. import qualified Data.Maybe as Maybe
  8.  
  9. data Database = Database (Map String String)
  10.  
  11. -- Would use private constructor here
  12. data Name = Name String deriving (Show, Eq, Ord)
  13. data Password = Password String deriving (Show, Eq, Ord)
  14.  
  15. data User = User Name Password deriving (Show, Eq, Ord)
  16.  
  17. data Request =
  18. AuthRequest Name Password
  19. | OtherRequest
  20. | UnknownRequest
  21. deriving (Show)
  22.  
  23. data Response =
  24. AuthSuccess
  25. | AuthFailure
  26. | OtherResponse
  27. | ErrorResponse
  28. deriving (Show)
  29.  
  30. --Maybe here because we would want validation logic
  31. --but obvious none being called here.
  32. nameFromString :: String -> Maybe Name
  33. --nameFromString _ = None
  34. --nameFromString _ = Just $ Name "bob"
  35. nameFromString name = Just $ Name name
  36.  
  37. --Ditto
  38. passFromString :: String -> Maybe Password
  39. --passFromString _ = None
  40. --passFromString _ = Just $ Password "bob"
  41. passFromString pass = Just $ Password pass
  42.  
  43. getPasswordForUsername :: Database -> Name -> Maybe Password
  44. --getPasswordForUsername _ _ = passFromString "foo"
  45. --getPasswordForUsername _ (Name n) = passFromString n
  46. getPasswordForUsername (Database db) (Name n) = do
  47. passString <- Map.lookup n db
  48. pass <- passFromString passString
  49. return pass
  50.  
  51. myDb = Database $ Map.fromList [("Ben", "xyzzy"), ("Creighton", "password")]
  52.  
  53. handleAuth :: Request -> Response
  54. --handleAuth (AuthRequest name pass) = ErrorResponse
  55. handleAuth (AuthRequest name pass) = Maybe.fromMaybe AuthFailure $ do
  56. actualPass <- getPasswordForUsername myDb name
  57. return $ if ((compare pass actualPass) == EQ) then AuthSuccess else AuthFailure
  58. handleAuth _ = ErrorResponse
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement