feat: move routes to use rate-limit macros
This commit is contained in:
parent
8ae905a2c1
commit
6499c0a9ab
|
|
@ -1128,7 +1128,7 @@
|
|||
|#
|
||||
|
||||
;; Auth status API endpoint
|
||||
(define-api asteroid/auth-status () ()
|
||||
(define-api-with-limit asteroid/auth-status () ()
|
||||
"Check if user is logged in and their role"
|
||||
(with-error-handling
|
||||
(let* ((user-id (session:field "user-id"))
|
||||
|
|
@ -1199,7 +1199,7 @@
|
|||
artists)))))))
|
||||
|
||||
;; Register page (GET)
|
||||
(define-page register #@"/register" ()
|
||||
(define-page-with-limit register #@"/register" ()
|
||||
"User registration page"
|
||||
(let ((username (radiance:post-var "username"))
|
||||
(email (radiance:post-var "email"))
|
||||
|
|
@ -1257,7 +1257,7 @@
|
|||
:error-message ""
|
||||
:success-message ""))))
|
||||
|
||||
(define-page player #@"/player" ()
|
||||
(define-page-with-limit player #@"/player" (:limit-group "public")
|
||||
(clip:process-to-string
|
||||
(load-template "player")
|
||||
:title "Asteroid Radio - Web Player"
|
||||
|
|
@ -1270,7 +1270,7 @@
|
|||
:player-status "Stopped"))
|
||||
|
||||
;; Player content frame (for frameset mode)
|
||||
(define-page player-content #@"/player-content" ()
|
||||
(define-page-with-limit player-content #@"/player-content" (:limit-group "public")
|
||||
"Player page content (displayed in content frame)"
|
||||
(clip:process-to-string
|
||||
(load-template "player-content")
|
||||
|
|
@ -1279,7 +1279,7 @@
|
|||
:default-stream-url (format nil "~a/asteroid.aac" *stream-base-url*)
|
||||
:default-stream-encoding "audio/aac"))
|
||||
|
||||
(define-page popout-player #@"/popout-player" ()
|
||||
(define-page-with-limit popout-player #@"/popout-player" (:limit-group "public")
|
||||
"Pop-out player window"
|
||||
(clip:process-to-string
|
||||
(load-template "popout-player")
|
||||
|
|
@ -1289,27 +1289,27 @@
|
|||
:default-stream-encoding "audio/aac"))
|
||||
|
||||
;; About page (non-frameset mode)
|
||||
(define-page about-page #@"/about" ()
|
||||
(define-page-with-limit about-page #@"/about" (:limit-group "public")
|
||||
"About Asteroid Radio"
|
||||
(clip:process-to-string
|
||||
(load-template "about")
|
||||
:title "About - Asteroid Radio"))
|
||||
|
||||
;; About content (for frameset mode)
|
||||
(define-page about-content #@"/about-content" ()
|
||||
(define-page-with-limit about-content #@"/about-content" (:limit-group "public")
|
||||
"About page content (displayed in content frame)"
|
||||
(clip:process-to-string
|
||||
(load-template "about-content")
|
||||
:title "About - Asteroid Radio"))
|
||||
|
||||
;; Status content (for frameset mode)
|
||||
(define-page status-content #@"/status-content" ()
|
||||
(define-page-with-limit status-content #@"/status-content" (:limit-group "public")
|
||||
"Status page content (displayed in content frame)"
|
||||
(clip:process-to-string
|
||||
(load-template "status-content")
|
||||
:title "Status - Asteroid Radio"))
|
||||
|
||||
(define-api asteroid/status () ()
|
||||
(define-api-with-limit asteroid/status () ()
|
||||
"Get server status"
|
||||
(api-output `(("status" . "running")
|
||||
("server" . "asteroid-radio")
|
||||
|
|
@ -1323,7 +1323,7 @@
|
|||
("stream-status" . "live"))))
|
||||
|
||||
;; Live stream status from Icecast
|
||||
(define-api asteroid/icecast-status () ()
|
||||
(define-api-with-limit asteroid/icecast-status () ()
|
||||
"Get live status from Icecast server"
|
||||
(with-error-handling
|
||||
(let* ((icecast-url (format nil "~a/admin/stats.xml" *stream-base-url*))
|
||||
|
|
@ -1360,12 +1360,13 @@
|
|||
|
||||
;;; Listener Statistics API Endpoints
|
||||
|
||||
(define-api asteroid/stats/current () ()
|
||||
(define-api-with-limit asteroid/stats/current () ()
|
||||
"Get current listener count from recent snapshots"
|
||||
(with-error-handling
|
||||
(let ((listeners (get-current-listeners)))
|
||||
(api-output `(("status" . "success")
|
||||
("listeners" . ,listeners)
|
||||
("timestamp" . ,(get-universal-time))))))
|
||||
("timestamp" . ,(get-universal-time)))))))
|
||||
|
||||
(define-api asteroid/stats/daily (&optional (days "30")) ()
|
||||
"Get daily listener statistics (admin only)"
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
(in-package :asteroid)
|
||||
|
||||
;; Login page (GET)
|
||||
(define-page login #@"/login" ()
|
||||
(define-page-with-limit login #@"/login" ()
|
||||
"User login page"
|
||||
(let ((username (radiance:post-var "username"))
|
||||
(password (radiance:post-var "password")))
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@
|
|||
(:listeners . ,total-listeners)
|
||||
(:track-id . ,(find-track-by-title title))))))))
|
||||
|
||||
(define-api asteroid/partial/now-playing (&optional mount) ()
|
||||
(define-api-with-limit asteroid/partial/now-playing (&optional mount) ()
|
||||
"Get Partial HTML with live status from Icecast server.
|
||||
Optional MOUNT parameter specifies which stream to get metadata from.
|
||||
Always polls both streams to keep recently played lists updated."
|
||||
|
|
@ -105,7 +105,7 @@
|
|||
:connection-error t
|
||||
:stats nil))))))
|
||||
|
||||
(define-api asteroid/partial/now-playing-inline (&optional mount) ()
|
||||
(define-api-with-limit asteroid/partial/now-playing-inline (&optional mount) ()
|
||||
"Get inline text with now playing info (for admin dashboard and widgets).
|
||||
Optional MOUNT parameter specifies which stream to get metadata from."
|
||||
(with-error-handling
|
||||
|
|
@ -119,7 +119,7 @@
|
|||
(setf (header "Content-Type") "text/plain")
|
||||
"Stream Offline")))))
|
||||
|
||||
(define-api asteroid/partial/now-playing-json (&optional mount) ()
|
||||
(define-api-with-limit asteroid/partial/now-playing-json (&optional mount) (:limit 2 :timeout 1)
|
||||
"Get JSON with now playing info including track ID for favorites.
|
||||
Optional MOUNT parameter specifies which stream to get metadata from."
|
||||
(with-error-handling
|
||||
|
|
@ -137,7 +137,7 @@
|
|||
("title" . "Stream Offline")
|
||||
("track_id" . nil)))))))
|
||||
|
||||
(define-api asteroid/channel-name () ()
|
||||
(define-api-with-limit asteroid/channel-name () (:limit 2 :timeout 1)
|
||||
"Get the current curated channel name for live updates.
|
||||
Returns JSON with the channel name from the current playlist's PHASE header."
|
||||
(with-error-handling
|
||||
|
|
|
|||
Loading…
Reference in New Issue