comparison src/login.js.luan @ 117:e2deb5236f26

better login
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 04 Dec 2025 21:43:47 -0700
parents src/manual_login.js.luan@1aa50739475a
children
comparison
equal deleted inserted replaced
116:98b2dc732ca0 117:e2deb5236f26
1 local Luan = require "luan:Luan.luan" 1 local Luan = require "luan:Luan.luan"
2 local error = Luan.error 2 local error = Luan.error
3 local ipairs = Luan.ipairs or error()
4 local Html = require "luan:Html.luan"
5 local url_encode = Html.url_encode or error()
6 local Io = require "luan:Io.luan" 3 local Io = require "luan:Io.luan"
7 local Http = require "luan:http/Http.luan" 4 local Http = require "luan:http/Http.luan"
5 local User = require "site:/lib/User.luan"
8 local Shared = require "site:/lib/Shared.luan" 6 local Shared = require "site:/lib/Shared.luan"
9 local send_mail_async = Shared.send_mail_async or error() 7 local add_with = Shared.add_with or error()
10 local Utils = require "site:/lib/Utils.luan"
11 local to_list = Utils.to_list or error()
12 local User = require "site:/lib/User.luan"
13 8
14 9
15 return function() 10 return function()
16 local email = Http.request.parameters.email or error() 11 local email = Http.request.parameters.email or error()
17 local user = User.get_or_create_by_email(email) 12 local password = Http.request.parameters.password or error()
18 local url = user.login_url() 13 Io.stdout = Http.response.text_writer()
14 local user = User.get_by_email(email)
15 if user==nil or user.password ~= password then
16 %>
17 document.querySelector('[failed]').textContent = 'Login failed';
18 <%
19 return
20 end
21 user.login()
22 local spy = Http.request.parameters.spy ~= nil
23 if spy then
24 Http.response.set_cookie("spy","yes")
25 else
26 Http.response.remove_cookie("spy")
27 end
19 local with = Http.request.parameters.with 28 local with = Http.request.parameters.with
20 with = to_list(with) 29 local location
21 for _, email in ipairs(with) do 30 if with == nil then
22 url = url.."&with="..url_encode(email) 31 location = "/"
32 else
33 location = add_with("/chat")
23 end 34 end
24 send_mail_async {
25 To = email
26 Subject = "Login"
27 body = `%>
28 Here is the link to login:
29
30 <%= url %>
31
32 Or login with your email and the password: <%=user.password%>
33 <% `
34 }
35 Io.stdout = Http.response.text_writer()
36 %> 35 %>
37 location = '/login_sent.html'; 36 location = '<%=location%>';
38 <% 37 <%
39 end 38 end