Merged objcl into the main informatimago repository.
[com-informatimago:com-informatimago.git] / cl-posix / cliki / cliki-request.lisp
1 (in-package :cliki)
2 (defmethod cliki-default-page-name ((cliki cliki-view)) nil "index")
3 (defmethod find-page-or-redirect ((cliki cliki-view)
4                                   (request request))
5   (let* ((search-string (name-for-url (request-url request)))
6          (query (url-query (request-url request)))
7          (actual (find-page cliki search-string)))
8     (cond
9       ((not actual)                     ; no page found
10        (values nil search-string))
11       ((string= search-string (page-title actual)) ;same name
12        (values actual (page-title actual)))
13       (t                                ;other name, redirect the browser
14        (request-redirect request
15                          (merge-url
16                           (page-url cliki actual)
17                           (if query (format nil "?~A" query) "")))
18        (signal 'response-sent)))))
19
20 ;; user is some kind of object which represents a user.  If your cliki-instance
21 ;; subclass makes it anything other than a string, it needs to provide 
22 ;; methods for these
23 (defgeneric cliki-user-name (cliki user))
24 (defmethod cliki-user-name ((cliki cliki-view) user)
25   user)
26
27 (defgeneric cliki-user-cookie (cliki user))
28 (defmethod cliki-user-cookie ((cliki cliki-view) user)
29   (format nil "username=~A; path=~A; expires=~A; domain=~A"
30           (urlstring-escape (cliki-user-name cliki user))
31           (url-path (cliki-url-root cliki))
32           "Sun, 01-Jun-2036 00:00:01 GMT"
33           (url-host (cliki-url-root cliki))))
34
35 (defmethod cliki-user-cookie ((cliki cliki-view) (user (eql nil)))
36   (format nil "username=; path=~A; expires=~A; domain=~A"
37           (url-path (cliki-url-root cliki))
38           "Mon, 32-Jul-2001 00:00:01 GMT"
39           (url-host (cliki-url-root cliki))))