;; name to determine th actual script. That lookup will also use the
;; "role base" as declared in "roles.txt"
+(write-line 2 (string (date-value) " " (main-args)))
(unless (ends-with (main-args 0) ".cgi")
(if (exists file? (list (main-args 1)
(string (main-args 1) ".lsp")))
(write-line 2 (string "Unknown command " (main-args 1))))
(exit 0))
+
;; This script is executed in (protected) subdirectory www
(change-dir "..")
;; Needs an HTTP_AUTHORIZATION environment variable
-(unless (setf AUTH (env "HTTP_AUTHORIZATION"))
- (write-line 2 (read-file "tmpl/unauthorized.http"))
+(when (empty? (setf AUTH (env "HTTP_AUTHORIZATION")))
+ (write-line 1 (read-file "tmpl/unauthorized.http"))
(exit 0))
;; Must find that value in .htpasswd
(write-line 1 (read-file "tmpl/unauthorized.http"))
(exit 0))
+(define (role-script ROLE)
+ (let ((CMD (and (regex "([^/]*).cgi$" (main-args 0) 0) $1)))
+ (if (= "." ROLE) (string CMD ".lsp")
+ (format "%s/%s.lsp" ROLE CMD))))
+
(setf
ROLES (map (fn (x) (parse x ":")) (parse (read-file "roles.txt") "\n"))
REMOTE_USER (and (regex "([^:]+):" (base64-dec (6 AUTH)) 0) $1)
- ROLE (or (lookup REMOTE_USER ROLSE) "child")
- SCRIPT (format "%s/%s" ROLE (main-args 1))
+ ROLE (or (lookup REMOTE_USER ROLES) "child")
+ SCRIPT (role-script ROLE)
)
(env "REMOTE_USER" REMOTE_USER)
(env "ROLE" ROLE)
(load "expand-string.lsp")
+(write-line 2 (string "index.lsp"))
+(write-line 2 (string (expand-file "tmpl/index-page.html")))
+(println "Status 200 OK\nContent-Type: text/html\n\n")
(println (expand-file "tmpl/index-page.html"))
(exit 0)