|
- (in-package #:cl-user)
-
- (defpackage #:cl-deck-builder2.app
- (:use #:cl)
- (:import-from #:mito-attachment
- #:*storage*
- #:s3-storage
- #:disk-storage
- #:disk-storage-mount-path)
- (:import-from #:lack.builder
- #:builder)
- (:import-from #:ppcre
- #:scan)
- (:import-from #:cl-deck-builder2.web
- #:*web*
- #:make-chat-server)
- (:import-from #:cl-deck-builder2.config
- #:config
- #:productionp
- #:*public-directory*
- #:*static-directory*)
- (:import-from #:cl-deck-builder2.toolkit
- #:git-revision)
- (:documentation "The package the app file executes in. Passed to ~CLACK:CLACKUP~ function."))
-
- (in-package #:cl-deck-builder2.app)
-
- (defparameter *git-revision* (git-revision))
-
- (setf *storage*
- (if (productionp)
- ;; Store files in AWS S3 for production environment
- (make-instance 's3-storage
- :bucket "mito-attachment-example"
- :endpoint "s3-ap-northeast-1.amazonaws.com"
- :access-key (uiop:getenv "AWS_ACCESS_KEY")
- :secret-key (uiop:getenv "AWS_SECRET_KEY"))
- ;; Store files in local filesystem for development environment
- (make-instance 'disk-storage
- :bucket "mito-attachment-example"
- :directory (merge-pathnames "attachment" *public-directory*))))
-
- (builder
- (:static
- :path (lambda (path)
- (if (ppcre:scan "^(?:/img/|/css/|/js/|/webfonts/|/robot\\.txt$|/favicon\\.(ico|png)|/manifest\\.json$)" path)
- path
- nil))
- :root *static-directory*)
- (:static
- :path "/public/"
- :root *public-directory*)
- (if (productionp)
- nil
- :accesslog)
- (if (getf (config) :error-log)
- `(:backtrace
- :output ,(getf (config) :error-log))
- nil)
- :session
- :csrf
- (when (typep *storage* 'disk-storage)
- `(:mount ,(disk-storage-mount-path *storage*) ,*storage*))
- (:clack-errors :debug t)
- (if (productionp)
- nil
- (lambda (app)
- (lambda (env)
- (let ((datafly:*trace-sql* t))
- (setf (getf djula:*default-template-arguments* :git-revision) *git-revision*
- (getf djula:*default-template-arguments* :server-name) "phntsm.ddns.net")
- (funcall app env)))))
- (:mount "/label-maker" cl-deck-builder2.web.label-maker:*web*)
- (:mount "/tinymce" cl-deck-builder2.web.tinymce:*web*)
- (:mount "/chat-server" #'cl-deck-builder2.web.sse:make-chat-server)
- *web*)
|