changeset 4:a17e400ddaa1

add email
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 21 Jun 2022 11:58:27 -0600
parents fc3ee39d7764
children 2f20b11affdd
files src/lib/Mail.luan src/lib/Shared.luan src/login.html.luan src/private/admin.html.luan src/private/admin/config.html.luan src/private/admin/mail_config.html.luan
diffstat 6 files changed, 183 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/lib/Mail.luan	Tue Jun 21 11:58:27 2022 -0600
@@ -0,0 +1,38 @@
+local Luan = require "luan:Luan.luan"
+local error = Luan.error
+local parse = Luan.parse or error()
+local Luan_mail = require "luan:mail/Mail.luan"
+local Db = require "site:/lib/Db.luan"
+
+
+local Mail = {}
+
+function Mail.get()
+	local doc = Db.get_document("type:mail")
+	return doc and doc.config
+end
+
+function Mail.sender()
+	local text = Mail.get()
+	if text == nil then
+		return nil
+	end
+	local info = parse(text)
+	return Luan_mail.sender(info)
+end
+
+function Mail.set(text)
+	if text == nil then
+		Db.delete("type:mail")
+	else
+		do  -- test
+			local info = parse(text)
+			Luan_mail.sender(info)
+		end
+		local doc = Db.get_document("type:mail") or {type="mail"}
+		doc.config = text
+		Db.save(doc)
+	end
+end
+
+return Mail
--- a/src/lib/Shared.luan	Sun Jun 19 20:47:31 2022 -0600
+++ b/src/lib/Shared.luan	Tue Jun 21 11:58:27 2022 -0600
@@ -41,6 +41,14 @@
 <%
 end
 
+function Shared.admin_header()
+%>
+		<div header>
+			<a href="/private/admin.html">Admin</a>
+		</div>
+<%
+end
+
 function Shared.base_url()
 	return Http.request.scheme.."://"..Http.request.headers["host"]
 end
--- a/src/login.html.luan	Sun Jun 19 20:47:31 2022 -0600
+++ b/src/login.html.luan	Tue Jun 21 11:58:27 2022 -0600
@@ -5,6 +5,7 @@
 local Html = require "luan:Html.luan"
 local url_encode = Html.url_encode or error()
 local Io = require "luan:Io.luan"
+local output_of = Io.output_of or error()
 local Http = require "luan:http/Http.luan"
 local Shared = require "site:/lib/Shared.luan"
 local head = Shared.head or error()
@@ -14,6 +15,7 @@
 local Forum = require "site:/lib/Forum.luan"
 local forum_title = Forum.title or error()
 local User = require "site:/lib/User.luan"
+local Mail = require "site:/lib/Mail.luan"
 local Db = require "site:/lib/Db.luan"
 local run_in_transaction = Db.run_in_transaction or error()
 
@@ -85,10 +87,20 @@
 		end)
 	elseif password == nil then
 		local user = User.get_or_create_by_email(email)
+		local mailer = Mail.sender() or error "mail not configured"
+		mailer.send{
+			From = forum_title.." <support@freedit.org>"
+			To = user.email
+			Subject = "Login"
+			body = output_of(function() %>
+Login or register by clicking this link:
+
+<%=base_url()%>/login.html?email=<%=url_encode(email)%>&password=<%=user.password%>
+<%			end)
+		}
 		page(function()
 %>
 			<p>We have sent you an email.  Please check your email to login or register.</p>
-			<p>hack - <a href="<%=base_url()%>/login.html?email=<%=url_encode(email)%>&password=<%=user.password%>">link</a></p>
 <%
 		end)
 	elseif name == nil then
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/private/admin.html.luan	Tue Jun 21 11:58:27 2022 -0600
@@ -0,0 +1,33 @@
+local Luan = require "luan:Luan.luan"
+local error = Luan.error
+local Io = require "luan:Io.luan"
+local Http = require "luan:http/Http.luan"
+local Shared = require "site:/lib/Shared.luan"
+local head = Shared.head or error()
+local header = Shared.admin_header or error()
+
+
+return function()
+	Io.stdout = Http.response.text_writer()
+%>
+<!doctype html>
+<html>
+	<head>
+<%		head() %>
+		<title>Admin</title>
+	</head>
+	<body>
+<%		header() %>
+		<div content>
+			<h1>Admin</h1>
+			<p><a href="/">Home</a></p>
+			<p><a href="admin/config.html">Configure Forum</a></p>
+			<p><a href="admin/mail_config.html">Configure Mail</a></p>
+
+			<h2>Tools</h2>
+			<p><a href="tools/lucene.html">lucene</a></p>
+		</div>
+	</body>
+</html>
+<%
+end
--- a/src/private/admin/config.html.luan	Sun Jun 19 20:47:31 2022 -0600
+++ b/src/private/admin/config.html.luan	Tue Jun 21 11:58:27 2022 -0600
@@ -10,12 +10,16 @@
 local test_as_init = Http.test_as_init or error()
 local Run = require "luan:http/tools/Run.luan"
 local Config = require "site:/lib/Config.luan"
+local Shared = require "site:/lib/Shared.luan"
+local head = Shared.head or error()
+local header = Shared.admin_header or error()
 local Logging = require "luan:logging/Logging.luan"
-local logger = Logging.logger "admin/Config.html"
+local logger = Logging.logger "admin/config.html"
 
 
 return function()
 	Io.stdout = Http.response.text_writer()
+	local updated = false
 	if Http.request.method == "POST" then
 		local config = Http.request.parameters.config or error()
 		try
@@ -26,17 +30,15 @@
 		end
 		Config.set(config)
 		reset_luan()
-		%>Updated<%
-		return
+		updated = true
 	end
 %>
 <!doctype html>
 <html>
 	<head>
+<%		head() %>
 		<title>FreedIt - Configure Forum</title>
 		<style>
-			@import "/site.css";
-
 			textarea {
 				width: 90%;
 				height: 20em;
@@ -49,16 +51,22 @@
 		</script>
 	</head>
 	<body>
-		<h1>Configure Forum</h1>
-
-		<form method=post>
-			<p>
-				Configuration in <a href="http://www.luan.software/">Luan</a>
-				- <a href="javascript:restoreDefault()">restore default</a>
-			</p>
-			<p><textarea name=config autofocus><%= html_encode(Config.text) %></textarea></p>
-			<p><input type=submit><p>
-		</form>
+<%		header() %>
+		<div content>
+			<h1>Configure Forum</h1>
+<%	if updated then %>
+			<p>Updated</p>
+<%	else %>
+			<form method=post>
+				<p>
+					Configuration in <a href="http://www.luan.software/">Luan</a>
+					- <a href="javascript:restoreDefault()">restore default</a>
+				</p>
+				<p><textarea name=config autofocus><%= html_encode(Config.text) %></textarea></p>
+				<p><input type=submit><p>
+			</form>
+<%	end %>
+		</div>
 	</body>
 </html>
 <%
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/private/admin/mail_config.html.luan	Tue Jun 21 11:58:27 2022 -0600
@@ -0,0 +1,68 @@
+local Luan = require "luan:Luan.luan"
+local error = Luan.error
+local stringify = Luan.stringify or error()
+local String = require "luan:String.luan"
+local trim = String.trim or error()
+local Html = require "luan:Html.luan"
+local html_encode = Html.encode or error()
+local Parsers = require "luan:Parsers.luan"
+local json_string = Parsers.json_string or error()
+local Io = require "luan:Io.luan"
+local Http = require "luan:http/Http.luan"
+local Mail = require "site:/lib/Mail.luan"
+local Shared = require "site:/lib/Shared.luan"
+local head = Shared.head or error()
+local header = Shared.admin_header or error()
+local Logging = require "luan:logging/Logging.luan"
+local logger = Logging.logger "admin/mail_config.html"
+
+--[[
+local default = stringify{
+	host = "smtpcorp.com"
+	username = "xxx"
+	password = "xxx"
+	port = 2525
+}
+]]
+
+return function()
+	Io.stdout = Http.response.text_writer()
+	local updated = false
+	if Http.request.method == "POST" then
+		local config = Http.request.parameters.config or error()
+		if trim(config) == "" then
+			config = nil
+		end
+		Mail.set(config)
+		updated = true
+	end
+%>
+<!doctype html>
+<html>
+	<head>
+<%		head() %>
+		<title>FreedIt - Configure Mail</title>
+		<style>
+			textarea {
+				width: 20em;
+				height: 10em;
+			}
+		</style>
+	</head>
+	<body>
+<%		header() %>
+		<div content>
+			<h1>Configure Mail</h1>
+<%	if updated then %>
+			<p>Updated</p>
+<%	else %>
+			<form method=post>
+				<p><textarea name=config autofocus><%= html_encode(Mail.get() or "") %></textarea></p>
+				<p><input type=submit><p>
+			</form>
+<%	end %>
+		</div>
+	</body>
+</html>
+<%
+end