wip: login redirect

This commit is contained in:
Swrup 2022-02-20 18:02:25 +01:00
parent e279acf8db
commit b21671b56a
5 changed files with 41 additions and 32 deletions

View file

@ -7,12 +7,17 @@ let f request =
<div id="map"></div>
<br />
<button class="btn btn-primary" id="geolocalize">Geolocalize me</button>
% if Option.is_some @@ Dream.session "nick" request then begin
% begin match Dream.session "nick" request with
% | None ->
% let redirect = Dream.to_percent_encoded "/new_thread" in
% ()
<a class="btn btn-primary" href="/login?redirect=<%s redirect%>">New Thread</a>
% | Some _ ->
<a class="btn btn-primary" href="/new_thread">New Thread</a>
% end;
</div>
<div class="col-md-6">
<div id="thread_preview_div"></div>
<a id="thread_link"></a>
</div>
</div>
% end;

View file

@ -1,14 +1,4 @@
let f ?nick ?password request =
% begin match nick, password with
% | Some nick, Some password ->
% begin match User.login ~nick ~password request with
% | Error e ->
Error: <%s e %>
% | Ok () ->
Logged in ! Happy planting XD
% end;
% | _ ->
let f request =
<%s! Dream.form_tag ~action:"/login" request %>
<div class="mb-3">
<label for="nick" class="form-label">Nick</label>
@ -21,4 +11,3 @@ Logged in ! Happy planting XD
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
% end;

View file

@ -1,7 +1,9 @@
let f request =
% begin match Dream.session "nick" request with
% | None ->
<a href="/login">Login</a> to make a new thread.
% let redirect = Dream.to_percent_encoded "/new_thread" in
% Format.printf "%s@." redirect;
<a href="/login?redirect=<%s redirect%>">Login</a> to make a new thread.
% | Some _nick ->
<script type="text/javascript" src="/assets/js/js_newthread.js" defer="defer"></script>
<h1>New thread</h1>

View file

@ -42,15 +42,27 @@ let register_post request =
render_unsafe (Register.f ~nick ~email ~password request) request
| `Ok _ | `Many_tokens _ | `Missing_token _ | `Invalid_token _
| `Wrong_session _ | `Expired _ | `Wrong_content_type ->
assert false
Dream.empty `Bad_Request
let login_get request = render_unsafe (Login.f request) request
let login_post request =
match%lwt Dream.form request with
| `Ok [ ("nick", nick); ("password", password) ] ->
render_unsafe (Login.f ~nick ~password request) request
| _ -> assert false
| `Ok [ ("nick", nick); ("password", password) ] -> (
match User.login ~nick ~password request with
| Error e -> render_unsafe e request
| Ok () ->
let url =
match Dream.query request "redirect" with
| None -> "/jpp"
| Some redirect -> Dream.from_percent_encoded redirect
in
Dream.respond ~status:`See_Other
~headers:[ ("Location", url) ]
"Logged in: Happy geo-posting!" )
| `Ok _ | `Many_tokens _ | `Missing_token _ | `Invalid_token _
| `Wrong_session _ | `Expired _ | `Wrong_content_type ->
Dream.empty `Bad_Request
let user request =
render_unsafe (Result.fold ~ok:Fun.id ~error:Fun.id (User.list ())) request

View file

@ -3,7 +3,8 @@ let f thread_view thread_id request =
<%s! thread_view %>
% begin match Dream.session "nick" request with
% | None ->
% let redirect = Dream.to_percent_encoded (Format.sprintf "redirect=/thread/%s" thread_id) in
<a href="/login?<%s redirect%>">Login to reply!</a>
% | Some _ ->
<div class="post-form">
<%s! Dream.form_tag ~action:( Format.sprintf "/thread/%s" thread_id)