pellest/src/login.ml

37 lines
1.1 KiB
OCaml
Raw Normal View History

2022-12-04 22:42:55 +01:00
open Tyxml.Html
open Tyx_util
2022-12-06 01:00:39 +01:00
open Syntax
2022-12-04 22:42:55 +01:00
2022-12-06 00:12:14 +01:00
let get request =
2022-12-06 01:00:39 +01:00
let** () = User.assert_not_logged request in
2022-12-06 00:12:14 +01:00
let title = "Pellest|Login" in
2022-12-04 22:42:55 +01:00
let login =
let submit = button ~a:[ a_id "submit_login" ] [ txt "submit" ] in
2022-12-07 00:10:41 +01:00
let login =
input ~a:[ a_id "login"; a_name "login"; a_input_type `Text ] ()
in
2022-12-06 01:00:39 +01:00
let password =
input ~a:[ a_id "password"; a_name "password"; a_input_type `Password ] ()
in
2022-12-04 22:42:55 +01:00
div
[ make_form request ~action:"/login" ~items:[ login; password; submit ] ]
in
let text = div [ txt "login ~!" ] in
let page = div [ text; login ] in
2022-12-06 00:12:14 +01:00
Template.render ~title ~scripts:[] page
let post request =
2022-12-06 01:00:39 +01:00
let** () = User.assert_not_logged request in
2022-12-06 00:12:14 +01:00
match%lwt Dream.form request with
| `Ok [ ("login", login); ("password", password) ] ->
let** () = User.login ~login ~password request in
let url =
match Dream.query request "redirect" with
| None -> "/"
| Some redirect -> Dream.from_percent_encoded redirect
in
Dream.respond ~status:`See_Other
~headers:[ ("Location", url) ]
"Logged in: Happy geo-posting!"
| _form -> Template.err (`Bad_Request, "invalid form")