[Racket] Ferti hydroponic nutrient solver, redux.
Factor out authentication logic from handlers.
Changed files
authentication.rkt
@@ -0,0 +1,33 @@
1
Added:
#lang racket
2
Added:
3
Added:
(provide make-auth-dispatch)
4
Added:
5
Added:
(require web-server/http
6
Added:
web-server/http/basic-auth)
7
Added:
8
Added:
(define ferti-user
9
Added:
(or (getenv "FERTI_USER") (error 'authentication "FERTI_USER environment variable is not set")))
10
Added:
(define ferti-pass
11
Added:
(or (getenv "FERTI_PASS") (error 'authentication "FERTI_PASS environment variable is not set")))
12
Added:
13
Added:
(define (make-auth-dispatch handler)
14
Added:
(lambda (req)
15
Added:
(if (authorized? req)
16
Added:
(handler req)
17
Added:
(unauthorized-response))))
18
Added:
19
Added:
(define (authorized? req)
20
Added:
(match (request->basic-credentials req)
21
Added:
[(cons user-b pass-b)
22
Added:
(define user (bytes->string/utf-8 user-b))
23
Added:
(define pass (bytes->string/utf-8 pass-b))
24
Added:
(and (string=? user ferti-user) (string=? pass ferti-pass))]
25
Added:
[_ #f]))
26
Added:
27
Added:
(define (unauthorized-response)
28
Added:
(response 401
29
Added:
#"Unauthorized"
30
Added:
(current-seconds)
31
Added:
TEXT/HTML-MIME-TYPE
32
Added:
(list (make-basic-auth-header (format "Basic Auth Test: ~a" (gensym))))
33
Added:
void))
handlers.rkt
@@ -1,12 +1,12 @@
1
1
#lang racket
2
2
3
Removed:
(provide secured-dispatch
3
Added:
(provide production-dispatch
4
4
fapg-url)
5
5
6
6
(require web-server/dispatch
7
7
web-server/http
8
8
web-server/formlets
9
Removed:
web-server/http/basic-auth
9
Added:
"authentication.rkt"
10
10
"views.rkt"
11
11
"formlets.rkt"
12
12
"models/user.rkt"
@@ -17,35 +17,8 @@
17
17
"models/fertilizer-product.rkt"
18
18
"services/nnls.rkt")
19
19
20
Removed:
(define ferti-user
21
Removed:
(or (getenv "FERTI_USER") (error 'ferti "FERTI_USER environment variable is not set")))
22
Removed:
(define ferti-pass
23
Removed:
(or (getenv "FERTI_PASS") (error 'ferti "FERTI_PASS environment variable is not set")))
24
Removed:
25
Removed:
(define (secured-dispatch)
26
Removed:
(wrap-basic-auth fapg-dispatch))
27
Removed:
28
Removed:
(define (wrap-basic-auth handler)
29
Removed:
(lambda (req)
30
Removed:
(if (authorized? req)
31
Removed:
(handler req)
32
Removed:
(unauthorized-response))))
33
Removed:
34
Removed:
(define (authorized? req)
35
Removed:
(match (request->basic-credentials req)
36
Removed:
[(cons user-b pass-b)
37
Removed:
(define user (bytes->string/utf-8 user-b))
38
Removed:
(define pass (bytes->string/utf-8 pass-b))
39
Removed:
(and (string=? user ferti-user) (string=? pass ferti-pass))]
40
Removed:
[_ #f]))
41
Removed:
42
Removed:
(define (unauthorized-response)
43
Removed:
(response 401
44
Removed:
#"Unauthorized"
45
Removed:
(current-seconds)
46
Removed:
TEXT/HTML-MIME-TYPE
47
Removed:
(list (make-basic-auth-header (format "Basic Auth Test: ~a" (gensym))))
48
Removed:
void))
20
Added:
(define (production-dispatch)
21
Added:
(make-auth-dispatch fapg-dispatch))
49
22
50
23
(define-values (fapg-dispatch fapg-url)
51
24
(dispatch-rules
main.rkt
@@ -15,4 +15,4 @@
15
15
(connect! #:path development-db-path)
16
16
(migrate-all!)
17
17
(seed-database!)
18
Removed:
(serve/dispatch (secured-dispatch))))
18
Added:
(serve/dispatch (production-dispatch))))