Guest User

Untitled

a guest
Nov 29th, 2018
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.06 KB | None | 0 0
  1. signature USER = sig
  2. type id
  3. type password
  4. val id_read : read id
  5. val pass_read : read password
  6. val id_show : show id
  7. val login : { Id : id, Password : password } -> transaction bool
  8. val whoami : transaction (option id)
  9. end
  10.  
  11. functor MakeUser(M : sig type id
  12. type password
  13. end) : USER = struct
  14. type id = M.id
  15. type password = M.password
  16.  
  17. table user : { Id : id, Password : password }
  18. PRIMARY KEY Id
  19. cookie c : { Id : id, Password : password }
  20. fun login r =
  21. b <- oneRowE1 (SELECT COUNT( * ) > 0
  22. FROM user
  23. WHERE user.Id = {[r.Id]}
  24. AND user.Password = {[r.Password]});
  25. if b then
  26. setCookie c { Value = r, Expires = None, Secure = False };
  27. return True
  28. else return False
  29. val whoami =
  30. cc <- getCookie c;
  31. case cc of
  32. None => return None
  33. | Some r =>
  34. b <- oneRowE1 (SELECT COUNT( * ) > 0
  35. FROM user
  36. WHERE user.Id = {[r.Id]}
  37. AND user.Password = {[r.Password]});
  38. if b then
  39. return (Some r.Id)
  40. else
  41. return None
  42. end
  43.  
  44. structure User = MakeUser(struct
  45. type id = string
  46. type password = string
  47. end)
  48.  
  49.  
  50. fun main () =
  51. me <- User.whoami;
  52. return <xml><body>
  53. <h1>Logged in as : {cdata (show me)}</h1>
  54. </body></xml>
  55. and login () =
  56. return <xml><body>
  57. <form>
  58. <textbox{#Id}/>
  59. <textbox{#Password}/>
  60. <submit action={signin}/>
  61. </form>
  62. </body></xml>
  63. and signin r =
  64. success <- User.login { Id = readError r.Id, Password = readError r.Password };
  65. if success then main()
  66. else login ()
  67.  
  68. Unmatched signature item Item: val id_read : read id
  69. Unmatched signature item Item: val password_read : read password
  70. Unmatched signature item Item: val id_show : show id
Add Comment
Please, Sign In to add comment