diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..74cbefc --- /dev/null +++ b/TODO.md @@ -0,0 +1,227 @@ +# Weechat Matrix Scrip + +# TODO +- [O] Handle disconnects seamlessly + - [X] Handle send errors + - [X] Handle receive errors + - [X] Handle the disconnect properly + - [X] Reconnect if there is stuff to do and we're disconnected + - [X] Message queue timer. +- [O] Server buffer + - [X] Create server buffer + - [X] Merge with the core buffer if configured to do so + - [ ] Informational messages + - [X] Debugging + - [X] Profiling +- [O] Matrix + - [X] Login + - [ ] Logout + - [X] Sync + - [X] Send sync request after login + - [X] Parse sync response and store important data + - [X] Create Buffers for rooms + - [X] Populate nicklist + - [X] Print out received messages + - [O] Message Error handling + - [X] Login + - [X] Send messages + - [X] Sync + - [X] Redact + - [X] Topic + - [X] Join + - [X] Part + - [X] Invite + - [X] Backlog messages + - [ ] Try again + - [o] Send messages + - [X] Text + - [o] Html + - [X] Attributes + - [ ] Color + - [o] Parsing html to formated text + - [X] Attributes + - [X] Color + - [ ] Lists + - [X] Quotes + - [ ] Code + - [X] Topic + - [X] Print sent messages without waiting for a sync + - [X] Old message sync (rooms/{roomid}/messages) + - [X] Redactions + - [X] Power levels + - [X] Invite + - [X] Join room + - [X] Leave room + - [ ] Upload +- [ ] Presence + - [ ] Presence sending + - [ ] Presence setting +- [ ] Read marker + - [ ] Setting + - [ ] Sending +- [ ] Typing notifications + - [ ] Input change callback + - [ ] Sending out the notification + - [ ] Timer for the notification reset + - [ ] Sending out the reset of the notification +- [X] Process the HTTP messages and put them into a queue +- [X] Parse the json response +- [O] Configuration + - [X] Create default configuration + - [X] Read configuration from file + - [X] Save configuration + - [X] Server address + - [X] Auto connect + - [X] SSL verify on/off + - [ ] Presence sending + - [X] Sync max backlog + - [ ] Encrypt by default + - [ ] Typing notification enable/disable + - [X] Device name + - [X] Default matrix.org server config + - [X] Per server config + - [X] Look - merge server buffer with core + - [X] Global options +- [O] Core + - [X] Don't use sendall in the send() function + - [X] Create a default server if there doesn't exist one + - [X] matrix help command + - [X] Server add command + - [X] Server list command + - [X] Server listfull command + - [X] Server delete command + - [X] Server completion + - [X] Create server classes based from the config + - [X] Refactor out connection functions for multiple server support + - [X] Refactor the server command function + - [X] Nicklist groups + - [ ] Smart filters + - [X] Clear message queue on disconnect + - [X] Fix Reconnect handling + - [X] Fetch messages if we scroll to the top (hook_signal window_scroll) + - [X] Status bar element if we're fetching old messages + - [O] Color and attributes. + - [X] Parsing the input line + - [X] Converting the input to weechat output + - [o] Converting the input to html + - [X] Attributes + - [ ] Colors +- [.] Commands + - [X] Topic + - [X] Redact + - [o] Join + - [X] Join public rooms + - [X] Join private rooms + - [ ] Create rooms if they don't exist + - [ ] Completion + - [ ] Part + - [ ] Completion + - [ ] Invite + - [ ] Completion + - [ ] Whois + - [ ] Completion + - [ ] OP + - [ ] Voice + - [ ] Password + - [ ] Room + - [ ] Rename + - [ ] Info + - [ ] Join rules +- [O] Refactoring + - [X] Server + - [X] API + - [ ] Message handling + - [X] Colors +- [ ] Separate weechat IO from message handling/parsing +- [o] Input sanitization + - [ ] Rooms ID + - [ ] Room aliases + - [X] Event ID + - [X] User ID + - [X] Age + - [ ] Display names + - [X] Messages + - [ ] Topics +- [ ] Tests + - [ ] Commands + - [ ] Message handling + - [ ] Utils + +# OLM +- [ ] Encrypted messaging + - [ ] Generate keys + - [ ] Store keys + - [ ] Load keys + - [ ] Upload keys + - [ ] Rotate keys + - [ ] Encrypt messages + - [ ] Decrypt messages + - [ ] Group message encryption + - [ ] Device ID storing + - [ ] Device ID loading +- [ ] Olm command + - [ ] info + - [ ] verify + +- Keys should be transparently encrypted with your login password. (The lib + already does that for us.) +- More info [here](https://matrix.org/docs/guides/e2e_implementation.html). + +- Keys are bound to a user and a device. +- Ids to store: + - user name (same as login user) -> weechat stores this for us + - device_id -> store it in a separate data file + - server-name -> folder +- OLM things to store: + - Account info (holds the Identity keypair) + - Session info + - Group session info + +## Olm weechat data format +- Create a matrix folder under the weechat home folder +- Create a server folder in the matrix folder +- Filenames in this folder should have the form of + user_device.extension +- Store the device id in .device_id +- Example: + .weechat + └── matrix + └── matrix.org + ├── poljar.device_id + ├── poljar_.account + ├── poljar_.session + ├── poljar_.group_session +   └── poljar_.known_devices + +- File formats: + - .device_id -> single line containing the device id + - .account -> pickle with the olm lib, encrypt using the user password + - .session -> pickle with the olm lib, encrypt using the user password + - .group_session -> pickle with the olm lib, encrypt using the user password + - .known_devices -> pickle using the pickle module or json, a dict containing a + user_id and a device_id + +# DONE Color sending and recieving +- [SGR to/from RGB](https://github.com/chadj2/bash-ui/blob/master/COLORS.md#xterm-colorspaces) +- [RGB to from HTML/Hex](https://pypi.python.org/pypi/webcolors/1.3) +- [Fix broken HTML with Beautiful soup](https://stackoverflow.com/questions/293482/how-do-i-fix-wrongly-nested-unclosed-html-tags) + +# DONE Message Redaction +- Store the event id somewhere with the message (the slack plugin replaces the + date_printed variable for the message hdata, we can use a custom tag while + printing lines) +- If we get a redaction event use hdata_pointer to get a list of all printed + messages +- Strike through or completely delete the message + +# DONE Old message fetching +- We can fetch old messages if we have less lines than max buffer lines or lines + only younger than max buffer minutes +- To print out the messages we need to sort the line_data by date (see hdata) + +# Room command +- Create room +- Set room join rules +- Room power levels +- Alias +- Encrypt room