cl-deck-builder2/src/web/setup.lisp
2024-03-05 22:11:33 -05:00

36 lines
1.3 KiB
Common Lisp

(in-package #:cl-deck-builder2.web)
;;
;; Application
(defclass <web> (<app>) ())
(defvar *web* (make-instance '<web>))
(clear-routing-rules *web*)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Aha,, figured it out. Hermetic Setup!
(setup
;; str->bool, t if a username exists, nil otherwise
:user-p (lambda (str)
(ignore-errors
(find-dao 'user :email str)))
;; str->str, maps a username to a password (hash, hopefully)
:user-pass (lambda (arg)
(ignore-errors
(mito-auth:password-hash
(find-dao 'user :email arg))))
;; str->(list sym), maps a username to a list of roles,
;; for example: (:user) (:user :tester :staff) (:user :admin)
:user-roles (lambda (arg)
(ignore-errors
(mapcar #'name-of
(user-roles-of
(find-dao 'user :email arg)))))
;; the /expression/ for the session object. ningle:*session* on
;; Ningle <https://github.com/fukamachi/ningle>.
:session caveman2:*session*
;; A function that displays an "access denied" message
:denied (lambda (&optional params)
(declare (ignore params))
(cl-markup:html5 (:h1 "Generic auth denied page"))))