2022-10-04 20:58:27 +02:00
# PySimpleSocial
2022-10-04 21:13:26 +02:00
An advanced REST API written in Python for a generic social media website.
__Note__: This is a WIP so far.
## Tech Stack
The project is written using [FastAPI ](https://https://fastapi.tiangolo.com/ ), [piccolo ](https://piccolo-orm.readthedocs.io/en/latest/ ) and [uvicorn ](https://www.uvicorn.org/ ). Other awesome libraries used (only direct dependencies are listed here):
- [validators ](https://validators.readthedocs.io/en/latest/ )
- [pydantic ](https://pydantic-docs.helpmanual.io/ )
- [aiosmtplib ](https://aiosmtplib.readthedocs.io/en/latest/usage.html )
- [uvloop ](https://uvloop.readthedocs.io/ )
- [slowapi ](https://slowapi.readthedocs.io/en/latest/ )
- [fastapi-login ](https://fastapi-login.readthedocs.io/ )
- [bcrypt ](https://github.com/pyca/bcrypt/ )
# Feature overview
__Note__: Not all of this is implemented yet
- Simple authentication system using salted bcrypt hashes for password storage
2022-10-05 12:33:33 +02:00
- Integrated email system with verification support (optional)
- Integrated database using PostgreSQL as a backend
2022-10-04 21:13:26 +02:00
- Simple rate limiting using redis/in-memory storage
- Support for various kinds of media stored in a CDN, directly inside the database or on a local/remote filesystem
2022-10-05 12:33:33 +02:00
- Regular social media mechanics: (Un)following users, posting media with captions, stories, etc.
- User settings (change username, email, bio, password, profile picture, etc.)
2022-10-04 21:13:26 +02:00
- Simple messaging system using websockets or a polling HTTP API
- Admin functionality with basic metrics and administration features (flagging/deleting users/posts, handling tickets, etc.)
2022-10-05 12:33:33 +02:00
__Note__: For security reasons, password and email changes require an email confirmation. Changing the email also
forces the user to verify the new address again.
2022-10-04 21:13:26 +02:00
# Setup
Move the *.py.example files to their respective * .py files, fill them as necessary, then simply install the dependencies via pip and run main.py
# License
This software is licensed under the MIT license. For more information, read the [license file ](LICENSE )