wip: login redirect

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

View file

@ -7,12 +7,17 @@ let f request =
<div id="map"></div> <div id="map"></div>
<br /> <br />
<button class="btn btn-primary" id="geolocalize">Geolocalize me</button> <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> <a class="btn btn-primary" href="/new_thread">New Thread</a>
% end;
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<div id="thread_preview_div"></div> <div id="thread_preview_div"></div>
<a id="thread_link"></a> <a id="thread_link"></a>
</div> </div>
</div> </div>
% end;

View file

@ -1,14 +1,4 @@
let f ?nick ?password request = let f 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;
% | _ ->
<%s! Dream.form_tag ~action:"/login" request %> <%s! Dream.form_tag ~action:"/login" request %>
<div class="mb-3"> <div class="mb-3">
<label for="nick" class="form-label">Nick</label> <label for="nick" class="form-label">Nick</label>
@ -21,4 +11,3 @@ Logged in ! Happy planting XD
</div> </div>
<button type="submit" class="btn btn-primary">Submit</button> <button type="submit" class="btn btn-primary">Submit</button>
</form> </form>
% end;

View file

@ -1,7 +1,9 @@
let f request = let f request =
% begin match Dream.session "nick" request with % begin match Dream.session "nick" request with
% | None -> % | 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 -> % | Some _nick ->
<script type="text/javascript" src="/assets/js/js_newthread.js" defer="defer"></script> <script type="text/javascript" src="/assets/js/js_newthread.js" defer="defer"></script>
<h1>New thread</h1> <h1>New thread</h1>

View file

@ -42,15 +42,27 @@ let register_post request =
render_unsafe (Register.f ~nick ~email ~password request) request render_unsafe (Register.f ~nick ~email ~password request) request
| `Ok _ | `Many_tokens _ | `Missing_token _ | `Invalid_token _ | `Ok _ | `Many_tokens _ | `Missing_token _ | `Invalid_token _
| `Wrong_session _ | `Expired _ | `Wrong_content_type -> | `Wrong_session _ | `Expired _ | `Wrong_content_type ->
assert false Dream.empty `Bad_Request
let login_get request = render_unsafe (Login.f request) request let login_get request = render_unsafe (Login.f request) request
let login_post request = let login_post request =
match%lwt Dream.form request with match%lwt Dream.form request with
| `Ok [ ("nick", nick); ("password", password) ] -> | `Ok [ ("nick", nick); ("password", password) ] -> (
render_unsafe (Login.f ~nick ~password request) request match User.login ~nick ~password request with
| _ -> assert false | 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 = let user request =
render_unsafe (Result.fold ~ok:Fun.id ~error:Fun.id (User.list ())) 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 %> <%s! thread_view %>
% begin match Dream.session "nick" request with % begin match Dream.session "nick" request with
% | None -> % | 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 _ -> % | Some _ ->
<div class="post-form"> <div class="post-form">
<%s! Dream.form_tag ~action:( Format.sprintf "/thread/%s" thread_id) <%s! Dream.form_tag ~action:( Format.sprintf "/thread/%s" thread_id)