This is the main dovel repository, it has the Go code to run dovel SMTP server.
Author: bryon (git@mail.blmayer.dev)
Date: Tue Aug 15 16:09:05 2023 -0300
Parent: fd06d68
Fixed html listing
commit 63cc35b4d421b78407fc81777c713f4b85049d77
Author: bryon <git@mail.blmayer.dev>
Date: Tue Aug 15 16:09:05 2023 -0300
Fixed html listing
diff --git a/cmd/dovel/backend.go b/cmd/dovel/backend.go
index 421a6f2..862cbb5 100644
--- a/cmd/dovel/backend.go
+++ b/cmd/dovel/backend.go
@@ -11,7 +11,7 @@ import (
"net/textproto"
"strings"
- "blmayer.dev/x/vault"
+ "git.derelict.garden/bryon/vault"
"git.derelict.garden/dovel/email/model"
"git.derelict.garden/dovel/email/util/wkd"
commit 63cc35b4d421b78407fc81777c713f4b85049d77
Author: bryon <git@mail.blmayer.dev>
Date: Tue Aug 15 16:09:05 2023 -0300
Fixed html listing
diff --git a/go.mod b/go.mod
index 872c6a9..eba4c70 100644
--- a/go.mod
+++ b/go.mod
@@ -3,18 +3,20 @@ module git.derelict.garden/dovel/email
go 1.19
require (
+ blmayer.dev/x/vault v0.2.0
git.derelict.garden/bryon/vault v0.3.0
github.com/OfimaticSRL/parsemail v0.0.0-20230215211201-e1c318cd177f
+ github.com/ProtonMail/gopenpgp/v2 v2.7.1
github.com/emersion/go-msgauth v0.6.6
github.com/emersion/go-smtp v0.16.0
github.com/go-git/go-git/v5 v5.6.0
+ github.com/tv42/zbase32 v0.0.0-20220222190657-f76a9fc892fa
)
require (
github.com/Microsoft/go-winio v0.6.0 // indirect
github.com/ProtonMail/go-crypto v0.0.0-20230321155629-9a39f2531310 // indirect
github.com/ProtonMail/go-mime v0.0.0-20230322103455-7d82a3887f2f // indirect
- github.com/ProtonMail/gopenpgp/v2 v2.7.1 // indirect
github.com/acomagu/bufpipe v1.0.4 // indirect
github.com/cloudflare/circl v1.3.2 // indirect
github.com/emersion/go-sasl v0.0.0-20220912192320-0145f2c60ead // indirect
@@ -25,11 +27,9 @@ require (
github.com/pjbgf/sha1cd v0.3.0 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/sergi/go-diff v1.3.1 // indirect
- github.com/tv42/zbase32 v0.0.0-20220222190657-f76a9fc892fa // indirect
golang.org/x/crypto v0.7.0 // indirect
golang.org/x/net v0.8.0 // indirect
golang.org/x/sys v0.6.0 // indirect
golang.org/x/text v0.8.0 // indirect
- golang.org/x/tools v0.6.0 // indirect
gopkg.in/warnings.v0 v0.1.2 // indirect
)
commit 63cc35b4d421b78407fc81777c713f4b85049d77
Author: bryon <git@mail.blmayer.dev>
Date: Tue Aug 15 16:09:05 2023 -0300
Fixed html listing
diff --git a/go.sum b/go.sum
index ceb8cbf..e53c191 100644
--- a/go.sum
+++ b/go.sum
@@ -1,13 +1,13 @@
blmayer.dev/x/vault v0.2.0 h1:V7ZNHFIQ6GGlKvbM4is7W7/8eVwXLcFiPwREtt8gON8=
blmayer.dev/x/vault v0.2.0/go.mod h1:zjgWrvJh6sVZcZKx2dvypvLVEpEoeoyVuYrvRVl5afM=
+git.derelict.garden/bryon/vault v0.3.0 h1:dEYpd1pafEb1KXr0U6ZrXgHlKgmMnPeDUt6VVFsp26A=
+git.derelict.garden/bryon/vault v0.3.0/go.mod h1:Y1ph8MkV0iGhbIzxOvy1Bb2D+nWFrMSDn/WWV7ahdtg=
github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY=
github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg=
github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE=
github.com/OfimaticSRL/parsemail v0.0.0-20230215211201-e1c318cd177f h1:gna0qZzrWwiOizWzu4bwQzsnANcDpc2OvYeDcagGIAc=
github.com/OfimaticSRL/parsemail v0.0.0-20230215211201-e1c318cd177f/go.mod h1:MeyUFKQUXa5bD0bfy+wf3eMotz8NdY/VxXYOQkUuHFg=
github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8=
-github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 h1:wPbRQzjjwFc0ih8puEVAOFGELsn1zoIIYdxvML7mDxA=
-github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8/go.mod h1:I0gYDMZ6Z5GRU7l58bNFSkPTFN6Yl12dsUlAZ8xy98g=
github.com/ProtonMail/go-crypto v0.0.0-20230321155629-9a39f2531310 h1:dGAdTcqheKrQ/TW76sAcmO2IorwXplUw2inPkOzykbw=
github.com/ProtonMail/go-crypto v0.0.0-20230321155629-9a39f2531310/go.mod h1:8TI4H3IbrackdNgv+92dI+rhpCaLqM0IfpgCgenFvRE=
github.com/ProtonMail/go-mime v0.0.0-20230322103455-7d82a3887f2f h1:tCbYj7/299ekTTXpdwKYF8eBlsYsDVoggDAuAjoK66k=
@@ -109,7 +109,6 @@ golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A=
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI=
-golang.org/x/mod v0.7.0 h1:LapD9S96VoQRhi/GrNTqeBJFrUjs5UHCAtTlgwA5oZA=
golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -165,8 +164,7 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA=
-golang.org/x/tools v0.3.0 h1:SrNbZl6ECOS1qFzgTdQfWXZM9XBkiA6tkFrH9YSTPHM=
-golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k=
+golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
commit 63cc35b4d421b78407fc81777c713f4b85049d77
Author: bryon <git@mail.blmayer.dev>
Date: Tue Aug 15 16:09:05 2023 -0300
Fixed html listing
diff --git a/model/html/html.go b/model/html/html.go
index d145bab..0c24694 100644
--- a/model/html/html.go
+++ b/model/html/html.go
@@ -139,6 +139,7 @@ func (h HTMLHandler) Save(from, to string, r io.Reader) error {
}
htmlDir := path.Join(h.out, to, subj)
+ os.MkdirAll(htmlDir, os.ModeDir|0o700)
htmlName := fmt.Sprintf("%s:%s.html", from, date.Format(time.RFC3339))
file, err = os.Create(path.Join(htmlDir, htmlName))
if err != nil {
@@ -150,7 +151,6 @@ func (h HTMLHandler) Save(from, to string, r io.Reader) error {
}
file.Close()
- // TODO: Update index and lists
dir, err := os.ReadDir(path.Join(h.out))
if err != nil {
fmt.Println("readDir error:", err.Error())
@@ -198,7 +198,7 @@ func (h HTMLHandler) Save(from, to string, r io.Reader) error {
}
file.Close()
- dir, err = os.ReadDir(path.Join(h.out, subj))
+ dir, err = os.ReadDir(path.Join(h.out, to))
if err != nil {
fmt.Println("readDir error:", err.Error())
return err
@@ -235,7 +235,7 @@ func (h HTMLHandler) Save(from, to string, r io.Reader) error {
},
)
- file, err = os.Create(path.Join(h.out, subj, "index.html"))
+ file, err = os.Create(path.Join(h.out, to, "index.html"))
if err != nil {
return err
}
@@ -243,5 +243,48 @@ func (h HTMLHandler) Save(from, to string, r io.Reader) error {
if err != nil {
return err
}
+ file.Close()
+
+ dir, err = os.ReadDir(path.Join(h.out, to, subj))
+ if err != nil {
+ fmt.Println("read subj dir error:", err.Error())
+ return err
+ }
+
+ threads = []struct {
+ Title string
+ LastMod time.Time
+ }{}
+ for _, d := range dir {
+ info, err := d.Info()
+ if err != nil {
+ fmt.Println("dir info", err.Error())
+ continue
+ }
+ t := struct {
+ Title string
+ LastMod time.Time
+ }{
+ Title: d.Name(),
+ LastMod: info.ModTime(),
+ }
+
+ threads = append(threads, t)
+ }
+ sort.Slice(
+ threads,
+ func(i, j int) bool {
+ return threads[i].LastMod.Before(threads[j].LastMod)
+ },
+ )
+
+ file, err = os.Create(path.Join(h.out, to, subj, "index.html"))
+ if err != nil {
+ return err
+ }
+ err = h.mailsTpl.Execute(file, threads)
+ if err != nil {
+ return err
+ }
return file.Close()
}