Merge branch 'main' into glenneth/cl-streamer-standalone

This commit is contained in:
Glenn Thompson 2026-04-07 09:14:44 +01:00
commit 9042e78ae8
2 changed files with 51 additions and 8 deletions

View File

@ -1055,8 +1055,11 @@
;; Serve regular static file ;; Serve regular static file
(t (t
(serve-file (merge-pathnames (format nil "static/~a" path) (let ((file-path (merge-pathnames (format nil "static/~a" path)
(asdf:system-source-directory :asteroid)))))) (asdf:system-source-directory :asteroid))))
(if (probe-file file-path)
(serve-file file-path)
(error 'radiance:request-not-found))))))
;; Status check functions ;; Status check functions
(defun check-stream-status () (defun check-stream-status ()
@ -1491,14 +1494,30 @@
;; RADIANCE server management functions ;; RADIANCE server management functions
(defun start-server (&key (port *server-port*)) (defun start-server (&key (port *server-port*))
"Start the Asteroid Radio RADIANCE server" "Start the Asteroid Radio RADIANCE server.
Reads ASTEROID_DEBUG from the environment to control Radiance's debugger policy:
nil (or unset) - never invoke debugger (production default)
if-swank-connected - invoke only when Swank/Slynk is connected
t - always invoke debugger"
(format t "Starting Asteroid Radio RADIANCE server on port ~a~%" port) (format t "Starting Asteroid Radio RADIANCE server on port ~a~%" port)
(compile-styles) ; Generate CSS file using LASS (compile-styles) ; Generate CSS file using LASS
;; Ensure RADIANCE environment is properly set before startup ;; Set debugger policy from environment to prevent stray conditions from
;; (unless (radiance:environment) ;; accumulating debugger sessions (e.g. vulnerability scanners hitting bogus paths)
;; (setf (radiance:environment) "asteroid")) (let ((debug-env (uiop:getenv "ASTEROID_DEBUG")))
(setf radiance:*debugger*
(cond
((or (null debug-env)
(string-equal debug-env "nil")
(string-equal debug-env ""))
nil)
((string-equal debug-env "t")
t)
((string-equal debug-env "if-swank-connected")
:if-swank-connected)
(t nil)))
(format t "Debugger policy: ~a~%" radiance:*debugger*))
(radiance:startup) (radiance:startup)
;; Start listener statistics polling ;; Start listener statistics polling

View File

@ -202,3 +202,27 @@
(error 'authorization-error (error 'authorization-error
:message message :message message
:required-role required-role)) :required-role required-role))
;;; Override Radiance's default render-error-page to return proper HTTP
;;; status codes instead of a blanket 500 for conditions like
;;; request-not-found and file-to-serve-does-not-exist. This prevents
;;; vulnerability scanners from generating misleading 500 responses and
;;; gives us control over error presentation.
(defun radiance:render-error-page (condition)
(cond
((typep condition 'radiance:request-not-found)
(setf (radiance:return-code radiance:*response*) 404)
(setf (radiance:content-type radiance:*response*) "text/plain")
"Not Found")
((typep condition 'radiance:file-to-serve-does-not-exist)
(setf (radiance:return-code radiance:*response*) 404)
(setf (radiance:content-type radiance:*response*) "text/plain")
"Not Found")
((typep condition 'radiance:request-denied)
(setf (radiance:return-code radiance:*response*) 403)
(setf (radiance:content-type radiance:*response*) "text/plain")
"Forbidden")
(t
(setf (radiance:return-code radiance:*response*) 500)
(setf (radiance:content-type radiance:*response*) "text/plain")
"Internal Server Error")))