list

web

Repo with a simple http server with auth to serve my email.

curl -O https://dovel.email/web.tar tar

42330c7

Author: b (git@mail.blmayer.dev)

Date: Tue Aug 15 16:13:28 2023 -0300

Parent:

Added web file

Diff

Makefile

diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..2156535
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,13 @@
+.PHONY: deploy
+
+deploy: $(wildcard www/*.*)
+	scp $^ zero:inbox.dovel.email/
+
+deploy-web: $(wildcard cmd/web/*.go)
+	GOARCH=arm GOARM=6 go build $^
+	scp main zero:dovel-web
+	ssh zero "mv dovel-web .local/bin"
+
+deploy-certs: fullchain.pem privkey.pem
+	scp fullchain.pem zero:certs/inbox.dovel.email-fullchain.pem
+	scp privkey.pem zero:certs/inbox.dovel.email-privkey.pem

www/assets/apple-touch-icon.png

diff --git a/www/assets/apple-touch-icon.png b/www/assets/apple-touch-icon.png
new file mode 100644
index 0000000..13b9018
Binary files /dev/null and b/www/assets/apple-touch-icon.png differ

www/assets/favicon.ico

diff --git a/www/assets/favicon.ico b/www/assets/favicon.ico
new file mode 100644
index 0000000..2e1f8df
Binary files /dev/null and b/www/assets/favicon.ico differ

www/assets/icon.png

diff --git a/www/assets/icon.png b/www/assets/icon.png
new file mode 100644
index 0000000..2798922
Binary files /dev/null and b/www/assets/icon.png differ

www/assets/logo.png

diff --git a/www/assets/logo.png b/www/assets/logo.png
new file mode 100644
index 0000000..de112e2
Binary files /dev/null and b/www/assets/logo.png differ

www/assets/manifest.json

diff --git a/www/assets/manifest.json b/www/assets/manifest.json
new file mode 100644
index 0000000..59ade4c
--- /dev/null
+++ b/www/assets/manifest.json
@@ -0,0 +1,15 @@
+{
+	"short_name": "dovel",
+	"name": "Dovel",
+	"icons": [
+		{
+			"src": "/assets/icon.png",
+			"type": "image/png",
+			"purpose": "maskable",
+			"sizes": "512x512"
+		}
+	],
+	"start_url": "../index.html",
+	"background_color": "#FFF",
+	"display": "standalone"
+}

www/compose.html

diff --git a/www/compose.html b/www/compose.html
new file mode 100644
index 0000000..09bf97e
--- /dev/null
+++ b/www/compose.html
@@ -0,0 +1,50 @@
+<!DOCTYPE html>
+<html>
+	<head>
+{{template "head.html"}}
+	</head>
+	<body>
+<b>composing</b><br>
+<br>
+<form action=/out method=post enctype=multipart/form-data>
+	<table>
+		<tr>
+			<td style="padding-left: 0"><label for="from">From: </label></td>
+			<td><input style="width:100%" name=from {{if .Query.inbox}}value="{{.Query.Get "inbox" }}"{{end}}></td>
+		</tr>
+		<tr>
+			<td style="padding-left: 0"><label>To: </label></td>
+			<td><input style="width:100%" name=to {{if .Query.to}}value="{{.Query.Get "to"}}"{{end}}></td>
+		</tr>
+		<tr>
+			<td style="padding-left: 0"><label>CC: </label></td>
+			<td><input style="width:100%" name=cc></td>
+		</tr>
+		<tr>
+			<td style="padding-left: 0"><label>CCo: </label></td>
+			<td><input style="width:100%" name=cco></td>
+		</tr>
+		<tr>
+			<td style="padding-left: 0"><label>Subject: </label></td>
+			<td><input style="width:100%" name=subject {{if .Query.subj}}value="{{.Query.Get "subj"}}"{{end}}></td>
+		</tr>
+		<tr>
+			<td colspan=2><textarea style="width:100%" name=body rows="7" cols="50" placeholder="Body:"></textarea></td>
+		</tr>
+		<tr>
+			<td colspan=2><label>Attachments: </label><input type=file name=files multiple></td>
+		</tr>
+		<tr>
+			<td colspan=2>
+				<details>
+					<summary><label>Encrypt? </label><input name=encrypt type=checkbox></summary>
+					Override OpenPGP key (optional):<br>
+					<textarea style="width:100%" name=key rows="7" cols="50" placeholder="Begin OpenGPG key..."></textarea>
+				</details>
+			</td>
+		</tr>
+	</table>
+	<input type=submit value=send>
+</form>
+	</body>
+</html>

www/head.html

diff --git a/www/head.html b/www/head.html
new file mode 100644
index 0000000..9f1a941
--- /dev/null
+++ b/www/head.html
@@ -0,0 +1,6 @@
+<title>dovel</title>
+<link rel=icon href=/assets/favicon.ico>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<meta name="color-scheme" content="light dark"/>
+<style> body { max-width: 600px; padding: 0 15px; margin: 40px auto; font-family: sans-serif; } table { width: 100%; } a { color: #888 } small { float: right; } input, textarea { color: #888; font-family: monospace; } input { border: none; border-bottom: 1px solid #888; } input[type="submit"] { text-decoration: underline; cursor: pointer; color: #888; } pre { white-space: pre-wrap; } </style>
+

www/inboxes.html

diff --git a/www/inboxes.html b/www/inboxes.html
new file mode 100644
index 0000000..86065d4
--- /dev/null
+++ b/www/inboxes.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<title>dovel</title>
+	<link rel=icon href=/assets/favicon.ico>
+	<meta name="viewport" content="width=device-width, initial-scale=1"/>
+	<meta name="color-scheme" content="light dark"/>
+	<style> body { max-width: 600px; padding: 0 15px; margin: 40px auto; font-family: sans-serif; } table { width: 100%; } a { color: #888 } small { float: right; } input, textarea { color: #888; font-family: monospace; } input { border: none; border-bottom: 1px solid #888; } input[type="submit"] { text-decoration: underline; cursor: pointer; color: #888; } pre { white-space: pre-wrap; } </style>
+	<link rel="manifest" href="/assets/manifest.json">
+	<link rel="apple-touch-icon" sizes="200x200" href="/logo.png">
+</head>
+<body>
+
+<a href="index.html">index</a>&emsp;
+
+{{$format := "02 Jan 2006 15:04:05"}}
+{{range .}}
+<p>
+	<a href="{{.Title}}/index.html">{{.Title}}</a>
+	<small>{{.LastMod.Format $format}}</small>
+</p>
+{{end}}
+</body>
+</html>

www/index.html

diff --git a/www/index.html b/www/index.html
new file mode 100644
index 0000000..7165304
--- /dev/null
+++ b/www/index.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<title>dovel</title>
+	<link rel=icon href=/assets/favicon.ico>
+	<meta name="viewport" content="width=device-width, initial-scale=1"/>
+	<meta name="color-scheme" content="light dark"/>
+	<style> body { max-width: 600px; padding: 0 15px; margin: 40px auto; font-family: sans-serif; } table { width: 100%; } a { color: #888 } small { float: right; } input, textarea { color: #888; font-family: monospace; } input { border: none; border-bottom: 1px solid #888; } input[type="submit"] { text-decoration: underline; cursor: pointer; color: #888; } pre { white-space: pre-wrap; } </style>
+	<link rel="manifest" href="/assets/manifest.json">
+	<link rel="apple-touch-icon" sizes="200x200" href="/logo.png">
+</head>
+<body>
+	<center>
+<pre>
+_________                 ______
+______  /________   _________  /
+_  __  /_  __ \_ | / /  _ \_  / 
+/ /_/ / / /_/ /_ |/ //  __/  /  
+\__,_/  \____/_____/ \___//_/   
+
+</pre>
+	</center>
+<a href=compose.html>compose</a>&emsp;
+<a href=logout.html>logout</a>
+
+{{$format := "02 Jan 2006 15:04:05"}}
+{{range .}}
+<p>
+	<a href="{{.Title}}/index.html">{{.Title}}</a>
+	<small>{{.LastMod.Format $format}}</small>
+</p>
+{{end}}
+</body>
+</html>

www/mail.html

diff --git a/www/mail.html b/www/mail.html
new file mode 100644
index 0000000..82c794c
--- /dev/null
+++ b/www/mail.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<html>
+	<head>
+<title>dovel</title>
+<link rel=icon href=/assets/favicon.ico>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<meta name="color-scheme" content="light dark"/>
+<style> body { max-width: 600px; padding: 0 15px; margin: 40px auto; font-family: sans-serif; } table { width: 100%; } a { color: #888 } small { float: right; } input, textarea { color: #888; font-family: monospace; } input { border: none; border-bottom: 1px solid #888; } input[type="submit"] { text-decoration: underline; cursor: pointer; color: #888; } pre { white-space: pre-wrap; } </style>
+	</head>
+	<body>
+		<p>
+		<details>
+			<summary>
+				From: {{.From}}<br>
+				To: {{index .To 0}}<br>
+				Date: {{.Date.Format "Mon, 02 Jan 2006 15:04:05 MST"}}<br>
+				{{if .Cc}}Cc: .Cc{{end}}
+			</summary>
+			<ul>
+				{{range $k, $vs := .Headers}}
+				<li>{{$k}}: {{$vs}}</li>
+				{{end}}
+			</ul>
+		</details>
+		{{if .Attachments}}
+		Attachments:
+		<ul>
+			{{range .Attachments}}
+			<li>
+				<a href="data:{{.ContentType}};base64,{{.Data}}" download="{{.Name}}">{{.Name}}</a>
+			</li>
+			{{end}}
+		</ul>
+		{{end}}
+		{{if .Body}}
+		<pre>{{.Body}}</pre>
+		{{end}}
+		</p>
+	</body>
+</html>

www/mails.html

diff --git a/www/mails.html b/www/mails.html
new file mode 100644
index 0000000..2ad9d1f
--- /dev/null
+++ b/www/mails.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<title>dovel</title>
+	<link rel=icon href=/assets/favicon.ico>
+	<meta name="viewport" content="width=device-width, initial-scale=1"/>
+	<meta name="color-scheme" content="light dark"/>
+	<style> body { max-width: 600px; padding: 0 15px; margin: 40px auto; font-family: sans-serif; } table { width: 100%; } a { color: #888 } small { float: right; } input, textarea { color: #888; font-family: monospace; } input { border: none; border-bottom: 1px solid #888; } input[type="submit"] { text-decoration: underline; cursor: pointer; color: #888; } pre { white-space: pre-wrap; } </style>
+	<link rel="manifest" href="/assets/manifest.json">
+	<link rel="apple-touch-icon" sizes="200x200" href="/logo.png">
+</head>
+<body>
+
+<a href="/index.html">index</a>&emsp;
+
+{{$format := "02 Jan 2006 15:04:05"}}
+{{range .}}
+<p>
+	<a href="{{.Title}}">{{.Title}}</a>
+	<small>{{.LastMod.Format $format}}</small>
+</p>
+{{end}}
+</body>
+</html>

www/style.html

diff --git a/www/style.html b/www/style.html
new file mode 100644
index 0000000..e69de29