Skip to content
Fetching contributors…
Cannot retrieve contributors at this time
60 lines (56 sloc) 2.47 KB
(ns foreclojure.register
(:require [noir.session :as session]
[ring.util.response :as response])
(:import [org.jasypt.util.password StrongPasswordEncryptor])
(:use [hiccup.form :only [form-to text-field password-field]]
[compojure.core :only [defroutes GET POST]]
[foreclojure.utils :only [form-row assuming flash-error plausible-email?]]
[foreclojure.template :only [def-page]]
[foreclojure.messages :only [err-msg]]
[somnium.congomongo :only [insert! fetch-one]]))
(def-page register-page []
{:title "4clojure – Register"
[:div.error (session/flash-get :error)]
(form-to [:post "/register"]
(map form-row
[[text-field :user "Username (4-13 chars.)" (session/flash-get :user)]
[password-field :pwd "Password (7+ chars.)"]
[password-field :repeat-pwd "Repeat Password"]
[text-field :email "Email" (session/flash-get :email)]])
[:td [:button {:type "submit"} "Register"]]]]))})
(defn do-register [user pwd repeat-pwd email]
(let [lower-user (.toLowerCase user)]
(assuming [(nil? (fetch-one :users :where {:user lower-user}))
(err-msg "settings.user-exists"),
(< 3 (.length lower-user) 14)
(err-msg "settings.uname-size"),
(= lower-user
(first (re-seq #"[A-Za-z0-9_]+" lower-user)))
(err-msg "settings.uname-alphanum")
(< 6 (.length pwd))
(err-msg "settings.pwd-size"),
(= pwd repeat-pwd)
(err-msg "settings.pwd-match"),
(plausible-email? email)
(err-msg "")
(nil? (fetch-one :users :where {:email email}))
(err-msg "")]
(insert! :users
{:user lower-user
:pwd (.encryptPassword (StrongPasswordEncryptor.) pwd)
:email email})
(session/put! :user lower-user)
(response/redirect "/"))
(session/flash-put! :user user)
(session/flash-put! :email email)
(flash-error "/register" why)))))
(defroutes register-routes
(GET "/register" [] (register-page))
(POST "/register" {{:strs [user pwd repeat-pwd email]} :form-params}
(do-register user pwd repeat-pwd email)))
Something went wrong with that request. Please try again.