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>
</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>
</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
|