diff --git a/src/app.lisp b/src/app.lisp index 1e608ab..b1dcd8b 100644 --- a/src/app.lisp +++ b/src/app.lisp @@ -31,7 +31,8 @@ (jg:install-middleware *app* mw:*public-files*) (jg:install-middleware *app* mw:*recovery*) (jg:install-middleware *app* mw:*normalize-path*) - (jg:install-middleware *app* mw:*accesslog*)) + (jg:install-middleware *app* mw:*accesslog*) + (jg:install-middleware *app* mw:*block-unsupported-browser*)) (defun update () (stop) diff --git a/src/middlewares/block-unsupported-browser.lisp b/src/middlewares/block-unsupported-browser.lisp new file mode 100644 index 0000000..9f2ad54 --- /dev/null +++ b/src/middlewares/block-unsupported-browser.lisp @@ -0,0 +1,15 @@ +(defpackage #:hp/middlewares/block-unsupported-browser + (:use #:cl) + (:local-nicknames (#:re #:cl-ppcre)) + (:export #:*block-unsupported-browser*)) +(in-package #:hp/middlewares/block-unsupported-browser) + +(defparameter *block-unsupported-browser* + (lambda (app) + (lambda (env) + (let ((user-agent (gethash "user-agent" (getf env :headers)))) + (if (re:scan "(Firefox|SamsungBrowser)" user-agent) + `(:400 + (:content-type "text/plain") + ("This site is not compatible with your browser. Please use Chrome, Edge, Safari, or another compatible browser.")) + (funcall app env))))))