2018-03-05 12:19:04 +00:00
|
|
|
# Crockery design
|
|
|
|
|
2018-03-05 22:29:31 +00:00
|
|
|
## Overview
|
|
|
|
|
2018-03-05 12:19:04 +00:00
|
|
|
We need:
|
|
|
|
|
|
|
|
* SMTP server
|
|
|
|
* Receive emails -> middlewares -> storage
|
|
|
|
* https://github.com/emersion/go-smtp ?
|
|
|
|
* IMAP server
|
|
|
|
* Receive logins
|
|
|
|
* HTTP server
|
|
|
|
* Serve autodiscovery bumpf
|
|
|
|
* ActiveSync protocol
|
|
|
|
* Storage
|
|
|
|
* Accounts
|
|
|
|
* Passwords!
|
|
|
|
* Emails
|
|
|
|
* TLS keys + certificates
|
|
|
|
* Search emails - some sort of inverted index necessary
|
|
|
|
* https://github.com/blevesearch/bleve ?
|
|
|
|
* Embedded database best. Ideally we have a single file to work with
|
2018-03-05 22:29:31 +00:00
|
|
|
* https://github.com/coreos/bbolt
|
|
|
|
* https://github.com/asdine/storm
|
|
|
|
|
|
|
|
## Database structure
|
|
|
|
|
|
|
|
```
|
|
|
|
config/
|
|
|
|
domain: "example.com"
|
|
|
|
domains/
|
|
|
|
example.com/
|
|
|
|
accounts/
|
|
|
|
foo@example.com/
|
|
|
|
config/
|
|
|
|
emails/
|
|
|
|
config/
|
|
|
|
key: []byte(...)
|
|
|
|
cert: []byte(...)
|
|
|
|
```
|