(defmodule nemoptera_login
(export all))
(defun show (req)
(cond
((not (nemoptera_setup:installed?)) (nemoptera_http:redirect "/setup"))
((nemoptera_public:logged-in? req) (nemoptera_http:redirect "/admin"))
('true (nemoptera_http:html 200 (page "")))))
(defun save (req)
(if (nemoptera_setup:installed?)
(case (nemoptera_auth:login (nemoptera_http:param req "username")
(nemoptera_http:param req "password"))
(`#(ok ,value) (nemoptera_http:redirect-cookie req "/admin" value (nemoptera_auth:ttl-seconds)))
(`#(error ,message) (nemoptera_http:html 401 (page message))))
(nemoptera_http:redirect "/setup")))
(defun logout (req)
(nemoptera_http:redirect-cookie req "/" "" 0))
(defun page (message)
(nemoptera_ui:render "Login" 'login 'public 'false
(list "<h1 class=\"page\">Login</h1>"
"<p>Sign in to administer this site. Repository login stays inside each Fossil repository.</p>"
(if (=:= "" message) "" (list "<p class=\"error\">" (nemoptera_ui:escape message) "</p>"))
"<form method=\"post\" action=\"/login\">"
"<label for=\"username\">Username</label>"
"<input id=\"username\" name=\"username\" type=\"text\" autocomplete=\"username\" required>"
"<label for=\"password\">Password</label>"
"<input id=\"password\" name=\"password\" type=\"password\" autocomplete=\"current-password\" required>"
"<p class=\"actions\"><button type=\"submit\">Login</button></p>"
"</form>")))