;; 公开反代和平台异常的统一错误页面。
(defmodule lamina_error_pages
(export all))
(defun internal (message)
(page 500 "Something went wrong" message))
(defun server-error (_req)
(internal "服务器内部错误,请稍后重试。"))
(defun service-unavailable (message)
(page 503 "Repository is starting" message))
(defun bad-gateway (message)
(page 502 "Repository unavailable" message))
(defun page (status title message)
(let* ((site (case (catch (lamina_site_mgr:all))
(value (if (is_map value) value #M(site_name "lamina")))
(_ #M(site_name "lamina"))))
(site-name (maps:get 'site_name site "lamina"))
(tagline (maps:get 'site_tagline site "Small teams. Open source. Built on Fossil."))
(body
(lists:flatten
(list
(lamina_ui:public-head (lists:flatten (list title " · " site-name)))
(lamina_ui:public-nav site-name)
(lamina_ui:public-tagline tagline)
"<main><p class=\"lede\">" (integer_to_list status) "</p><h1>"
(lamina_ui:escape title) "</h1><p class=\"lede\">"
(lamina_ui:escape message) "</p><p><a href=\"/\">Return to "
(lamina_ui:escape site-name) "</a></p></main>"
(lamina_ui:public-footer site)
"</div></body></html>"))))
`#(status ,status #M(#"content-type" #"text/html; charset=utf-8")
,(list_to_binary body))))