43 lines
2.0 KiB
Markdown
43 lines
2.0 KiB
Markdown
# PySimpleSocial
|
|
|
|
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
|
|
- Integrated email system with verification support (optional)
|
|
- Integrated database using PostgreSQL as a backend
|
|
- 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
|
|
- Regular social media mechanics: (Un)following users, posting media with captions, stories, etc.
|
|
- User settings (change username, email, bio, password, profile picture, etc.)
|
|
- 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.)
|
|
|
|
__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.
|
|
|
|
# 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)
|
|
|