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 ]