list

server

This is the main dovel repository, it has the Go code to run dovel SMTP server.

curl https://dovel.email/server.tar tar

afdd85f

Author: blmayer (bleemayer@gmail.com)

Date: Sun May 14 02:30:50 2023 -0300

Parent: 524ef2d

Improved move and delete

Diff

cmd/dovel/main.go

commit afdd85f38b30257e27cd6c5045b6e8e72c05bc9c
Author: blmayer <bleemayer@gmail.com>
Date:   Sun May 14 02:30:50 2023 -0300

    Improved move and delete

diff --git a/cmd/dovel/main.go b/cmd/dovel/main.go
index b1b963c..7cbf1ca 100644
--- a/cmd/dovel/main.go
+++ b/cmd/dovel/main.go
@@ -86,6 +86,7 @@ func main() {
 				}
 				http.HandleFunc(hand.Domain+"/", web.indexHandler())
 				http.HandleFunc(hand.Domain+"/move", web.moveHandler)
+				http.HandleFunc(hand.Domain+"/delete", web.deleteHandler)
 				http.HandleFunc(hand.Domain+"/assets/", web.assetsHandler())
 				http.HandleFunc(hand.Domain+"/out", web.sendHandler())
 			}

cmd/dovel/vault.go

commit afdd85f38b30257e27cd6c5045b6e8e72c05bc9c
Author: blmayer <bleemayer@gmail.com>
Date:   Sun May 14 02:30:50 2023 -0300

    Improved move and delete

diff --git a/cmd/dovel/vault.go b/cmd/dovel/vault.go
index b680ca4..fc9483b 100644
--- a/cmd/dovel/vault.go
+++ b/cmd/dovel/vault.go
@@ -11,6 +11,7 @@ type plainTextUser struct {
 	Name     string
 	Mail     string
 	Password string
+	Config   any
 }
 
 func (u plainTextUser) Email() string {
@@ -25,6 +26,10 @@ func (u plainTextUser) Pass() string {
 	return u.Password
 }
 
+func (u plainTextUser) Settings() any {
+	return u.Config
+}
+
 type plainTextVault struct {
 	Users []plainTextUser
 }

cmd/dovel/web.go

commit afdd85f38b30257e27cd6c5045b6e8e72c05bc9c
Author: blmayer <bleemayer@gmail.com>
Date:   Sun May 14 02:30:50 2023 -0300

    Improved move and delete

diff --git a/cmd/dovel/web.go b/cmd/dovel/web.go
index 117321d..57d261a 100644
--- a/cmd/dovel/web.go
+++ b/cmd/dovel/web.go
@@ -36,9 +36,11 @@ func (h webHandler) indexHandler() http.HandlerFunc {
 			struct {
 				Query  url.Values
 				Mailer interfaces.Mailer
+				User   interfaces.User
 			}{
 				r.URL.Query(),
 				h.mailer,
+				h.vault.GetUser(user),
 			},
 		)
 		if err != nil {
@@ -62,8 +64,29 @@ func (h webHandler) moveHandler(w http.ResponseWriter, r *http.Request) {
 		return
 	}
 
-	err := h.mailer.Move(id, to)
-	if id == "" || to == "" {
+	if err := h.mailer.Move(id, to); err != nil {
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
+
+	http.Redirect(w, r, "/", http.StatusFound)
+}
+
+func (h webHandler) deleteHandler(w http.ResponseWriter, r *http.Request) {
+	user, pass, _ := r.BasicAuth()
+	if user == "" || !h.vault.Validate(user, pass) {
+		w.Header().Add("WWW-Authenticate", "Basic")
+		http.Error(w, "wrong auth", http.StatusUnauthorized)
+		return
+	}
+
+	id := r.URL.Query().Get("id")
+	if id == "" {
+		http.Error(w, "empty id", http.StatusBadRequest)
+		return
+	}
+
+	if err := h.mailer.Delete(id); err != nil {
 		http.Error(w, err.Error(), http.StatusInternalServerError)
 		return
 	}

index.html

commit afdd85f38b30257e27cd6c5045b6e8e72c05bc9c
Author: blmayer <bleemayer@gmail.com>
Date:   Sun May 14 02:30:50 2023 -0300

    Improved move and delete

diff --git a/index.html b/index.html
index fcb8293..98e0ae8 100644
--- a/index.html
+++ b/index.html
@@ -92,9 +92,9 @@ _  __  /_  __ \_ | / /  _ \_  /
 	<ul>
 		<li><s>Support DKIM.</s></li>
 		<li><s>Multiple inboxes.</s></li>
+		<li><s>Support moving and deleting email on web.</s></li>
 		<li>PGP support.</li>
 		<li>Multiple users.</li>
-		<li>Support moving and deleting email on web.</li>
 		<li>Implement mailing lists behaviour.</li>
 	</ul>
 

interfaces/main.go

commit afdd85f38b30257e27cd6c5045b6e8e72c05bc9c
Author: blmayer <bleemayer@gmail.com>
Date:   Sun May 14 02:30:50 2023 -0300

    Improved move and delete

diff --git a/interfaces/main.go b/interfaces/main.go
index 8d8a066..3b58c3d 100644
--- a/interfaces/main.go
+++ b/interfaces/main.go
@@ -19,6 +19,7 @@ type User interface {
 	Email() string
 	Login() string
 	Pass() string
+	Settings() any
 }
 
 type Vault interface {

www/mails.html

commit afdd85f38b30257e27cd6c5045b6e8e72c05bc9c
Author: blmayer <bleemayer@gmail.com>
Date:   Sun May 14 02:30:50 2023 -0300

    Improved move and delete

diff --git a/www/mails.html b/www/mails.html
index 08d419d..b457664 100644
--- a/www/mails.html
+++ b/www/mails.html
@@ -41,7 +41,19 @@
 	<pre>{{.Body}}</pre>
 	{{end}}
 	<a href="compose.html?inbox={{$.Query.Get "inbox"}}&subj={{.Subject}}&to={{.From}}">reply</a>
-	<a href="delete.html?id={{.ID}}">delete</a>
+	<form action=delete>
+		<input type=hidden name=id value="{{.ID}}">
+		<input type=submit value=delete>
+	</form>
+	<details>
+		<summary>move</summary>
+		<form action=/move>
+			<input name=to type=select list=folders><br>
+			<datalist id=folders>
+			</datalist>
+			<input type=submit value=move>
+		<form>
+	</details>
 </p>
 {{end}}
 	</body>