コード例 #1
0
ファイル: views.py プロジェクト: curtiszimmerman/pb
def post(label=None):
    stream, filename = request_content()
    if not stream:
        return "Nope.\n", 400

    cur = model.get_digest(stream)

    args = {}
    if request.form.get('p'):
        args['private'] = 1
    if request.form.get('s'):
        try:
            args['sunset'] = int(request.form['s'])
        except ValueError:
            return "Invalid sunset value.\n", 400
    if label:
        label, _ = label
        args['label'] = label

    if not cur.count():
        try:
            paste = model.insert(stream, **args)
        except errors.DuplicateKeyError:
            return "label already exists.\n", 409
        uuid = str(UUID(hex=paste['_id']))
        status = "created"
    else:
        paste = cur.__next__()
        uuid = None
        status = "already exists"

    return complex_response(paste, filename=filename, uuid=uuid, status=status)
コード例 #2
0
ファイル: views.py プロジェクト: imfht/flaskapps
def put(**kwargs):
    if 'namespace' in kwargs:
        kwargs = _namespace_kwargs(kwargs)

    stream, filename = request_content()
    if not stream:
        return StatusResponse("no post content", 400)

    cur = model.get_digest(stream)
    try:
        return PasteResponse(next(cur), "already exists", filename)
    except StopIteration:
        pass

    if filename:
        kwargs['mimetype'], _ = guess_type(filename)

    # this entirely replaces paste headers, which might not be expected behavior
    headers = dict(allowed_headers(request.headers))

    # FIXME: such query; wow
    invalidate(**kwargs)
    result = model.put(stream, headers=headers, **kwargs)
    if result['n']:
        paste = next(model.get_meta(**kwargs))
        return PasteResponse(paste, "updated")

    return StatusResponse("not found", 404)
コード例 #3
0
ファイル: views.py プロジェクト: hguemar/pb
def post(label=None):
    stream, filename = request_content()
    if not stream:
        return "Nope.\n", 400

    cur = model.get_digest(stream)
    if not cur.count():
        if label:
            label, _ = label
            try:
                paste = model.insert(stream, label=label)
            except errors.DuplicateKeyError:
                return "label already exists.\n", 409
        elif request.form.get('p'):
            paste = model.insert(stream, private=1)
        else:
            paste = model.insert(stream)
        uuid = str(UUID(hex=paste['_id']))
        status = "created"
    else:
        paste = cur.__next__()
        uuid = None
        status = "already exists"

    return complex_response(paste, filename=filename, uuid=uuid, status=status)
コード例 #4
0
ファイル: views.py プロジェクト: imfht/flaskapps
def url(label=None):
    stream, _ = request_content()
    if not stream:
        return StatusResponse("no post content", 400)

    args = {}

    if label:
        label, _ = label
        if len(label) == 1:
            return StatusResponse("invalid label", 400)
        args['label'] = label

    stream = BytesIO(stream.read().decode('utf-8').split()[0].encode('utf-8'))

    cur = model.get_digest(stream)

    try:
        url = next(cur)
        status = "already exists"
    except StopIteration:
        url = model.insert(stream, redirect=1, **args)
        status = "created"

    return PasteResponse(url, status)
コード例 #5
0
def put(**kwargs):
    if 'namespace' in kwargs:
        kwargs = _namespace_kwargs(kwargs)

    stream, filename = request_content()
    if not stream:
        return StatusResponse("no post content", 400)

    cur = model.get_digest(stream)
    try:
        return PasteResponse(next(cur), "already exists", filename)
    except StopIteration:
        pass

    if filename:
        kwargs['mimetype'], _ = guess_type(filename)

    # FIXME: such query; wow
    invalidate(**kwargs)
    result = model.put(stream, **kwargs)
    if result['n']:
        paste = next(model.get_meta(**kwargs))
        return PasteResponse(paste, "updated")

    return StatusResponse("not found", 404)
コード例 #6
0
ファイル: views.py プロジェクト: imfht/flaskapps
def post(label=None, namespace=None):
    stream, filename = request_content()
    if not stream:
        return StatusResponse("no post content", 400)

    cur = model.get_digest(stream)

    args = {}
    if filename:
        args['mimetype'], _ = guess_type(filename)

    for key, value in request_keys('private', 'sunset'):
        try:
            if key == 'sunset':
                args[key] = parse_sunset(value)
            else:
                args[key] = int(value)
        except (ValueError, OverflowError):
            return StatusResponse({
                "invalid request params": {key: value}
            }, 400)

    if label:
        label, _ = label
        if len(label) == 1:
            return StatusResponse("invalid label", 400)
        args['label'] = label
    if namespace:
        host = get_host_name(request)
        if not _auth_namespace(host):
            return StatusResponse("invalid auth", 403)
        label, _ = namespace
        args.update(dict(
            label=label,
            namespace=host
        ))

    headers = dict(allowed_headers(request.headers))
    args['headers'] = headers

    try:
        paste = next(cur)
        uuid = None
        status = "already exists"
    except StopIteration:
        try:
            paste = model.insert(stream, **args)
        except errors.DuplicateKeyError:
            return StatusResponse("label already exists.", 409)
        invalidate(**paste)
        uuid = str(UUID(hex=paste['_id']))
        status = "created"

    return PasteResponse(paste, status, filename, uuid)
コード例 #7
0
ファイル: views.py プロジェクト: imfht/flaskapps
def preview(handler):
    stream, filename = request_content()

    if not stream:
        return ''

    mimetype = None
    if filename:
        mimetype, _ = guess_type(filename)

    return _handler.get(handler, stream.read(), mimetype, partial=True)
コード例 #8
0
ファイル: views.py プロジェクト: GermainZ/pb
def post():
    content, _ = request_content()
    if not content:
        return "Nope.\n", 400

    content = content.decode('utf-8').split('\n')[0].encode('utf-8')

    id = model.get_digest(content)
    if not id:
        id = model.insert(content)

    url = id_url(b66=id)
    return redirect(url, "{}\n".format(url), 200)
コード例 #9
0
ファイル: views.py プロジェクト: GermainZ/pb
def post():
    content, _ = request_content()
    if not content:
        return "Nope.\n", 400

    content = content.decode('utf-8').split('\n')[0].encode('utf-8')

    id = model.get_digest(content)
    if not id:
        id = model.insert(content)

    url = id_url(b66=id)
    return redirect(url, "{}\n".format(url), 200)
コード例 #10
0
ファイル: views.py プロジェクト: curtiszimmerman/pb
def url():
    stream, _ = request_content()
    if not stream:
        return "Nope.\n", 400

    stream = BytesIO(stream.read().decode('utf-8').split()[0].encode('utf-8'))

    cur = model.get_digest(stream)
    if not cur.count():
        url = model.insert(stream, redirect=1)
    else:
        url = cur.__next__()

    url = id_url(sid=url['digest'])
    return redirect(url, "{}\n".format(url), 200)
コード例 #11
0
ファイル: views.py プロジェクト: GermainZ/pb
def post():
    content, filename = request_content()
    if not content:
        return "Nope.\n", 400

    uuid = None
    id, digest = model.get_digest(content)
    if not id and not digest:
        if request.form.get('p'):
            digest, uuid = model.insert_private(content)
        else:
            id, uuid = model.insert(content)

    url = id_url(b66=(id, filename)) if id else id_url(sha1=(digest, filename))
    uuid = str(UUID(bytes=uuid)) if uuid else '<redacted>'
    return redirect(url, safe_dump(dict(url=url, uuid=uuid), default_flow_style=False))
コード例 #12
0
ファイル: views.py プロジェクト: GermainZ/pb
def put(uuid):
    content, filename = request_content()
    if not content:
        return "Nope.\n", 400

    id, digest = model.get_digest(content)
    if id or digest:
        url = id_url(b66=id) if id else id_url(sha1=digest)
        return redirect(url, "Paste already exists.\n", 409)

    id, digest = model.put(uuid.bytes, content)
    if id or digest:
        url = id_url(b66=(id, filename)) if id else id_url(sha1=digest)
        return redirect(url, "{} updated.\n".format(url), 200)

    return "Not found.\n", 404
コード例 #13
0
ファイル: views.py プロジェクト: HalosGhost/pb
def url():
    stream, _ = request_content()
    if not stream:
        return StatusResponse("no post content", 400)

    stream = BytesIO(stream.read().decode('utf-8').split()[0].encode('utf-8'))

    cur = model.get_digest(stream)
    if not cur.count():
        url = model.insert(stream, redirect=1)
        status = "created"
    else:
        url = next(cur)
        status = "already exists"

    return PasteResponse(url, status)
コード例 #14
0
def url():
    stream, _ = request_content()
    if not stream:
        return StatusResponse("no post content", 400)

    stream = BytesIO(stream.read().decode('utf-8').split()[0].encode('utf-8'))

    cur = model.get_digest(stream)
    if not cur.count():
        url = model.insert(stream, redirect=1)
        status = "created"
    else:
        url = next(cur)
        status = "already exists"

    return PasteResponse(url, status)
コード例 #15
0
ファイル: views.py プロジェクト: GermainZ/pb
def put(uuid):
    content, filename = request_content()
    if not content:
        return "Nope.\n", 400

    id, digest = model.get_digest(content)
    if id or digest:
        url = id_url(b66=id) if id else id_url(sha1=digest)
        return redirect(url, "Paste already exists.\n", 409)

    id, digest = model.put(uuid.bytes, content)
    if id or digest:
        url = id_url(b66=(id, filename)) if id else id_url(sha1=digest)
        return redirect(url, "{} updated.\n".format(url), 200)

    return "Not found.\n", 404
コード例 #16
0
ファイル: views.py プロジェクト: curtiszimmerman/pb
def put(uuid):
    stream, filename = request_content()
    if not stream:
        return "Nope.\n", 400

    cur = model.get_digest(stream)
    if cur.count():
        return complex_response(cur.__next__(), filename=filename, status="already exists")

    # FIXME: such query; wow
    invalidate(uuid)
    result = model.put(uuid, stream)
    if result['n']:
        paste = model.get_meta(_id=uuid.hex).__next__()
        return complex_response(paste, status="updated")

    return "Not found.\n", 404
コード例 #17
0
ファイル: views.py プロジェクト: GermainZ/pb
def post():
    content, filename = request_content()
    if not content:
        return "Nope.\n", 400

    uuid = None
    id, digest = model.get_digest(content)
    if not id and not digest:
        if request.form.get('p'):
            digest, uuid = model.insert_private(content)
        else:
            id, uuid = model.insert(content)

    url = id_url(b66=(id, filename)) if id else id_url(sha1=(digest, filename))
    uuid = str(UUID(bytes=uuid)) if uuid else '<redacted>'
    return redirect(
        url, safe_dump(dict(url=url, uuid=uuid), default_flow_style=False))
コード例 #18
0
ファイル: views.py プロジェクト: HalosGhost/pb
def put(**kwargs):
    if 'namespace' in kwargs:
        kwargs = _namespace_kwargs(kwargs)

    stream, filename = request_content()
    if not stream:
        return StatusResponse("no post content", 400)

    cur = model.get_digest(stream)
    if cur.count():
        return PasteResponse(next(cur), "already exists", filename)

    if filename:
        kwargs['mimetype'], _ = guess_type(filename)

    # FIXME: such query; wow
    invalidate(**kwargs)
    result = model.put(stream, **kwargs)
    if result['n']:
        paste = next(model.get_meta(**kwargs))
        return PasteResponse(paste, "updated")

    return StatusResponse("not found", 404)