(defmacro if-valid-user 
  ;; TODO: Add parameter validations
  ([params then] 
   `(if-valid-user ~params ~then nil))
  ([params then else]
   (let [cred (:credentials params)
         pass (:pass params)]
    `(let [~'found-user (db/find-user ~cred)]
      (if (and 
            ~'found-user
            ;; Compare credentials with those we got from the last query
            (hashers/check ~pass (:pass ~'found-user)))
          ~then
          ~else)))))

(defn handle-login [{:keys [params]}]
  (if-let [errors (validate-login params)]
    (-> (response/redirect "/login")
        (assoc :flash (assoc params :errors errors)))
    ;; Else 
    (if-valid-user params
        (login-success art-thingy.handler/found-user) 
        ;; Finding user failed
        (login-failure params))))
