Factor out authentication logic from handlers.

Commit
60ccbcc94bf66692bcc1c2db21d5244cc40146ee
Author
Marius Peter <dev@marius-peter.com>
Author date
Committer
Marius Peter <dev@marius-peter.com>
Committer date
Changed files
authentication.rkt
index 00000000..9e9400b5 000000..100644
@@ -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
index 6141426e..001d5a1e 100644..100644
@@ -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
index b256b5a2..2b5c4a5c 100644..100644
@@ -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))))