· 5 years ago · Feb 29, 2020, 11:38 PM
1(defn signup-handler
2 [req]
3 (pp (dyn :session))
4 (def recaptcha-cfg (get config/*config* 'recaptcha @{}))
5 (def enable-recaptcha (signup-require-recaptcha?))
6
7 (case (req :method)
8 "GET"
9 (let [tparams (merge-into
10 @{:enable-recaptcha enable-recaptcha
11 :recaptcha-site-key (recaptcha-cfg :site-key)}
12 (get-in req [:flash :signup] @{}))]
13 @{:status 200
14 :headers (default-headers)
15 :body (templates/render-signup tparams)})
16 "POST"
17 (do
18 (def formdata (or (httpkit/parse-www-form-urlencoded (req :body))
19 @{}))
20 (def email (get formdata "email"))
21 (def g-recaptcha-response (get formdata "g-recaptcha-response" ""))
22 (def form-errors @{})
23 (var activation-code nil)
24
25 (label _
26 (when (or (nil? email) (empty? email))
27 (put form-errors :email "email is required")
28 (return _))
29
30 (when enable-recaptcha
31 (when (or
32 (empty? g-recaptcha-response)
33 (not (recaptcha/verify
34 (recaptcha-cfg :secret-key)
35 g-recaptcha-response)))
36 (put form-errors :recaptcha "humanity verification failed")
37 (return _)))
38
39 (set activation-code (account/begin-signup email))
40 (unless activation-code
41 (put form-errors :email "account already exists")
42 (return _)))
43 (if (empty? form-errors)
44 (do
45 (signup-update-rate-limit)
46 (mailer/send-signup-email email activation-code)
47 @{:status 200
48 :headers (default-headers)
49 :body
50 (templates/render-action-result
51 {:result "Signup email sent." :next "/signup"})})
52 (do
53 (put (dyn :session) :flash {:signup { :form-errors form-errors
54 :form { :email email }}})
55 (see-other (req :path)))))
56 (bad-request)))
57
58
59
60(defn email-login-handler
61 [req]
62 (def recaptcha-cfg (get config/*config* 'recaptcha @{}))
63 (def enable-recaptcha (email-login-require-recaptcha?))
64
65 (case (req :method)
66 "GET"
67 (let [tparams (merge-into
68 @{:enable-recaptcha enable-recaptcha
69 :recaptcha-site-key (recaptcha-cfg :site-key)}
70 (get-in req [:flash :email-login] @{}))]
71 @{:status 200
72 :headers (default-headers)
73 :body (templates/render-email-login tparams)})
74 "POST"
75 (do
76 (def formdata (or (httpkit/parse-www-form-urlencoded (req :body))
77 @{}))
78 (def email (get formdata "email"))
79 (def g-recaptcha-response (get formdata "g-recaptcha-response" ""))
80 (def form-errors @{})
81 (label _
82 (when (or (nil? email) (empty? email))
83 (put form-errors :email "email is required")
84 (return _))
85
86 (when enable-recaptcha
87 (when (or
88 (empty? g-recaptcha-response)
89 (not (recaptcha/verify
90 (recaptcha-cfg :secret-key)
91 g-recaptcha-response)))
92 (put form-errors :recaptcha "humanity verification failed")
93 (return _))))
94
95 (if (empty? form-errors)
96 (do
97 (email-login-update-rate-limit)
98 # If we the account doesn't exist, just pretend we sent
99 # an email anyway. XXX Somme sort of delay?
100 (when-let [login-code (session/begin-email-login email)]
101 (mailer/send-login-email email login-code))
102 @{:status 200
103 :headers (default-headers)
104 :body
105 (templates/render-action-result
106 {:result "Login email sent." :next "/confirm_email_login"})})
107 (do
108 (put (dyn :session) :flash {:email-login { :form-errors form-errors
109 :form {:email email} }})
110 (see-other (req :path)))))
111 (bad-request)))