pellest/src/login.ml
2022-12-07 18:15:47 +01:00

37 lines
1.1 KiB
OCaml

open Tyxml.Html
open Tyx_util
open Syntax
let get request =
let** () = User.assert_not_logged request in
let title = "Pellest|Login" in
let login =
let submit = button ~a:[ a_id "submit_login" ] [ txt "submit" ] in
let login =
input ~a:[ a_id "login"; a_name "login"; a_input_type `Text ] ()
in
let password =
input ~a:[ a_id "password"; a_name "password"; a_input_type `Password ] ()
in
div
[ make_form request ~action:"/login" ~items:[ login; password; submit ] ]
in
let text = div [ txt "login ~!" ] in
let page = div [ text; login ] in
Template.render ~title ~scripts:[] page
let post request =
let** () = User.assert_not_logged request in
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")