53 lines
1.6 KiB
OCaml
53 lines
1.6 KiB
OCaml
|
|
open Util
|
||
|
|
|
||
|
|
let home_get request = Home.f request |> Dream.html
|
||
|
|
|
||
|
|
let register_get request = Register.f request |> Dream.html
|
||
|
|
|
||
|
|
let login_get request = Login.f request |> Dream.html
|
||
|
|
|
||
|
|
let login_post request =
|
||
|
|
match%lwt Dream.form request with
|
||
|
|
| `Ok [ ("login", login); ("password", password) ] -> (
|
||
|
|
match User.login ~login ~password request with
|
||
|
|
| Error e -> render e
|
||
|
|
| Ok () ->
|
||
|
|
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 -> handle_invalid_form form
|
||
|
|
|
||
|
|
let register_post request =
|
||
|
|
match%lwt Dream.form request with
|
||
|
|
| `Ok [ ("email", email); ("nick", nick); ("password", password) ] -> (
|
||
|
|
match User.register ~email ~nick ~password with
|
||
|
|
| Error e -> render e
|
||
|
|
| Ok () ->
|
||
|
|
let res =
|
||
|
|
Result.fold ~error:Fun.id
|
||
|
|
~ok:(fun _ -> "User created ! Welcome !")
|
||
|
|
(User.login ~login:nick ~password request)
|
||
|
|
in
|
||
|
|
render res )
|
||
|
|
| form -> Util.handle_invalid_form form
|
||
|
|
|
||
|
|
let () =
|
||
|
|
let logger = if App.log then Dream.logger else Fun.id in
|
||
|
|
Dream.run ~port:App.port
|
||
|
|
~error_handler:(Dream.error_template Util.error_template)
|
||
|
|
@@ logger @@ Dream.memory_sessions
|
||
|
|
@@ Dream.router
|
||
|
|
Dream.
|
||
|
|
[ get "/assets/**" (Dream.static ~loader:Util.asset_loader "")
|
||
|
|
; get "/" home_get
|
||
|
|
; get "/login" login_get
|
||
|
|
; post "/login" login_post
|
||
|
|
; get "/register" register_get
|
||
|
|
; post "/register" register_post
|
||
|
|
]
|