Add secured dispatch handling.

Commit
49bf3caaf4f00e24181ba8cbc5d86e209a8a714e
Author
Marius Peter <dev@marius-peter.com>
Author date
Committer
Marius Peter <dev@marius-peter.com>
Committer date
Changed files
handlers.rkt
index 91781a08..c022c3c8 100644..100644
@@ -1,29 +1,39 @@
1 1 #lang racket
2 2
3 Removed: (provide app-dispatch)
3 Added: (provide secured-dispatch)
4 4
5 5 (require web-server/dispatch
6 6 web-server/http
7 7 web-server/formlets
8 Added: web-server/http/basic-auth
8 9 "views.rkt"
9 10 "formlets.rkt"
10 11 "models/user.rkt"
11 12 "models/nutrient-measurement.rkt"
12 13 "models/nutrient-target.rkt"
13 Removed: "models/crop-requirement.rkt"
14 14 "services/nnls.rkt")
15 15
16 Added: (define (wrap-basic-auth handler)
17 Added: (lambda (req)
18 Added: (match (request->basic-credentials req)
19 Added: [(cons user pass)
20 Added: ;; credentials found → continue to dispatcher
21 Added: (handler req)]
22 Added: [else
23 Added: ;; no credentials → trigger auth challenge
24 Added: (response
25 Added: 401 #"Unauthorized" (current-seconds) TEXT/HTML-MIME-TYPE
26 Added: (list
27 Added: (make-basic-auth-header "Ferti Private Area"))
28 Added: void)])))
29 Added:
16 30 (define-values (app-dispatch _)
17 Removed: ;; Ferti dashboard
18 31 (dispatch-rules [("ferti") #:method "get" ferti]
19 Removed: ;; Nutrient measurements
20 32 [("measurement" "new") #:method "get" new-measurement]
21 33 [("measurement" "create") #:method "post" create-measurement]
22 34 [("measurement" "destroy") #:method "post" destroy-measurement]
23 Removed: ;; Nutrient targets
24 35 [("target" "new") #:method "get" new-target]
25 36 [("target" "create") #:method "post" create-target]
26 Removed: ;; Index
27 37 [("") #:method "get" index]
28 38 [else fallback]))
29 39
@@ -66,3 +76,5 @@
66 76
67 77 (define (fallback _)
68 78 (response/xexpr #:preamble #"<!DOCTYPE html>" (fallback-page 404)))
79 Added:
80 Added: (define secured-dispatch (wrap-basic-auth app-dispatch))
main.rkt
index 975be57b..4bf74ff4 100644..100644
@@ -16,4 +16,4 @@
16 16 (connect! #:path development-db-path)
17 17 (migrate-all!)
18 18 (seed-database!)
19 Removed: (serve/dispatch app-dispatch)))
19 Added: (serve/dispatch secured-dispatch)))