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() }