|
|
|
@ -187,23 +187,36 @@
|
|
|
|
|
|
|
|
|
|
(define (define-page path contents #!key css title doctype headers charset
|
|
|
|
|
(method 'GET) use-session) ;; for define-session-page
|
|
|
|
|
(##sys#check-closure contents 'define-page)
|
|
|
|
|
(unless (procedure? contents) (error "contents must be a procedure"))
|
|
|
|
|
(add-resource!
|
|
|
|
|
path
|
|
|
|
|
;; args is path + any procedure match args
|
|
|
|
|
(lambda args
|
|
|
|
|
(sid (get-sid use-session))
|
|
|
|
|
(server-refresh-session!)
|
|
|
|
|
;; (sid (get-sid use-session))
|
|
|
|
|
;; (server-refresh-session!)
|
|
|
|
|
(if (use-session? use-session)
|
|
|
|
|
(if ((page-access-control) (car args))
|
|
|
|
|
(begin
|
|
|
|
|
;; TODO is this a duplicate of the above?
|
|
|
|
|
(maybe-create/refresh-session! use-session)
|
|
|
|
|
;; (maybe-create/refresh-session! use-session)
|
|
|
|
|
(handle-exceptions
|
|
|
|
|
exn
|
|
|
|
|
(if ((condition-predicate 'redirect) exn)
|
|
|
|
|
(let ((new-uri ((condition-property-accessor 'redirect 'uri) exn)))
|
|
|
|
|
(send-response
|
|
|
|
|
body:
|
|
|
|
|
(string-append
|
|
|
|
|
"<html><head><meta http-equiv=\"refresh\" content=\"0; URL="
|
|
|
|
|
(cond ((string? new-uri) new-uri)
|
|
|
|
|
((uri-reference? new-uri) (uri->string new-uri))
|
|
|
|
|
(else (abort "invalid URI construct")))
|
|
|
|
|
"\"></head></html")))
|
|
|
|
|
(abort exn))
|
|
|
|
|
(send-response
|
|
|
|
|
body:
|
|
|
|
|
(with-output-to-string
|
|
|
|
|
(lambda ()
|
|
|
|
|
(apply contents (cdr args))))))
|
|
|
|
|
(apply contents (cdr args)))))))
|
|
|
|
|
((page-access-denied-message) path))))
|
|
|
|
|
method))
|
|
|
|
|
|
|
|
|
|