diff options
Diffstat (limited to 'handlers.rkt')
| -rw-r--r-- | handlers.rkt | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/handlers.rkt b/handlers.rkt index 91781a0..c022c3c 100644 --- a/handlers.rkt +++ b/handlers.rkt @@ -1,29 +1,39 @@ #lang racket -(provide app-dispatch) +(provide secured-dispatch) (require web-server/dispatch web-server/http web-server/formlets + web-server/http/basic-auth "views.rkt" "formlets.rkt" "models/user.rkt" "models/nutrient-measurement.rkt" "models/nutrient-target.rkt" - "models/crop-requirement.rkt" "services/nnls.rkt") +(define (wrap-basic-auth handler) + (lambda (req) + (match (request->basic-credentials req) + [(cons user pass) + ;; credentials found → continue to dispatcher + (handler req)] + [else + ;; no credentials → trigger auth challenge + (response + 401 #"Unauthorized" (current-seconds) TEXT/HTML-MIME-TYPE + (list + (make-basic-auth-header "Ferti Private Area")) + void)]))) + (define-values (app-dispatch _) - ;; Ferti dashboard (dispatch-rules [("ferti") #:method "get" ferti] - ;; Nutrient measurements [("measurement" "new") #:method "get" new-measurement] [("measurement" "create") #:method "post" create-measurement] [("measurement" "destroy") #:method "post" destroy-measurement] - ;; Nutrient targets [("target" "new") #:method "get" new-target] [("target" "create") #:method "post" create-target] - ;; Index [("") #:method "get" index] [else fallback])) @@ -66,3 +76,5 @@ (define (fallback _) (response/xexpr #:preamble #"<!DOCTYPE html>" (fallback-page 404))) + +(define secured-dispatch (wrap-basic-auth app-dispatch)) |