add authntication,crud
+111 −15 · 5 files changed
-
auth.ur+76 −0 -
auth.urs+2 −0 -
crud.ur+12 −1 -
urblog.sql+20 −14 -
urblog.urp+1 −0
@@ -0,0 +1,76 @@ +table user : { Id : int, Username : string, Password : string, Email : string } + PRIMARY KEY Id + +cookie userSession : {Username : string, Password : string} + +(* gol +fun displayIfAuthenticated page = page + +fun loginHandler row = return <xml><head/><body/></xml> + +fun loginHandler row = + re' <- oneOrNoRows1(SELECT user.Id + FROM user + WHERE user.Username = {{row.Username}} + AND user.Password = {{row.Password}}); + case re' of + None => error <xml>Invalid Login</xml> + | Some re => + setCookie userSession + {Value = row, + Expires = None, + Secure = False}; + return <xml> + <head><title>Logged In</title></title> + <body> + <h1>Logged In</h1> + </body> + </xml> +*) +fun ifAuthenticated page row = + re' <- oneOrNoRows1(SELECT user.Id + FROM user + WHERE user.Username = {[row.Username]} + AND user.Password = {[row.Password]}); + + case re' of + None => error <xml>Invalid Login</xml> + | Some re => + setCookie userSession + {Value = row, + Expires = None, + Secure = False}; + page + +fun loginHandler row = + ifAuthenticated (return <xml> + <head><title>Logged In!</title></head> + <body> + <h1>Logged In</h1> + </body> + </xml>) row + +fun login () = return + <xml> + <head><title>Login to UrBlog</title></head> + <body> + <form> + <p>Username:<br/><textbox{#Username}/><br/> + Password:<br/><textbox{#Password}/><br/> + <submit value="Login" action={loginHandler}/> + </p> + </form> + </body> + </xml> +fun displayIfAuthenticated page = + c <- getCookie userSession; + case c of + None => return + <xml><head/> + <body> + <h1>Not Logged In</h1> + <p><a link={login()}>Login</a></p> + </body> + </xml> + | Some c' => ifAuthenticated page c' + @@ -0,0 +1,2 @@ +val displayIfAuthenticated : transaction page -> transaction page +val login : unit -> transaction page @@ -159,7 +159,7 @@ functor Make(M : sig <form><submit action={delete} value="I was born sure!"/></form> </body></xml> end - +(* and admin () = ls <- editList (); return <xml><head> @@ -170,6 +170,17 @@ functor Make(M : sig {ls} </body></xml> +*) + and admin () = + ls <- editList (); + Auth.displayIfAuthenticated ( + return <xml><head> + <title>{cdata M.title}</title> + </head><body> + + <h1>{cdata M.title}</h1> + {ls} + </body></xml>) end @@ -1,21 +1,27 @@ -CREATE TABLE uw_Urblog_entry(uw_id int8 NOT NULL, uw_title text NOT NULL, - uw_created timestamp NOT NULL, - uw_author text NOT NULL, uw_body text NOT NULL, +CREATE TABLE uw_Auth_user(uw_id int8 NOT NULL, uw_username text NOT NULL, + uw_password text NOT NULL, uw_email text NOT NULL, PRIMARY KEY (uw_id) ); - CREATE SEQUENCE uw_Urblog_commentS; + CREATE TABLE uw_Urblog_entry(uw_id int8 NOT NULL, uw_title text NOT NULL, + uw_created timestamp NOT NULL, + uw_author text NOT NULL, uw_body text NOT NULL, + PRIMARY KEY (uw_id) + + ); - CREATE TABLE uw_Urblog_comment(uw_id int8 NOT NULL, uw_entry int8 NOT NULL, - uw_created timestamp NOT NULL, - uw_author text NOT NULL, - uw_body text NOT NULL, - PRIMARY KEY (uw_id), - CONSTRAINT uw_Urblog_comment_Entry - FOREIGN KEY (uw_entry) REFERENCES uw_Urblog_entry (uw_id) - ); + CREATE SEQUENCE uw_Urblog_commentS; - CREATE SEQUENCE uw_Urblog_seq; + CREATE TABLE uw_Urblog_comment(uw_id int8 NOT NULL, uw_entry int8 NOT NULL, + uw_created timestamp NOT NULL, + uw_author text NOT NULL, + uw_body text NOT NULL, + PRIMARY KEY (uw_id), + CONSTRAINT uw_Urblog_comment_Entry + FOREIGN KEY (uw_entry) REFERENCES uw_Urblog_entry (uw_id) + ); - \ No newline at end of file + CREATE SEQUENCE uw_Urblog_seq; + + \ No newline at end of file @@ -7,5 +7,6 @@ database dbname=urblog sql urblog.sql $/string +auth crud urblog