anchor.diff:    "Given a user credential, returns the real name of that user."
     (getf user-credential :realname))
   
  +(defun get-vm-name (user-credential)
  +  "Given a user credential, returns the VM name that the user is allowed to use."
  +  (getf user-credential :vm-name))
  +
  +(defun get-role (user-credential)
  +  "Given a user credential, returns the role of a user."
  +  (getf user-credential :role))
  +
   (defun verify-user-credential (username password &key (user-list *user-list*))
     (let ((user-credential (get-user-credential username user-list)))
       (when (and (not (null user-credential))
  
positive.code: 
  ;;; Authenticate stuffs go here.
  
  (defvar *user-list* (list (cons "5571432021"
                                  (list :password "1234"
                                        :role "student"
                                        :realname "Smith Dhumbumroong")))
    "An ad-hoc list of user credentials.")
  
  
negative.code:            (hunchentoot:start-session)
             (setf (hunchentoot:session-value :username) username)
             (setf (hunchentoot:session-value :realname) (get-realname user-credential))
             (setf (hunchentoot:session-value :role) (get-role user-credential))
             (setf (hunchentoot:session-value :vm-name) (get-vm-name user-credential))
             (setf (hunchentoot:session-value :auth-token) "true")
             (hunchentoot:redirect success-target))
            (t
  