[Split frontend and backend into separate applications clinton@unknownlamer.org**20080206190538 The frontend doesn't need to be a secure application and my application-authorize-call logic was broken ] { hunk ./src/config.lisp 3 -(defun make-golf-application () - (if *golf-app* - *golf-app* - (setf - *golf-app* - (make-instance 'golf-web:golf-application - :url-prefix "/" - :www-roots (list `("static/" - . ,(format nil "~A~A" - *golf-data-root* "wwwroot/"))) - - :javascript-log-level nil)))) - hunk ./src/config.lisp 29 -(defvar *golf-app* nil) - hunk ./src/entry-points.lisp 3 -(defun create-entry-points () - (defentry-point "^(index.ucw|)$" (:application *golf-app* +(defun create-frontend-entry-points () + (defentry-point "^(index.ucw|)$" (:application (get-golf-application :frontend) hunk ./src/entry-points.lisp 9 - (defentry-point "^(admin.ucw)$" (:application *golf-app* - :class regexp-dispatcher) - () - (call 'golf-admin-window)) - - (defentry-point "^(audio.ucw)$" (:application *golf-app* + (defentry-point "^(audio.ucw)$" (:application (get-golf-application :frontend) hunk ./src/entry-points.lisp 18 - (:application *golf-app* :class regexp-dispatcher) + (:application (get-golf-application :frontend) :class regexp-dispatcher) hunk ./src/entry-points.lisp 28 + +(defun create-backend-entry-points () + (defentry-point "^(admin.ucw|)$" (:application (get-golf-application :backend) + :class regexp-dispatcher) + () + (call 'golf-admin-window))) + +(defun create-entry-points () + (create-frontend-entry-points) + (create-backend-entry-points)) + hunk ./src/packages.lisp 20 - :*golf-app* ; maybe put into golf-app: package? This would allow - ; editing of config.lisp with fewer potential - ; conflicts. OTOH *golf-app* could simply be physically - ; placed in another file. - hunk ./src/packages.lisp 79 - :golf-application + :golf-admin-application + :golf-frontend-application hunk ./src/site-control.lisp 6 +(defvar *golf-applications* nil + "Admin and frontend application") + hunk ./src/site-control.lisp 12 +(defun golf-web::get-golf-application (name) + (ecase name + ((:frontend) (first *golf-applications*)) + ((:backend) (second *golf-applications*)))) + +(defun make-golf-applications () + (if *golf-applications* + *golf-applications* + (setf *golf-applications* + (list + (make-instance 'golf-web:golf-frontend-application + :url-prefix "/" + :www-roots + (list `("static/" + . ,(format nil "~A~A" + *golf-data-root* "wwwroot/"))) + :javascript-log-level nil) + (make-instance 'golf-web:golf-admin-application + :url-prefix "/admin/" + :www-roots + (list `("static/" + . ,(format nil "~A~A" + *golf-data-root* "wwwroot/"))) + :javascript-log-level nil))))) + hunk ./src/site-control.lisp 39 - (labels ((reaper () - (format *debug-io* "Reaping sessions... ~D~%" - (length (ucw::remove-expired-sessions *golf-app*))) - (format *debug-io* "Reaping files... ~D~%" - (length - (mapc (lambda (file) - (ignore-errors (delete-file file))) - (cl-fad:list-directory *file-upload-root*)))))) + (labels + ((reaper () + (mapc (lambda (app) + (format *debug-io* "Reaping sessions... ~D~%" + (length (ucw::remove-expired-sessions app)))) + *golf-applications*) + (format *debug-io* "Reaping files... ~D~%" + (length + (mapc (lambda (file) + (ignore-errors (delete-file file))) + (cl-fad:list-directory *file-upload-root*)))))) hunk ./src/site-control.lisp 63 - (make-golf-application) + (make-golf-applications) hunk ./src/site-control.lisp 70 - :applications (list *golf-app*) + :applications *golf-applications* hunk ./src/site-control.lisp 80 - (setf (javascript-log-level *golf-app*) nil) - + (mapc (lambda (app) (setf (javascript-log-level app) nil)) + *golf-applications*) hunk ./src/web.lisp 2 + +;; Application + +(defclass golf-admin-application (golf-application secure-application-mixin) + () + (:default-initargs + :insecure-components '(error-message) + :login-component 'golf-user-login-window)) + +(defmethod application-find-user ((app golf-admin-application) username) + (golf-auth::find-user username)) + +(defmethod application-check-password ((app golf-admin-application) user pass) + (golf-auth::check-password user pass)) + +(defcomponent golf-user-login (user-login) + ()) + +(defmethod render ((self golf-user-login)) + (<:p :class "username" "Username " (render (ucw::username self))) + (<:p :class "password" "Password " (render (ucw::password self))) + (