← urwebplay

add authntication,crud

f225e2d22c2c2ebe737b5fd300f777ac286af3cb · ovidiucs · Jan 3, 2016 18:46

+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
diff --git a/auth.ur b/auth.ur
new file mode 100644
index 0000000..126eab2
--- /dev/null
+++ b/auth.ur
@@ -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'
+
diff --git a/auth.urs b/auth.urs
new file mode 100644
index 0000000..7cf5422
--- /dev/null
+++ b/auth.urs
@@ -0,0 +1,2 @@
+val displayIfAuthenticated : transaction page -> transaction page
+val login : unit -> transaction page
diff --git a/crud.ur b/crud.ur
index 7f1c19d..1e4221e 100644
--- a/crud.ur
+++ b/crud.ur
@@ -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
 
diff --git a/urblog.sql b/urblog.sql
index 5c00ec6..65df1c7 100644
--- a/urblog.sql
+++ b/urblog.sql
@@ -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
diff --git a/urblog.urp b/urblog.urp
index 63cd4a0..770eac4 100644
--- a/urblog.urp
+++ b/urblog.urp
@@ -7,5 +7,6 @@ database dbname=urblog
 sql urblog.sql
 
 $/string
+auth
 crud
 urblog