(in-package :com.tee-it-up-golf.auth)

(defpclass user ()
  ((username :initarg :username :accessor username :index t)
   (password :initarg :password :accessor password)))

(defmethod (setf password) (new-password (user user))
  (setf (slot-value user 'password) (md5:md5sum-sequence new-password)))

(defun create-user (name password)
  (make-instance 'user
		 :username name
		 :password (md5:md5sum-sequence password)))

(defun find-user (name)
  (get-instance-by-value 'user 'username name))

(defun check-password (user-or-name password)
  (let ((user (typecase user-or-name
		(user user-or-name)
		(t (find-user user-or-name)))))
    (and user (equalp (md5:md5sum-sequence password) (password user)))))