My pastebin solution
I was perusing hackernews and came across some zero-knowledge pastebin implementation. I decided that I should get around to setting up some pastebin for myself. I poked around until I found a flask-based one!
Below is the readme file, because I'm lazy. Some of my design decisions include using UUIDs instead of sequential integers for the paste ID numbers, having editable titles, and including an admin console.
Readme for stackbin
This project is a hard fork of a flask-based pastebin solution, intended for use on my production systems.
Upstream
Features
- Admin page which can list parents, children, and provide link to delete pastes.
- Editable titles
- "Reply to" pastes to make parent/children relationships
- UUIDs instead of sequential integer ID numbers
- Private pastes (accessible to admin, and to users with the whole link)
- Reverse-proxy autoconfiguration by visiting
/set
Using stackbin
Installing
You can use flask for development servers, and uwsgi for production.
Instructions
Configure the application with these two files, based on the .example
files available in the source code:
- stackbin.conf
- stackbin.wsgi.ini
Development
Run server in development mode.
FLASK_APP=stackbin.py FLASK_DEBUG=True flask run --host='0.0.0.0'
Production
Run the server in a full wsgi environment for the cleanup timer to operate.
./stackbin.bin
If you use stackbin behind a reverse-proxy such as nginx with example file stackbin.conf.nginx
, then you can have it autodetect the correct top-level path by visiting path:
/set
This means that if your app is behind http://example.com/stackbin/
then you would just visit once page:
http://example.com/stackbin/set
Dependencies
For a production stack on CentOS 7:
yum install nginx uwsgi uwsgi-logger-file python36-flask uwsgi-plugin-python36 python36-sqlalchemy python36-uwsgidecorators pip3 install --user flask-sqlalchemy pytimeparse
Improvements
None at this time.
Alternatives
This is a very diverged fork of su27/flask-pastebin which itself was a fork of the original mitsuhiko/pastebin. The original had a few additional features worth reviewing.
Unresearched
- https://github.com/yasoob/logit-bin
- https://github.com/AWilliams17/PasteMate
- https://github.com/bsamadi/flask-pastebin
Attempted
https://github.com/Tygs/0bin sounds cool but it uses a stack I'm unfamiliar with and it had some issues and I didn't want to bother with it.
References
- Using UUIDs instead of integers in sqlite in SQLAlchemy: https://stackoverflow.com/questions/183042/how-can-i-use-uuids-in-sqlalchemy/812363#812363
- https://stackoverflow.com/questions/15231359/split-python-flask-app-into-multiple-files/15231623#15231623
- https://stackoverflow.com/questions/18214612/how-to-access-app-config-in-a-blueprint/38262792#38262792
Comments