diff --git a/lack-middleware-mount.asd b/lack-middleware-mount.asd new file mode 100644 index 0000000..4790404 --- /dev/null +++ b/lack-middleware-mount.asd @@ -0,0 +1,10 @@ +(in-package :cl-user) +(defpackage :lack-middleware-mount-asd + (:use :cl :asdf)) +(in-package :lack-middleware-mount-asd) + +(defsystem lack-middleware-mount + :version "0.1" + :author "Eitaro Fukamachi" + :license "LLGPL" + :components ((:file "src/middleware/mount"))) diff --git a/src/middleware/mount.lisp b/src/middleware/mount.lisp new file mode 100644 index 0000000..870855d --- /dev/null +++ b/src/middleware/mount.lisp @@ -0,0 +1,22 @@ +(in-package :cl-user) +(defpackage lack.middleware.mount + (:use :cl)) +(in-package :lack.middleware.mount) + +(defvar *lack-middleware-mount* + (lambda (app path mount-app) + (let ((len (length path))) + (lambda (env) + (let ((path-info (getf env :path-info))) + (cond + ((string= path-info path) + (setf (getf env :path-info) "/") + (funcall mount-app env)) + ((and (< len (length path-info)) + (string= path-info path :end1 len) + (char= (aref path-info len) #\/)) + (setf (getf env :path-info) + (subseq path-info (length path))) + (funcall mount-app env)) + (t + (funcall app env))))))))