[Racket] Ferti hydroponic nutrient solver, redux.
Add secured dispatch handling.
Changed files
handlers.rkt
@@ -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
@@ -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)))