;;;; 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)))