logo       
Google Custom Search
    AddThis Social Bookmark Button

r9855 - in trunk/libraries/koala: sources/examples/wiki sources/koala www/w: msg#00013

Subject: r9855 - in trunk/libraries/koala: sources/examples/wiki sources/koala www/wiki
Author: andreas
Date: Sun May  8 22:59:31 2005
New Revision: 9855

Modified:
   trunk/libraries/koala/sources/examples/wiki/wiki.dylan
   trunk/libraries/koala/sources/koala/dsp.dylan
   trunk/libraries/koala/www/wiki/edit.dsp
   trunk/libraries/koala/www/wiki/footer.dsp
   trunk/libraries/koala/www/wiki/header.dsp
   trunk/libraries/koala/www/wiki/wiki.css
Log:
bug: 7219

Implementation of login using the dsp session mechanism. Doesn't check
passwords yet, but prevents editing unless logged in.


Modified: trunk/libraries/koala/sources/examples/wiki/wiki.dylan
==============================================================================
--- trunk/libraries/koala/sources/examples/wiki/wiki.dylan      (original)
+++ trunk/libraries/koala/sources/examples/wiki/wiki.dylan      Sun May  8 
22:59:31 2005
@@ -29,7 +29,7 @@
 define generic page-editable? (page :: <wiki-page>) => (editable? :: 
<boolean>);
 
 define method  page-editable? (page :: <wiki-page>) => (editable? :: <boolean>)
-  #t
+  #f
 end;
 
 define method make-wiki-locator
@@ -134,6 +134,10 @@
      alias: #("/wiki/", "/wiki", "/"))
 end;
 
+define method page-editable? (page :: <view-page>) => (editable? :: <boolean>)
+  #t
+end;
+
 define method respond-to-get
     (page :: <view-page>, request :: <request>, response :: <response>)
   dynamic-bind (*title* = get-query-value("title") | *default-title*,
@@ -166,7 +170,14 @@
     (page :: <edit-page>, request :: <request>, response :: <response>)
   let title = trim(get-query-value("title") | "");
   let content = get-query-value("page-content") | "";
-  if (title = "")
+  if (~ user-logged-in?(request))
+    note-form-error("You must be logged in to edit a page.");
+    // redisplay edit page.
+    dynamic-bind (*title* = title,
+                  *content* = content)
+      respond-to-get(page, request, response);
+    end;
+  elseif (title = "")
     note-form-error("You must supply a valid page title.",
                     field: "title");
     // redisplay edit page.
@@ -208,6 +219,44 @@
   end;
 end;
 
+define page login-page (<wiki-page>)
+    (url: "/wiki/login.dsp",
+     source: "wiki/login.dsp")
+end;
+
+define method respond-to-post (page :: <login-page>,
+                               request :: <request>,
+                               response :: <response>)
+  let username = get-query-value("username");
+  let password = get-query-value("password");
+  let username-supplied? = username & username ~= "";
+  let password-supplied? = password & password ~= "";
+  if (username-supplied? & password-supplied?)
+    let session = get-session(request);
+    set-attribute(session, #"username", username);
+    set-attribute(session, #"password", password);
+  else
+    note-form-error("You must supply <b>both</b> a username and password.");
+  end;
+  next-method();  // process the DSP template
+end;
+
+define page logout-page (<wiki-page>)
+    (url: "/wiki/logout.dsp",
+     source: "wiki/logout.dsp")
+end;
+
+define method respond-to-get (page :: <logout-page>,
+                              request :: <request>,
+                              response :: <response>)
+  let session = get-session(request);
+  remove-attribute(session, #"username");
+  remove-attribute(session, #"password");
+  next-method();  // Must call this if you want the DSP template to be 
processed.
+end;
+
+
+
 define page search-page (<wiki-page>)
     (url: "/wiki/search.dsp",
      source: "wiki/search.dsp")
@@ -216,10 +265,6 @@
 define thread variable *search-results* = #();
 define thread variable *search-result* = #f;
 
-define method  page-editable? (page :: <search-page>) => (editable? :: 
<boolean>)
-  #f
-end;
-
 define named-method editable? in wiki
     (page :: <wiki-page>, request :: <request>)
   let session = get-session(request);
@@ -228,9 +273,13 @@
 
 define named-method logged-in? in wiki
     (page, request)
+  user-logged-in?(request)
+end;
+
+define method user-logged-in? (request :: <request>)
   let session = get-session(request);
   session & get-attribute(session, #"username");
-end;
+end method user-logged-in?;
 
 define method respond-to-get
     (page :: <search-page>, request :: <request>, response :: <response>)

Modified: trunk/libraries/koala/sources/koala/dsp.dylan
==============================================================================
--- trunk/libraries/koala/sources/koala/dsp.dylan       (original)
+++ trunk/libraries/koala/sources/koala/dsp.dylan       Sun May  8 22:59:31 2005
@@ -215,7 +215,7 @@
 define method page-source-modified?
     (page :: <file-page-mixin>) => (modified? :: <boolean>)
   block ()
-    ~page.mod-time
+    ~ page.mod-time
       | file-property(source-location(page), #"modification-date") > 
page.mod-time
   exception (e :: <error>)
     #t  // i figure we want an error to occur if, say, the file was deleted.
@@ -237,8 +237,9 @@
 define method respond-to-get
     (page :: <static-page>, request :: <request>, response :: <response>)
   if (page-source-modified?(page))
+    page.mod-time := file-property(source-location(page),
+                                   #"modification-date");
     page.contents := file-contents(source-location(page));
-    page.mod-time := current-date();
   end if;
   if (page.contents)
     let stream = output-stream(response);
@@ -798,7 +799,9 @@
 //
 define open method process-template
     (page :: <dylan-server-page>, request :: <request>, response :: <response>)
-  when (expired?(page) & page-source-modified?(page))
+  when (page-source-modified?(page))
+    page.mod-time := file-property(source-location(page),
+                                   #"modification-date");
     page.page-template := parse-page(page);
   end;
   display-template(page.page-template, page, request, response);
@@ -844,7 +847,8 @@
     resource-not-found-error(url: page-url(page));
   else
     page.contents := string;
-    page.mod-time := current-date();
+    page.mod-time := file-property(source-location(page),
+                                   #"modification-date");
     let tmplt = make(<dsp-template>,
                      contents: string,
                      content-start: 0,

Modified: trunk/libraries/koala/www/wiki/edit.dsp
==============================================================================
--- trunk/libraries/koala/www/wiki/edit.dsp     (original)
+++ trunk/libraries/koala/www/wiki/edit.dsp     Sun May  8 22:59:31 2005
@@ -3,6 +3,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml";>
 <head>
   <title>Dylan Wiki: <wiki:show-title/></title>
+  <link  rel="stylesheet" href="/wiki/wiki.css"/>
 </head>
 
 <body>
@@ -13,15 +14,22 @@
   <dsp:show-form-notes/>
   </div>
 
-  <form action="/wiki/edit.dsp" method="post">
-  <div id="edit">
-    Title: <input type="text" name="title" value="<wiki:show-title/>"/>
-    <br/>
-    <textarea name="page-content" cols="80" rows="20"><wiki:show-content 
format="raw"/></textarea>
-    <br/>
-    <input type="submit" value="Save"/>
-  </div>
-  </form>
+  <dsp:if test="logged-in?">
+    <dsp:then>
+      <form action="/wiki/edit.dsp" method="post">
+        <div id="edit">
+          Title: <input type="text" name="title" value="<wiki:show-title/>"/>
+          <br/>
+          <textarea name="page-content" cols="80" rows="20"><wiki:show-content 
format="raw"/></textarea>
+          <br/>
+          <input type="submit" value="Save"/>
+        </div>
+      </form>
+    </dsp:then>
+    <dsp:else>
+      Error: you're not allowed to edit <wiki:show-title/>.
+    </dsp:else>
+  </dsp:if>
 
   <%dsp:include url="footer.dsp"/>
 

Modified: trunk/libraries/koala/www/wiki/footer.dsp
==============================================================================
--- trunk/libraries/koala/www/wiki/footer.dsp   (original)
+++ trunk/libraries/koala/www/wiki/footer.dsp   Sun May  8 22:59:31 2005
@@ -6,6 +6,16 @@
   <dsp:when test="editable?">
     <a href="/wiki/edit.dsp?title=<wiki:show-title v="true" 
for-url="true"/>">Edit This Page</a>&nbsp;&nbsp;
   </dsp:when>
+  <dsp:if test="logged-in?">
+    <dsp:then>
+      Logged in as <wiki:username/>.
+      <a href="/wiki/logout.dsp">Logout</a>
+    </dsp:then>
+    <dsp:else>
+      <a href="/wiki/login.dsp">Login</a>
+    </dsp:else>        
+  </dsp:if>
+
   <wiki:show-revisions/>
   <p>
     <a href="http://validator.w3.org/check?uri=referer";><img 
src="http://www.w3.org/Icons/valid-xhtml10"; alt="Valid XHTML 1.0!" height="31" 
width="88" /></a>

Modified: trunk/libraries/koala/www/wiki/header.dsp
==============================================================================
--- trunk/libraries/koala/www/wiki/header.dsp   (original)
+++ trunk/libraries/koala/www/wiki/header.dsp   Sun May  8 22:59:31 2005
@@ -17,19 +17,6 @@
     <dsp:when test="editable?">
       <a href="/wiki/edit.dsp?title=<wiki:show-title v="true" 
for-url="true"/>">Edit This Page</a>&nbsp;&nbsp;
     </dsp:when>
-    <dsp:if test="logged-in?">
-      <dsp:then>
-        Logged in as <wiki:username/>.
-      </dsp:then>
-      <dsp:else>
-        <form action="/wiki/view.dsp" method="post">
-          <div class="login">
-            <input type="text" name="username" size="20"/>
-            <input type="submit" value="login"/>
-          </div>
-        </form>
-      </dsp:else>        
-    </dsp:if>
   </div>
 </div>
 <!-- begin user-generated page content -->

Modified: trunk/libraries/koala/www/wiki/wiki.css
==============================================================================
--- trunk/libraries/koala/www/wiki/wiki.css     (original)
+++ trunk/libraries/koala/www/wiki/wiki.css     Sun May  8 22:59:31 2005
@@ -119,7 +119,7 @@
   background: steelblue;
   color: white;
   border: 1px solid black;
-  font-family: sans-serif;
+  font-family: serif;
   margin-top: 0.5em; padding: 0.01em;
 }
 #footer a[href] { color: #E5794B; text-decoration: none }
-- 
Gd-chatter mailing list
Gd-chatter@xxxxxxxxxxxxxxxx
https://gauss.gwydiondylan.org/mailman/listinfo/gd-chatter




Try Searching:
servers, voip, java, networking, microsoft ...
<Prev in Thread] Current Thread [Next in Thread>