[Racket] Ferti hydroponic nutrient solver, redux.
Update authentication logic.
handlers.rkt
@@ -14,19 +14,35 @@
14
14
"models/fertilizer-product.rkt"
15
15
"services/nnls.rkt")
16
16
17
Added:
(define ferti-user
18
Added:
(or (getenv "FERTI_USER") (error 'ferti "FERTI_USER environment variable is not set")))
19
Added:
(define ferti-pass
20
Added:
(or (getenv "FERTI_PASS") (error 'ferti "FERTI_PASS environment variable is not set")))
21
Added:
22
Added:
(define (secured-dispatch)
23
Added:
(wrap-basic-auth app-dispatch))
24
Added:
17
25
(define (wrap-basic-auth handler)
18
26
(lambda (req)
19
Removed:
(match (request->basic-credentials req)
20
Removed:
;; credentials found → continue to dispatcher
21
Removed:
[(cons user pass) (handler req)]
22
Removed:
[else
23
Removed:
;; no credentials → trigger auth challenge
24
Removed:
(response 401
25
Removed:
#"Unauthorized"
26
Removed:
(current-seconds)
27
Removed:
TEXT/HTML-MIME-TYPE
28
Removed:
(list (make-basic-auth-header "Ferti Private Area"))
29
Removed:
void)])))
27
Added:
(if (authorized? req)
28
Added:
(handler req)
29
Added:
(unauthorized-response))))
30
Added:
31
Added:
(define (authorized? req)
32
Added:
(match (request->basic-credentials req)
33
Added:
[(cons user-b pass-b)
34
Added:
(define user (bytes->string/utf-8 user-b))
35
Added:
(define pass (bytes->string/utf-8 pass-b))
36
Added:
(and (string=? user ferti-user) (string=? pass ferti-pass))]
37
Added:
[_ #f]))
38
Added:
39
Added:
(define (unauthorized-response)
40
Added:
(response 401
41
Added:
#"Unauthorized"
42
Added:
(current-seconds)
43
Added:
TEXT/HTML-MIME-TYPE
44
Added:
(list (make-basic-auth-header (format "Basic Auth Test: ~a" (gensym))))
45
Added:
void))
30
46
31
47
(define-values (app-dispatch _)
32
48
(dispatch-rules [("ferti") #:method "get" ferti]