Welcome to the CHICKEN Scheme pasting service
Spiffy configuration for static website added by Kooda on Fri Mar 11 14:18:13 2016
#!/usr/bin/csi -s
(use data-structures cgi-handler intarweb matchable posix spiffy spiffy-directory-listing
srfi-18 openssl tcp6 uri-common)
(define cgit (cgi-handler* "/usr/share/webapps/cgit/cgit.cgi"))
(define (expire-1hour k)
(with-headers `((expires ,(vector (seconds->utc-time (+ (current-seconds) 3600)) '())))
k))
(define (redirect-host host)
(lambda (continue)
(let* ((old-u (request-uri (current-request)))
(new-u (update-uri old-u host: host)))
(with-headers `((location ,new-u))
(lambda () (send-status 'moved-permanently))))))
(define (subdomain-root domain)
(let ((path-prefix (string-append docroot domain "/")))
(lambda (continue)
(let ((host (string-split (uri-host (request-uri (current-request))) ".")))
(parameterize ((root-path (string-append path-prefix (car host))))
(expire-1hour continue))))))
;; Activate TCP buffering
(tcp-buffer-size 2048)
(spiffy-user "http")
(spiffy-group "http")
(define normal-port 80)
(define ssl-port 443)
(define normal-listener (tcp-listen normal-port 10 "::"))
(define ssl-listener (ssl-listen ssl-port 10 "::" 'tlsv12))
(ssl-load-certificate-chain! ssl-listener "cert.pem")
(ssl-load-private-key! ssl-listener "cert.key")
(switch-user/group (spiffy-user) (spiffy-group))
(access-log "/var/log/spiffy/access.log")
(error-log "/var/log/spiffy/error.log")
;; (debug-log "/var/log/spiffy/debug.log")
(mime-type-map
'(("html" . #(text/html ((charset . utf-8))))
("xhtml" . #(application/xhtml+xml ((charset . utf-8))))
("js" . #(application/javascript ((charset . utf-8))))
("css" . #(text/css ((charset . utf-8))))
("png" . image/png)
("xml" . #(application/xml ((charset . utf-8))))
("pdf" . application/pdf)
("jpeg" . image/jpeg)
("jpg" . image/jpeg)
("gif" . image/gif)
("ico" . image/vnd.microsoft.icon)
("svg" . #(image/svg+xml ((charset . utf-8))))
("txt" . #(text/plain ((charset . utf-8))))
("atom" . #(application/atom+xml ((charset . utf-8))))
("flac" . audio/x-flac)
("mp3" . audio/mpeg)
("mp4" . video/mp4)
("ogg" . application/ogg)
("oga" . application/ogg)
("ogv" . application/ogg)
("wav" . audio/x-wav)
("webm" . video/webm)))
(index-files
'("index.xhtml" "index.html" "index.xml" "index.svg" "index.txt"))
(define docroot "/srv/http/")
;; Default root for unknown domains
(root-path (string-append docroot "unknown"))
(handle-directory spiffy-directory-listing)
(vhost-map
`(((: bos "upyum.com" eos) . ,(redirect-host "www.upyum.com"))
((: bos "gaufr.es" eos) . ,(redirect-host "www.gaufr.es"))
((: bos "reptifur.fr" eos) . ,(redirect-host "repti.fr"))
((: bos "repti.fr" eos) . ,(lambda (k) (root-path (string-append docroot "repti.fr")) (expire-1hour k)))
((: bos "www.upyum.com" eos) . ,(lambda (k)
(let* ((req (current-request))
(uri (request-uri req))
(path (uri-path uri))
(hdrs (request-headers req))
(accept-languages (header-value 'accept-language hdrs)))
(match path
('(/ "")
(with-headers `((location ,(update-uri uri path: (list '/ (if (memq accept-languages '(fr fr-be fr-ca fr-ch fr-fr fr-lu fr-mc)) "fr" "en")))))
(lambda () (send-status 'moved-permanently))))
(('/ "cgit.cgi" . rest)
(parameterize ((current-pathinfo rest))
(cgit "")))
(else
(parameterize ((root-path (string-append docroot "upyum.com/www")))
(expire-1hour k)))))))
((: bos "hg.upyum.com" eos) . ,(lambda (k)
(with-headers `((location ,(update-uri (request-uri (current-request))
host: "www.upyum.com"
path: '(/ "cgit.cgi"))))
(lambda () (send-status 'moved-permanently)))))
((: bos "kooda.upyum.com" eos) . ,(lambda (k)
(let ((uri (request-uri (current-request))))
(if (equal? '(/ "") (uri-path uri))
(with-headers `((location ,(update-uri uri host: "www.upyum.com")))
(lambda () (send-status 'moved-permanently)))
(parameterize ((root-path (string-append docroot "upyum.com/kooda"))) (expire-1hour k))))))
((: bos (+ any) ".upyum.com" eos) . ,(subdomain-root "upyum.com"))
((: bos (+ any) ".gaufr.es" eos) . ,(subdomain-root "gaufr.es"))))
(define normal-thread
(make-thread
(lambda ()
(server-port normal-port)
(accept-loop normal-listener tcp-accept tcp-addresses))))
(define ssl-thread
(make-thread
(lambda ()
(server-port ssl-port)
(accept-loop ssl-listener ssl-accept (lambda (port) (tcp-addresses (ssl-port->tcp-port port)))))))
(thread-start! normal-thread)
(thread-start! ssl-thread)
(print "server started!")
(thread-join! normal-thread)