Update authentication logic.

Commit
31cce892597693c771db0fdbc2be14aba3ff702e
Author
Marius Peter <dev@marius-peter.com>
Author date
Committer
Marius Peter <dev@marius-peter.com>
Committer date
handlers.rkt
index 42ed13af..7304d18b 100644..100644
@@ -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]