Exemplo n.º 1
0
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."}
Exemplo n.º 2
0
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
Exemplo n.º 3
0
# 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
Exemplo n.º 4
0
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/")