Educational chat project in C++ to learn about the Linux networking stack.
This is an exemple to run this project on localhost with self signed CA, not an exemple of a real TLS app deployment
make chain.pem
make
Then you can run:
./bin/spikte_chat server RAWfor unencrypted communication or./bin/spikte_chat server TLSto use TLS encryption./bin/spikte_chat clientto run the client interface
Note that the chain.pem file generated must be accessible from the client and the server
Implemented:
- Optional TLS encryption
- Accounts and message persistance using SQLite
- Password storage using Argon2D
- raylib/raygui interface
- Multiple chat rooms support
- Themes
TODO:
General
- Fix bad/not great design choices, there are some here and there, like the state management
- Test a lot of edge cases
- Better error management
Specific:
- The chat role system feels a bit weak on the edge cases
- Add audio
- Maybe the theme should be client sided only and not shared between user of a same chat, it would allow that the theme is per user and not per chat
- Chat history when pressing up arrow
-
/helpto display availabe commands -
/getMembersto display members (with current status) - Display who saw a message
- Display the timestamp
- UI support for deleting/editing messages
- UI support for deleting a chat
- Chat owner role transfere
- Informs the user if he tries to use a raw TCP connection when the server uses TLS encryption
- Support for image format (PNG, JPEG, GiF)
- Support for video format (MP4)
- Support for audio message (Does chats use MP3 ? I don't know)