;;;; -*- lisp -*- (in-package :it.bese.ucw) (defvar *admin-application* (make-instance 'standard-application :url-prefix "/ucw/" :tal-generator (make-instance 'yaclml:file-system-generator :cachep t :root-directories (make-standard-ucw-tal-dir-list)) :dispatchers (append (make-standard-ucw-dispatchers) (list (make-url-dispatcher "index.ucw" (call 'admin-app))) (list (make-url-dispatcher "" (call 'admin-app)))))) (defcomponent admin-app (standard-window-component) ((body :initarg :body :accessor admin-app.body :component admin-login)) (:default-initargs :title "UCW Administration" :stylesheet "/admin/ucw/ucw.css")) (defmethod render-html-body ((app admin-app)) (<:h1 "UCW Administration.") (render (admin-app.body app)) (<:br) (<:A :href "index.ucw" "Back to admin entry.")) (defclass admin-login (login) () (:metaclass standard-component-class)) (defmethod check-credentials ((login admin-login)) (and (string= (login.username login) "admin") (string= (login.password login) "admin"))) (defmethod/cc login-successful ((self admin-login)) (let* ((control-panel (make-instance 'admin-control-panel)) (server-repl (make-instance 'admin-repl)) (applications-contents (mapcar (lambda (app) (cons (application.url-prefix app) (make-instance 'application-inspector :datum app))) (server.applications *default-server*))) (applications (make-instance 'tabbed-pane :contents applications-contents :current-component-key (caar applications-contents)))) (call 'tabbed-pane :contents (list (cons "Control Panel" control-panel) (cons "Server REPL" server-repl) (cons "Applications" applications)) :key-test #'string= :current-component-key "Control Panel"))) ;;;; Control Panel (defclass admin-control-panel () () (:metaclass standard-component-class)) (defmethod render ((c admin-control-panel)) (<:ul (<:li ("))) (restart-case (handler-bind ((error #'abort-print)) (princ-to-string (admin-repl.form-value repl))) (:return-condition () :report "Continue using NIL as the value." (abort-print nil)))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (c) 2003-2005 Edward Marco Baringer ;;; All rights reserved. ;;; ;;; Redistribution and use in source and binary forms, with or without ;;; modification, are permitted provided that the following conditions are ;;; met: ;;; ;;; - Redistributions of source code must retain the above copyright ;;; notice, this list of conditions and the following disclaimer. ;;; ;;; - Redistributions in binary form must reproduce the above copyright ;;; notice, this list of conditions and the following disclaimer in the ;;; documentation and/or other materials provided with the distribution. ;;; ;;; - Neither the name of Edward Marco Baringer, nor BESE, nor the names ;;; of its contributors may be used to endorse or promote products ;;; derived from this software without specific prior written permission. ;;; ;;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ;;; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ;;; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ;;; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ;;; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ;;; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ;;; LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ;;; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ;;; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ;;; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ;;; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.