# Development notes These are the development notes for the Go version. The idea is to use the help files to implement BULLETIN. ssh `authorized_keys` should look like this: ``` command="/home/bulletin/bin/bulletin -u alice",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty KEY-TYPE KEY ``` Have readline store a history file for the user. Configure at the `users.Open` step. Look up how godoc does references to other things. Look up how to run migrations on the db from embedded files. Figure out readline completion. Case sensitive - issue? Building from repl.commands? ## sqlite * sqlite trigger tracing: `.trace stdout --row --profile --stmt --expanded --plain --close` * https://sqlite.org/cli.html * https://www.sqlitetutorial.net/ ## Things to do * Run [godoc](http://localhost:6060/) and then review where the help text is lacking. * ~~Move to a storage layer.~~ * Implement each command. * Next: folder commands - ~~CREATE~~, ~~REMOVE~~, MODIFY, ~~INDEX~~, ~~SELECT~~ * Messages: ~~ADD~~, ~~CURRENT~~, ~~DIRECTORY~~, ~~BACK~~, CHANGE, ~~FIRST~~, ~~NEXT~~, ~~READ~~, ~~DELETE~~ * Messages edit: CHANGE, REPLY, FORWARD * Moving messages: COPY, MOVE * Compound commands: SET and SHOW - make HELP work for them. * Mail: MAIL, FORWARD, * Run this.Skew.Safe() before... each command? each write? * Handle broadcast messages - have bulletin watch a directory and display files from it. Then have them delete the file if it's older than 5 minutes (allow for failure) * Cleanup help output. * Remove the node/cluster/newsgroup/mailing-list related flags. * Remove BBOARD references. * format with `par w72j1` * Database * trigger to limit values for 'visibility'? * Add commands: * A way to add / delete ssh keys. * A way to manage files? * Commands for a local mail system? * Commands to connect to Mattermost or mastodon? * Commands to manage users. Done: * ~~Editor - need an embedded editor~~ Implemented using tview; good enough * An EDT inspired [editor](https://sourceforge.net/projects/edt-text-editor/) * [gkilo](https://github.com/vcnovaes/gkilo) * This [kilo editor](https://viewsourcecode.org/snaptoken/kilo/) tutorial * Using giu, a [text-editor](https://serge-hulne.medium.com/coding-a-simple-text-editor-in-go-using-giu-quick-and-dirty-b9b97ab41e4a) (needs cgo, no) * [bubbletea](https://github.com/charmbracelet/bubbletea) seems to be the tui that's winning * Another option is tview - [simpler](https://github.com/rivo/tview). * ~~Implement batch jobs~~ * ~~Have install populate the database with some test data.~~ * ~~reboot~~ * ~~expire~~ * ~~Add a pager~~ * ~~SHOW VERSION~~ * ~~Check db version; notify user if it changes; refuse to write to db if it has.~~ * ~~this.Folder should be a storage.Folder.~~ * ~~Add some of the early announcements from the sources - see the conversion branch - to the GENERAL folder.~~ ## Module links * cli - [docs](https://cli.urfave.org/v3/getting-started/) * readline - [docs](https://pkg.go.dev/github.com/chzyer/readline) * xdg - [docs](https://pkg.go.dev/github.com/adrg/xdg) * sqlite - [docs](https://modernc.org/sqlite)