A Clone of Telegram written from the ground up, with a goal of security. Split into frontend and backend
This Telegram clone is written in Python for a computer science course at Ohio State University, CSE 3461. The purpose of this clone is to satisfy the requirements of that lab.
- Server and Client communicate via
TCP
- Server must respond to a minimum of 5 different commands
- configuration file for port the server will listen on
- Server startup message
- Either prompt or use a configuration file to allow client to pick which server to connect to and port
- Server and Client work from 2 different IP addresses
Assignment | Points |
---|---|
Software submission | 75 |
Demonstration / Review meeting | 25 |
Bonus Client-side GUI | +2 |
Bonus User Authorization | +2 |
Bonus Server-side command logging | +1 |
Total | 105 |
Language: Python
Platform: Agnostic, but favoring Linux/Unix
, depends on GUI
library choice
- Built on top of a custom implementation of a Web App Framework similar to Flask*
- Server follows
REST
principles - Utilize
Sqlite3
as the DBMS - Verifiy Users Email addresses
- Utilize Python-RSA to maintain end to end encryption of messages
- Follow best practices for security
- Use websockets to send and recieve messages from client
Web App Framework documentation
- Utilize PyQT for GUI
- Built on top of a custom implementation of HTTP Requests similar to Requests*
- Utilize Python-RSA to maintain end to end encryption of messages
- Behave and look similarly to Telegram-desktop
- Allow
Markdown
in chat messages Unfinished - Allow emoji in chat messages along with an emoji selector menu Unfinished
HTTP Request Library documentation
* Objectively WORSE
- Python 3.8
- pip
- pipenv
cd frontend/
pipenv install
pipenv shell
cd ../
python -m frontend
cd backend/
pipenv install
pipenv shell
cd ../
python -m backend
- Switch form polling the server every so many seconds to
websockets
- Switch to websockets circumvents all the hacky refreshing
- Add Markdown support
- Add emoji menu
- refractor Qt mess
- Code generated by Qt Designer isn't pythonic and has massive issues
- Testing
- Implement settings window
- allow updating account (server side already supports)
- allow deleting account (server side already supports)
- allow resending email verification
- Fix sending email verification (for some reason doesn't work with Gmail)
- Writing abstractions for the backend and learning how
HTTP Requests
work and are processed was incredibly interesting - GUI design and layout was tedious, difficult, and the most time consuming
All Icons are from Icons8