- Bridge Node Support: Added functionality to manage mail (send/receive) on remote nodes via a bridge node. Full transparent management requires a private key on the bridge, while the remote node can operate with only a public key.
- End-to-End Encryption (E2EE): Integrated E2EE using age. Encryption and decryption occur strictly at the bridge level; node administrators cannot access message content.
- New Addressing Schema: Transitioned from nodepub@yggmail to userpub@nodepub.
- Key Adaptation: Implemented ed25519 to x25519 coordinate adaptation, allowing signing keys to be used for encryption.
Changed
- Address Encoding: Switched from hex16 to base32 for the address space.
- Memory Optimization: Replaced direct memory allocations with streaming for mail processing to reduce RAM overhead.
- Code Refactoring: Performed decomposition of the original inherited codebase to improve maintainability.
Fixed
- Mail Updates: Fixed the mail retrieval mechanism to ensure near-instant updates for incoming messages.
Changes to be committed:
modified: .gitignore
modified: README.md
modified: cmd/yggmail/main.go
modified: go.mod
modified: go.sum
new file: internal/account/manager.go
new file: internal/account/session.go
modified: internal/imapserver/backend.go
modified: internal/imapserver/imap.go
modified: internal/imapserver/mailbox.go
modified: internal/imapserver/notify.go
modified: internal/imapserver/user.go
new file: internal/notify/notify.go
new file: internal/notify/remote/remote.go
new file: internal/remote/client.go
new file: internal/remote/handlers.go
new file: internal/remote/io.go
new file: internal/remote/server.go
new file: internal/remote/sign.go
new file: internal/remote/types/request.pb.go
new file: internal/remote/types/request.proto
new file: internal/remote/types/response.pb.go
new file: internal/remote/types/response.proto
new file: internal/shell/shell.go
modified: internal/smtpsender/sender.go
modified: internal/smtpserver/backend.go
modified: internal/smtpserver/session_local.go
modified: internal/smtpserver/session_remote.go
modified: internal/smtpserver/smtp.go
new file: internal/storage/filestore/filestore.go
new file: internal/storage/local/storage.go
new file: internal/storage/remote/mail.go
new file: internal/storage/remote/mailbox.go
new file: internal/storage/remote/queue.go
new file: internal/storage/remote/storage.go
new file: internal/storage/remote/watch.go
modified: internal/storage/sqlite3/sqlite3.go
new file: internal/storage/sqlite3/table_accounts.go
modified: internal/storage/sqlite3/table_mailboxes.go
modified: internal/storage/sqlite3/table_mails.go
modified: internal/storage/sqlite3/table_queue.go
modified: internal/storage/storage.go
modified: internal/storage/types/types.go
modified: internal/utils/address.go
new file: internal/utils/age/age.go
new file: internal/utils/age/bech32/bech32.go
new file: internal/utils/crypt.go
new file: internal/utils/e2ee/crypt.go
new file: internal/utils/e2ee/e2ee_test.go
new file: internal/utils/e2ee/msg.go
new file: internal/utils/x25519.go
modified: internal/welcome/welcome.go
* main
- Set
* Working
* Welcome
- Added welcome message generation
* Smtpsender
- On successful SMTP send create the "Sent" box and then
try move from "Outbox" to "Sent"
* Sent box
- Create the mailbox in `main.go` and not every time we try move from `Outbox` to `Sent`
* Use logegr
* USer
- Added logger pointer (and made use of it)
- Disallow renaming or deletion of 'Sent'
* When creating a new user set it up with logger
* Encoded message
* Added tests
* Send a welcome mail on startup (soon to mke it only happen once)
* try set flags
* Onboarding flag set
* Sender
- Removed testing code
* Welcome
- Moved welcomer code
* Cleaned up
* Added more
* renamed package
* Removed comment
* welcome
- FIxed variable names
* welcome
- Removed semi-colons
- Fixed imports
* welcome
- Ran `gofmt`
* welcome test
- Fixed up
* h
* main
- Ran `gofmt`
* Main
- Fxied
* Welcome
- Foxed name
* Added `.gitignore`
* Mailbox
- Disabled print logging
* Fixed
* fixedg
* fixe and use `%v`
* Update main.go
* Update main.go
* Set
* Set password to db
* Main
- Password hash, after trimming, cannot be empty
* Backend
- Assume incoming data is already a hash
* Main
- CLeaned up
* README
- Updated command-line argument documentation
* Menton this
* lower case
* SQLITE Driver
- Removed comments
* Main
- `passwordhash` only valiud when non-""
* Main
- Try running `Cost([]byte)` on the UTF-8 bytes to verify the hash