Commit graph

47 commits

Author SHA1 Message Date
Simon Ser b014c1898f
Close Lua plugins on reload 2020-01-10 17:00:34 +01:00
Simon Ser ad1d2ee7f4
Implement plugin/template reload on SIGUSR1
There's no way around having a global mutex, because we need to update
the HTTP routes when reloading plugins. During reload we need to lock
the whole server.

Closes: https://todo.sr.ht/~sircmpwn/koushin/43
2020-01-08 11:50:29 +01:00
Simon Ser 97b314b6e7
Add Server.Reload
This only reloads templates for now. In the future it'll also reload
Lua plugins.
2020-01-08 10:52:28 +01:00
Simon Ser f6758264b2
Make New return the Server
This will be useful to implement hot reload.
2020-01-08 10:38:33 +01:00
Simon Ser 3d2da43207
Add a default CSP
Disallows loading external ressources. Providers can override it with
their reverse proxy settings.
2019-12-18 12:03:56 +01:00
Simon Ser e93346ffa9
Remove the public/ directory
Now that all templates are provided by plugins, there's no need to have
a public/ directory. Themes can be in /themes instead of /public/themes.
2019-12-16 12:58:21 +01:00
Simon Ser d897eeee5c
Introduce base plugin
This plugin offers base IMAP/SMTP functionality.

References: https://todo.sr.ht/~sircmpwn/koushin/39
2019-12-16 12:52:44 +01:00
Simon Ser e83844fbad
Add an API for Go plugins
References: https://todo.sr.ht/~sircmpwn/koushin/39
2019-12-16 12:26:26 +01:00
Simon Ser b24cc85fb1
Fix undefined ErrSessionExpired
Fixes: f07ab52632 ("Add docs")
2019-12-12 16:40:52 +01:00
Simon Ser f07ab52632
Add docs 2019-12-11 15:24:39 +01:00
Simon Ser e54a359acb
Export Server.{Sessions,Plugins}
And unexport a few internal functions.
2019-12-11 13:03:31 +01:00
Simon Ser 28a8f3f6ac
Unexport NewSessionManager
This isn't intended to be used by plugins.
2019-12-11 12:56:59 +01:00
Simon Ser 86359156ee
Export Context.SetSession, unexport Session.Token
I'm uneasy exposing the token to plugins, I prefer to hide it if
possible to prevent mis-use.

This change allows plugins to logout users.
2019-12-11 12:54:03 +01:00
Simon Ser d8f411176f
Export Context
This allows plugins to access it.
2019-12-11 12:48:20 +01:00
Simon Ser a9a607b9b2
Allow plugins to add new routes
References: https://todo.sr.ht/~sircmpwn/koushin/6
2019-12-10 16:00:53 +01:00
Simon Ser c5afd1a61b
Reconnect to IMAP server when logged out
The session manager has been upgraded to deal with reconnections.

Each session has its own expiration timer. Each time a request is
received, the expiration timer is reset.

A session can be closed (this is used when the user wants to logout).

When the IMAP connection is closed by the server, it's set to nil in the
session. The next time an IMAP command needs to be issued, the
connection is re-established.

Closes: https://todo.sr.ht/~sircmpwn/koushin/30
2019-12-09 19:35:15 +01:00
Simon Ser 7702925497
Make SessionManager create the IMAP client
This will allow SessionManager to re-connect when the IMAP server logs
the user out.
2019-12-09 18:35:51 +01:00
Simon Ser efd401bfbf
Rename ConnPool to SessionManager 2019-12-09 18:16:31 +01:00
Simon Ser 76599232dc
Add a Lua API to set template filters 2019-12-09 17:54:24 +01:00
Simon Ser 4f74722c14
Add basic support for plugins 2019-12-09 16:05:40 +01:00
Simon Ser d1d4380957
Extract HTTP handlers in separate file 2019-12-04 20:55:08 +01:00
Simon Ser e94b1311de
Add basic theme support
References: https://todo.sr.ht/~sircmpwn/koushin/1
2019-12-04 18:30:01 +01:00
Simon Ser 4ab5fb7f65
Make message view's Back link set the mailbox page
This allows to go back and forth between the mailbox view and the
message view.

References: https://todo.sr.ht/~sircmpwn/koushin/22
2019-12-03 20:06:43 +01:00
Simon Ser 8de93c50d2
Add basic pagination to message list
References: https://todo.sr.ht/~sircmpwn/koushin/22
2019-12-03 19:49:04 +01:00
Simon Ser 6344806755
Fix missing OutgoingMessage.InReplyTo assignment 2019-12-03 18:54:04 +01:00
Simon Ser e90d4579ae
Add basic support for multiple recipients 2019-12-03 18:46:18 +01:00
Simon Ser a103309935
Add support for replying to a message 2019-12-03 18:41:23 +01:00
Simon Ser b7be271560
Add empty CSS stylesheet
References: https://todo.sr.ht/~sircmpwn/koushin/19
2019-12-03 17:42:33 +01:00
Simon Ser a4729060be
Escape mailbox names in URLs
Closes: https://todo.sr.ht/~sircmpwn/koushin/14
2019-12-03 17:31:53 +01:00
Simon Ser 48d6d5d227
Add session lock
HTTP requests can be processed in parallel, but we only have one IMAP
connection per session.

Closes: https://todo.sr.ht/~sircmpwn/koushin/12
2019-12-03 17:18:17 +01:00
Simon Ser 36923a0dc2
Pre-fill composer with sender address 2019-12-03 16:46:03 +01:00
Simon Ser 89cebfd819
Add basic SMTP support 2019-12-03 16:27:49 +01:00
Simon Ser 702719c072
Save username/password in session
This is required for authenticating with the SMTP server when composing
a new message.
2019-12-03 15:44:24 +01:00
Simon Ser ae79f99876
Parse SMTP URL from CLI 2019-12-03 15:21:59 +01:00
Simon Ser 96646c8324
Add context to errors 2019-12-03 14:48:11 +01:00
Simon Ser 9f6b086f62
Add compose view 2019-12-03 14:34:15 +01:00
Simon Ser f4808eb4c5
Add logout route 2019-12-03 13:24:46 +01:00
Simon Ser 23e3e85251
Set HTTP error handler 2019-12-03 13:17:51 +01:00
Simon Ser be14524c33
Display & download any message part 2019-12-03 13:07:25 +01:00
Simon Ser 33b8679f1c
Extract string conversion functions 2019-12-03 11:54:43 +01:00
Simon Ser 4cbe2fde9d
go fmt 2019-12-03 11:12:26 +01:00
Simon Ser 25c63d0530
Add basic message view 2019-12-02 19:53:09 +01:00
Simon Ser 39629b0740
Add basic message list 2019-12-02 18:21:45 +01:00
Simon Ser e9d31b0940
Extract IMAP functions into separate file 2019-12-02 17:58:19 +01:00
Simon Ser 640bd49731
List mailboxes 2019-12-02 17:31:34 +01:00
Simon Ser 8b84d81f9b
Add initial login logic 2019-12-02 17:24:19 +01:00
Simon Ser a1a067e6de
Add HTTP server boilerplate 2019-12-02 15:31:00 +01:00