Commit message (Collapse) | Author | Age | Files | Lines | ||
---|---|---|---|---|---|---|
... | ||||||
* | Add a default CSP | 2019-12-18 | 1 | -0/+7 | ||
| | | | | | Disallows loading external ressources. Providers can override it with their reverse proxy settings. | |||||
* | Implement paging for search | 2019-12-17 | 3 | -16/+30 | ||
| | ||||||
* | Document that plugins don't have access to passwords | 2019-12-17 | 1 | -0/+3 | ||
| | ||||||
* | Make Go plugin handlers take a *Context | 2019-12-17 | 2 | -38/+25 | ||
| | | | | | Take a *Context instead of a echo.Context. This saves a type assertion in each handler. | |||||
* | Add Context to Plugin.Inject | 2019-12-17 | 4 | -7/+7 | ||
| | | | | This allows to access the request metadata and the session from injectors. | |||||
* | Add RenderData interface | 2019-12-17 | 5 | -27/+57 | ||
| | | | | This allows Go plugins to easily inject global data. | |||||
* | Rename RenderData to BaseRenderData | 2019-12-17 | 2 | -12/+12 | ||
| | | | | RenderData will be used for an interface. | |||||
* | Allow Go Plugins to inject template data | 2019-12-17 | 1 | -0/+21 | ||
| | ||||||
* | Allow Lua plugins to inject all templates | 2019-12-17 | 2 | -2/+9 | ||
| | ||||||
* | Use Context.FormParams | 2019-12-17 | 1 | -2/+4 | ||
| | ||||||
* | Linkify address lists | 2019-12-17 | 3 | -12/+17 | ||
| | ||||||
* | Redirect / to INBOX | 2019-12-17 | 1 | -0/+4 | ||
| | ||||||
* | Add a form to set message flags | 2019-12-17 | 6 | -24/+133 | ||
| | | | | References: https://todo.sr.ht/~sircmpwn/koushin/36 | |||||
* | plugins/base: extract route registration into function | 2019-12-17 | 2 | -28/+30 | ||
| | ||||||
* | themes/sourcehut: use formatdate template func | 2019-12-17 | 1 | -2/+2 | ||
| | ||||||
* | Add envelope metadata to message view | 2019-12-17 | 3 | -11/+52 | ||
| | ||||||
* | Improve docs | 2019-12-17 | 3 | -8/+33 | ||
| | ||||||
* | Add button to delete message | 2019-12-16 | 3 | -0/+47 | ||
| | | | | | | Maybe we should add a confirmation step in the future. References: https://todo.sr.ht/~sircmpwn/koushin/36 | |||||
* | Add form to move messages | 2019-12-16 | 5 | -2/+59 | ||
| | | | | References: https://todo.sr.ht/~sircmpwn/koushin/36 | |||||
* | Update deps | 2019-12-16 | 2 | -33/+25 | ||
| | ||||||
* | Export IMAPMessage | 2019-12-16 | 2 | -16/+16 | ||
| | | | | This is a public type other plugins and templates may want to access. | |||||
* | Add attachments support to composer | 2019-12-16 | 3 | -9/+57 | ||
| | | | | Closes: https://todo.sr.ht/~sircmpwn/koushin/13 | |||||
* | go fmt | 2019-12-16 | 3 | -4/+4 | ||
| | ||||||
* | Use <label> in compose form | 2019-12-16 | 2 | -9/+12 | ||
| | ||||||
* | Add basic search | 2019-12-16 | 5 | -9/+74 | ||
| | | | | Closes: https://todo.sr.ht/~sircmpwn/koushin/23 | |||||
* | Add line break to login form | 2019-12-16 | 1 | -0/+1 | ||
| | ||||||
* | Replace Session.ConnectSMTP with Session.DoSMTP | 2019-12-16 | 2 | -16/+19 | ||
| | | | | | This gives more flexibility in Session for optimizations, e.g. keep the SMTP connection around for some time if possible. | |||||
* | Rename Session.Do to Session.DoIMAP | 2019-12-16 | 2 | -6/+6 | ||
| | ||||||
* | Remove the public/ directory | 2019-12-16 | 15 | -7/+18 | ||
| | | | | | 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. | |||||
* | Introduce base plugin | 2019-12-16 | 22 | -450/+521 | ||
| | | | | | | This plugin offers base IMAP/SMTP functionality. References: https://todo.sr.ht/~sircmpwn/koushin/39 | |||||
* | Add an API for Go plugins | 2019-12-16 | 3 | -1/+111 | ||
| | | | | References: https://todo.sr.ht/~sircmpwn/koushin/39 | |||||
* | gitignore: don't ignore sourcehut theme | 2019-12-12 | 1 | -2/+3 | ||
| | ||||||
* | Add simple Sourcehut-based theme | 2019-12-12 | 11 | -4/+5967 | ||
| | ||||||
* | Fix undefined ErrSessionExpired | 2019-12-12 | 2 | -2/+2 | ||
| | | | | Fixes: f07ab5263246 ("Add docs") | |||||
* | Add docs | 2019-12-11 | 4 | -4/+26 | ||
| | ||||||
* | Allow plugins to provide their own templates | 2019-12-11 | 4 | -8/+27 | ||
| | ||||||
* | readme: add godoc badge | 2019-12-11 | 1 | -0/+2 | ||
| | ||||||
* | Export Server.{Sessions,Plugins} | 2019-12-11 | 4 | -13/+12 | ||
| | | | | And unexport a few internal functions. | |||||
* | Unexport NewSessionManager | 2019-12-11 | 2 | -2/+2 | ||
| | | | | This isn't intended to be used by plugins. | |||||
* | Export Context.SetSession, unexport Session.Token | 2019-12-11 | 3 | -10/+10 | ||
| | | | | | | | 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. | |||||
* | Export Context | 2019-12-11 | 3 | -29/+34 | ||
| | | | | This allows plugins to access it. | |||||
* | Add plugins/ to .gitignore | 2019-12-10 | 1 | -0/+1 | ||
| | ||||||
* | go fmt | 2019-12-10 | 3 | -17/+17 | ||
| | ||||||
* | Introduce GlobalRenderData and RenderData | 2019-12-10 | 2 | -7/+40 | ||
| | | | | | | | | GlobalRenderData contains some global metadata that can be obtained from any template. RenderData is a base type for template data. It contains a Global field with global metadata and an Extra field for plugins. | |||||
* | Load all themes on startup | 2019-12-10 | 1 | -13/+54 | ||
| | | | | This is the first step to allow each user to have a different theme. | |||||
* | readme: add link to mailing list & issue tracker | 2019-12-10 | 1 | -0/+5 | ||
| | ||||||
* | Rename Plugin.Render to Plugin.Inject | 2019-12-10 | 3 | -3/+3 | ||
| | | | | | This function doesn't render anything, it just adds extra data to the template data. | |||||
* | Extract Lua plugin logic into separate file | 2019-12-10 | 2 | -151/+158 | ||
| | ||||||
* | Allow plugins to add new routes | 2019-12-10 | 3 | -0/+40 | ||
| | | | | References: https://todo.sr.ht/~sircmpwn/koushin/6 | |||||
* | Reconnect to IMAP server when logged out | 2019-12-09 | 3 | -20/+90 | ||
| | | | | | | | | | | | | | | | 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 |