def create_paste(): try: body = urlparse.parse_qs(request.body.read(int(settings.MAX_SIZE * 1.1))) except ValueError: return {'status': 'error', 'message': "Wrong data payload."} try: content = "".join(x.decode('utf8') for x in body[b'content']) except (UnicodeDecodeError, KeyError): return {'status': 'error', 'message': "Encoding error: the paste couldn't be saved."} if '{"iv":' not in content: # reject silently non encrypted content return {'status': 'error', 'message': "Wrong data payload."} # check size of the paste. if more than settings return error # without saving paste. prevent from unusual use of the # system. need to be improved if 0 < len(content) < settings.MAX_SIZE: expiration = body.get(b'expiration', ['burn_after_reading'])[0] paste = Paste(expiration=expiration.decode('utf8'), content=content, uuid_length=settings.PASTE_ID_LENGTH) paste.save() # display counter if settings.DISPLAY_COUNTER: #increment paste counter paste.increment_counter() # if refresh time elapsed pick up new counter value now = datetime.now() timeout = (GLOBAL_CONTEXT['refresh_counter'] + timedelta(seconds=settings.REFRESH_COUNTER)) if timeout < now: GLOBAL_CONTEXT['pastes_count'] = Paste.get_pastes_count() GLOBAL_CONTEXT['refresh_counter'] = now return {'status': 'ok', 'paste': paste.uuid} return {'status': 'error', 'message': "Serveur error: the paste couldn't be saved. " "Please try later."}
from datetime import datetime, timedelta # add project dir and libs dir to the PYTHON PATH to ensure they are # importable from zerobin.utils import (settings, SettingsValidationError, drop_privileges, dmerge) import bottle from bottle import (Bottle, run, static_file, view, request) from zerobin.paste import Paste app = Bottle() GLOBAL_CONTEXT = { 'settings': settings, 'pastes_count': Paste.get_pastes_count(), 'refresh_counter': datetime.now() } @app.route('/') @view('home') def index(): return GLOBAL_CONTEXT @app.route('/faq/') @view('faq') def faq(): return GLOBAL_CONTEXT
# add project dir and libs dir to the PYTHON PATH to ensure they are # importable from zerobin.utils import (settings, SettingsValidationError, drop_privileges, dmerge) import bottle from bottle import (Bottle, run, static_file, view, request) from zerobin.paste import Paste app = Bottle() GLOBAL_CONTEXT = { 'settings': settings, 'pastes_count': Paste.get_pastes_count(), 'refresh_counter': datetime.now() } @app.route('/') @view('home') def index(): return GLOBAL_CONTEXT @app.route('/faq/') @view('faq') def faq(): return GLOBAL_CONTEXT
from zerobin import __version__ from zerobin.utils import ( SettingsValidationError, ensure_app_context, check_password, settings, ) from zerobin.paste import Paste ensure_app_context() GLOBAL_CONTEXT = { "settings": settings, "VERSION": __version__, "pastes_count": Paste.get_pastes_count(), "refresh_counter": datetime.now(), } app = Bottle() ADMIN_LOGIN_URL = settings.ADMIN_URL + "login/" @app.route("/") @view("home") def index(): return GLOBAL_CONTEXT @app.get("/faq/")