;;; Scheme Untergrund Web Server -*- Scheme -*-

;;; This file is part of the Scheme Untergrund Networking package.

;;; Copyright (c) 1995 by Olin Shivers.
;;; For copyright information, see the file COPYING which comes with
;;; the distribution.

;;; This file contains a few example top-level request handlers and
;;; other useful fragments.

;;; - /h/<user>/<file-path> => serve <file-path> from ~user/public_html.
;;; - /seval  You may POST Scheme code to this URL, and receive the output.
;;; - Otherwise, serve files from the standard HTTP demon repository.

(define rh1
  (alist-path-dispatcher
      `(("h" . ,(home-dir-handler "public_html"))
	("seval" . ,seval-handler)
	("cgi-bin" . ,(cgi-handler "/usr/local/etc/httpd/cgi-bin")))
      (rooted-file-handler "/usr/local/etc/httpd/htdocs")))


;;; Do a rough approximation of NCSA httpd server semantics:
;;; - /~shivers/... serves file ~shivers/public_html/...
;;; - /cgi-bin/<prog> passes control to script 
;;;     /usr/local/etc/httpd/cgi-bin/<prog>
;;; - Otherwise, just serve files out of the standard directory.

(define rh2
  (alist-path-dispatcher
      `(("cgi-bin" . ,(cgi-handler "/usr/local/etc/httpd/cgi-bin")))
    (tilde-home-dir-handler "public_html"
        (rooted-file-handler "/usr/local/etc/httpd/htdocs"))))

;;; Greatest hits request handler.

(define rh3
  (alist-path-dispatcher
      `(("h" . ,(home-dir-handler "public_html"))
	("seval" . ,seval-handler)
	("cgi-bin" . ,(cgi-handler "/usr/local/etc/httpd/cgi-bin")))
    (tilde-home-dir-handler "public_html"
        (rooted-file-handler "/usr/local/etc/httpd/htdocs"))))



;;; Crank up a server on port 8001, first resetting our identity to
;;; user "nobody". Initialise the request-invariant part of the CGI
;;; env before starting.

(define (httpd1)
  (set-gid (->uid "nobody"))
  (set-uid (->gid "nobody"))
  (initialise-request-invariant-cgi-env)
  (httpd (make-httpd-options with-request-handler rh3
			     with-port 8001
			     with-root-directory "/usr/local/etc/httpd/htdocs")))