0
|
1 local Luan = require "luan:Luan.luan"
|
|
2 local error = Luan.error
|
|
3 local Io = require "luan:Io.luan"
|
|
4 local output_of = Io.output_of or error()
|
|
5 local Http = require "luan:http/Http.luan"
|
|
6 local Mail = require "luan:mail/Mail.luan"
|
|
7 local Shared = require "site:/lib/Shared.luan"
|
|
8 local head = Shared.head or error()
|
|
9 local header = Shared.header or error()
|
|
10 local config = Shared.config or error()
|
|
11 local new_password = Shared.new_password or error()
|
|
12 local get_raw_config = Shared.get_raw_config or error()
|
|
13 local save_raw_config = Shared.save_raw_config or error()
|
|
14
|
|
15
|
|
16 local send_mail = Mail.sender{
|
|
17 host = "smtpcorp.com"
|
|
18 username = "smtp@luan.software"
|
|
19 password = "luanhost"
|
|
20 port = 2525
|
|
21 }.send
|
|
22
|
|
23 local function handle(email)
|
|
24 local change = Http.request.parameters.change ~= nil
|
|
25 local password = config.users[email]
|
|
26 if password == nil or change then
|
|
27 password = new_password()
|
|
28 local raw_config = get_raw_config()
|
|
29 raw_config.users[email] = password
|
|
30 save_raw_config(raw_config)
|
|
31 end
|
|
32 local function body()
|
|
33 %>
|
|
34 Your password is "<%=password%>".
|
|
35 <%
|
|
36 end_function
|
|
37 send_mail{
|
|
38 From = "Mercurial Hosting <hg@reactionary.software>"
|
|
39 To = email
|
|
40 Subject = "Your Password"
|
|
41 body = output_of(body)
|
|
42 }
|
|
43 return nil
|
|
44 end
|
|
45
|
|
46 local function response(content)
|
|
47 %>
|
|
48 <!doctype html>
|
|
49 <html>
|
|
50 <head>
|
|
51 <% head() %>
|
|
52 <title>Mercurial - Get Password</title>
|
|
53 </head>
|
|
54 <body>
|
|
55 <% header() %>
|
|
56 <div content>
|
|
57 <h1>Get Password</h1>
|
|
58 <%=content%>
|
|
59 </div>
|
|
60 </body>
|
|
61 </html>
|
|
62 <%
|
|
63 end
|
|
64
|
|
65 return function()
|
|
66 Io.stdout = Http.response.text_writer()
|
|
67 local email = Http.request.parameters.email
|
|
68 if email ~= nil then
|
|
69 local error_msg = handle(email)
|
|
70 if error_msg == nil then
|
|
71 response([[<p>Your password has been emailed to <b>]]..email..[[</b>. Use your email and password for authentication.</p>]])
|
|
72 else
|
|
73 response([[<p error>]]..error_msg..[[</p>]])
|
|
74 end
|
|
75 return
|
|
76 end
|
|
77 %>
|
|
78 <!doctype html>
|
|
79 <html>
|
|
80 <head>
|
|
81 <% head() %>
|
|
82 <title>Mercurial - Get Password</title>
|
|
83 </head>
|
|
84 <body>
|
|
85 <% header() %>
|
|
86 <div content>
|
|
87 <h1>Get Password</h1>
|
|
88
|
|
89 <p>This site uses authentication for access. For authentication, your email address is your user name, and your password will be emailed to you.</p>
|
|
90
|
|
91 <p>This page is used to register, to get your password if you forgot it, or to change your password.</p>
|
|
92
|
|
93 <hr>
|
|
94 <form>
|
|
95 <p>
|
|
96 <label prompt>Your email address</label>
|
|
97 <input type=email name=email required>
|
|
98 <label prompt clickable><input type=checkbox name=change> change password</label>
|
|
99 </p>
|
|
100 <p>
|
|
101 <input type=submit value="Get Password">
|
|
102 </p>
|
|
103 </form>
|
|
104 </div>
|
|
105 </body>
|
|
106 </html>
|
|
107 <%
|
|
108 end
|