cl-scopes/lib/auth/web.lisp

41 lines
1.4 KiB
Common Lisp

;;;; cl-scopes/lib/auth/web - authentication web interface
(defpackage :scopes-auth/web
(:use :common-lisp)
(:local-nicknames (:actor :scopes/core/actor)
(:auth :scopes-auth)
(:config :scopes/config)
(:core :scopes/core)
(:frontend :scopes/frontend)
(:jwt :scopes/web/jwt)
(:message :scopes/core/message)
(:server :scopes/web/server)
(:shape :scopes/shape)
(:util :scopes/util))
(:export #:login #:login-form))
(in-package :scopes-auth/web)
;;;; set up login form for interactive (browser) login
(defun login-form (ctx msg-in)
(let ((msg (message:create '(:auth :form :login)
:data (list
;:fields (:login :password)
:fields (login-fields)
:button "Login"))))
(actor:send (actor:customer msg-in) msg)
))
(defun login-fields ()
(list (frontend:field :login "User Name" :attrs '(:autofocus t))
(frontend:field :password "Password" :type :password)))
;;;; browser login: check credentials / auth token / external auth
(defun login (ctx msg)
(let* ((prc (auth:login (shape:data msg))))
;(jwt:create ...)
;(server:set-cookie ctx ...)
;(core:echo ctx ...) ; render htmx response
(core:echo ctx msg)))