Deuxfleurs patches for alps webmail (from https://sr.ht/~migadu/alps/)
Find a file
Simon Ser e6e457e4a7
Fix dangling goroutine on session expiration
The timer channel may already have been drained by `case <-timer.C`. In
this case, we need not to drain it again or we'll block forever.

To fix this, stop draining the timer channel. Since we're not going to
use the timer again anyway, it should be fine.
2020-01-20 15:25:46 +01:00
cmd/koushin Generalize upstream server URLs 2020-01-20 12:00:04 +01:00
plugins/base Include flags when fetching items over IMAP 2020-01-16 13:34:10 +01:00
themes themes/sourcehut: add search input to mailbox view 2019-12-25 19:34:24 +01:00
.gitignore Introduce base plugin 2019-12-16 12:52:44 +01:00
discover.go Auto-discover upstream SMTP and IMAP servers 2020-01-20 13:08:05 +01:00
go.mod Add a form to set message flags 2019-12-17 12:42:04 +01:00
go.sum Add a form to set message flags 2019-12-17 12:42:04 +01:00
imap.go Introduce base plugin 2019-12-16 12:52:44 +01:00
LICENSE Correct license ownership 2019-12-03 07:48:25 -05:00
plugin.go Add Context to Plugin.Inject 2019-12-17 15:14:36 +01:00
plugin_go.go Make Go plugin handlers take a *Context 2019-12-17 15:19:37 +01:00
plugin_lua.go Add Context to Plugin.Inject 2019-12-17 15:14:36 +01:00
README.md Auto-discover upstream SMTP and IMAP servers 2020-01-20 13:08:05 +01:00
server.go go fmt 2020-01-20 13:22:18 +01:00
session.go Fix dangling goroutine on session expiration 2020-01-20 15:25:46 +01:00
smtp.go Introduce base plugin 2019-12-16 12:52:44 +01:00
template.go go fmt 2020-01-20 13:22:18 +01:00

koushin

GoDoc

Usage

Assuming SRV DNS records are properly set up (see RFC 6186):

go run example.org

To manually specify upstream servers:

go run ./cmd/koushin imaps://mail.example.org:993 smtps://mail.example.org:465

See -h for more information.

Themes

They should be put in themes/<name>/.

Templates in themes/<name>/*.html override default templates in plugins. Assets in themes/<name>/assets/* are served by the HTTP server at /themes/<name>/assets/*.

Plugins

Plugins can be written in Go or in Lua and live in plugins/<name>/.

Plugins can provide their own templates in plugins/<name>/public/*.html. Assets in plugins/<name>/public/assets/* are served by the HTTP server at /plugins/<name>/assets/*.

Go plugins

They can use the Go plugin helpers and need to be included at compile-time in cmd/koushin/main.go.

Lua plugins

The entry point is at plugins/<name>/main.lua.

API:

  • koushin.on_render(name, f): prior to rendering the template name, call f with the template data (the special name * matches all templates)
  • koushin.set_filter(name, f): set a template function
  • koushin.set_route(method, path, f): register a new HTTP route, f will be called with the HTTP context

Hot reload

Lua plugins and templates can be reloaded by sending SIGUSR1 to koushin.

killall -USR1 koushin

Contributing

Send patches on the mailing list, report bugs on the issue tracker.

License

MIT