(in-package #:vampire) (defun login-page () (with-html-string (:div (:h1 "I vant to suck your blood") (:form :method "POST" :action "/login" (:input :placeholder "Name" :name "name") (:br) (:input :placeholder "Password" :type "password" :name "password") (:br) (:button :type "submit" "Click to Login"))) (:a :href "/new-account" "Come to the Dark Side"))) (wknd:defendpoint login :get :route "login" :returns "text/html" :handle (login-page)) (wknd:defendpoint login-user :post :route "login" :parameters (name string) (password string) :properties (user user) :authenticate (authenticate-login-user name password) :handle (wknd:endpoint-redirect 'home)) (defun authenticate-login-user (name password) (do> found-user :when= (user-with-name name) :when (equal (user-pwhash found-user) (hash-string password (user-pwsalt found-user))) session := (db:with-transaction () (make-instance 'session :user found-user)) (wknd:set-cookie +session-cookie+ :value (key session))))