mirror of
https://github.com/Tygs/0bin.git
synced 2023-08-10 21:13:00 +03:00
Merge pull request #88 from Shir0kamii/bin_remove_paste
Bin remove paste
This commit is contained in:
commit
a344dbb18f
2
setup.py
2
setup.py
@ -47,7 +47,7 @@ setup(
|
|||||||
],
|
],
|
||||||
entry_points = {
|
entry_points = {
|
||||||
'console_scripts': [
|
'console_scripts': [
|
||||||
'zerobin = zerobin.routes:main',
|
'zerobin = zerobin.cmd:main',
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
102
zerobin/cmd.py
Normal file
102
zerobin/cmd.py
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# coding: utf-8
|
||||||
|
|
||||||
|
from __future__ import unicode_literals, absolute_import, print_function
|
||||||
|
|
||||||
|
"""
|
||||||
|
Main script including runserver and delete-paste.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from sigtools.modifiers import annotate, autokwoargs
|
||||||
|
import re
|
||||||
|
|
||||||
|
try:
|
||||||
|
import thread
|
||||||
|
except ImportError:
|
||||||
|
import _thread as thread
|
||||||
|
|
||||||
|
from zerobin.utils import (settings, SettingsValidationError,
|
||||||
|
drop_privileges)
|
||||||
|
from zerobin.routes import get_app
|
||||||
|
from zerobin.paste import Paste
|
||||||
|
|
||||||
|
from bottle import run
|
||||||
|
|
||||||
|
import clize
|
||||||
|
|
||||||
|
@annotate(debug=bool, compressed_static=bool)
|
||||||
|
def runserver(host='', port='', debug=None, user='', group='',
|
||||||
|
settings_file='', compressed_static=None,
|
||||||
|
version=False, paste_id_length=None, server="cherrypy"):
|
||||||
|
|
||||||
|
if version:
|
||||||
|
print('0bin V%s' % settings.VERSION)
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
settings.HOST = host or settings.HOST
|
||||||
|
settings.PORT = port or settings.PORT
|
||||||
|
settings.USER = user or settings.USER
|
||||||
|
settings.GROUP = group or settings.GROUP
|
||||||
|
settings.PASTE_ID_LENGTH = paste_id_length or settings.PASTE_ID_LENGTH
|
||||||
|
|
||||||
|
try:
|
||||||
|
_, app = get_app(debug, settings_file, compressed_static, settings=settings)
|
||||||
|
except SettingsValidationError as err:
|
||||||
|
print('Configuration error: %s' % err.message, file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
thread.start_new_thread(drop_privileges, (settings.USER, settings.GROUP))
|
||||||
|
|
||||||
|
if settings.DEBUG:
|
||||||
|
run(app, host=settings.HOST, port=settings.PORT, reloader=True,
|
||||||
|
server="cherrypy")
|
||||||
|
else:
|
||||||
|
run(app, host=settings.HOST, port=settings.PORT, server="cherrypy")
|
||||||
|
|
||||||
|
|
||||||
|
# The regex parse the url and separate the paste's id from the decription key
|
||||||
|
# After the '/paste/' part, there is several caracters, identified as
|
||||||
|
# the uuid of the paste. Followed by a '#', the decryption key of the paste.
|
||||||
|
paste_url = re.compile('/paste/(?P<paste_id>.*)#(?P<key>.*)')
|
||||||
|
|
||||||
|
def unpack_paste(paste):
|
||||||
|
"""Take either the ID or the URL of a paste, and return its ID"""
|
||||||
|
|
||||||
|
try_url = paste_url.search(paste)
|
||||||
|
|
||||||
|
if try_url:
|
||||||
|
return try_url.group('paste_id')
|
||||||
|
return paste
|
||||||
|
|
||||||
|
@annotate(quiet='q')
|
||||||
|
@autokwoargs
|
||||||
|
def delete_paste(quiet=False, *pastes):
|
||||||
|
"""
|
||||||
|
Remove pastes, given its ID or its URL
|
||||||
|
|
||||||
|
quiet: Don't print anything
|
||||||
|
|
||||||
|
pastes: List of pastes, given by ID or URL
|
||||||
|
"""
|
||||||
|
|
||||||
|
for paste_uuid in map(unpack_paste, pastes):
|
||||||
|
try:
|
||||||
|
Paste.load(paste_uuid).delete()
|
||||||
|
|
||||||
|
if not quiet:
|
||||||
|
print('Paste {} is removed'.format(paste_uuid))
|
||||||
|
|
||||||
|
except ValueError:
|
||||||
|
if not quiet:
|
||||||
|
print('Paste {} doesn\'t exist'.format(paste_uuid))
|
||||||
|
|
||||||
|
def main():
|
||||||
|
subcommands = [runserver, delete_paste]
|
||||||
|
subcommand_names = [clize.util.name_py2cli(name)
|
||||||
|
for name in clize.util.dict_from_names(subcommands).keys()]
|
||||||
|
if len(sys.argv) < 2 or sys.argv[1] not in subcommand_names:
|
||||||
|
sys.argv.insert(1, subcommand_names[0])
|
||||||
|
clize.run(runserver, delete_paste)
|
||||||
|
|
@ -4,8 +4,7 @@
|
|||||||
from __future__ import unicode_literals, absolute_import, print_function
|
from __future__ import unicode_literals, absolute_import, print_function
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Main script including controller, rooting, dependency management, and
|
Script including controller, rooting, and dependency management.
|
||||||
server run.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
@ -31,8 +30,6 @@ from zerobin.utils import (settings, SettingsValidationError,
|
|||||||
import bottle
|
import bottle
|
||||||
from bottle import (Bottle, run, static_file, view, request)
|
from bottle import (Bottle, run, static_file, view, request)
|
||||||
|
|
||||||
import clize
|
|
||||||
|
|
||||||
from zerobin.paste import Paste
|
from zerobin.paste import Paste
|
||||||
|
|
||||||
|
|
||||||
@ -178,37 +175,3 @@ def get_app(debug=None, settings_file='',
|
|||||||
bottle.debug(True)
|
bottle.debug(True)
|
||||||
|
|
||||||
return settings, app
|
return settings, app
|
||||||
|
|
||||||
|
|
||||||
@clize.clize(coerce={'debug': bool, 'compressed_static': bool})
|
|
||||||
def runserver(host='', port='', debug=None, user='', group='',
|
|
||||||
settings_file='', compressed_static=None,
|
|
||||||
version=False, paste_id_length=None, server="cherrypy"):
|
|
||||||
|
|
||||||
if version:
|
|
||||||
print('0bin V%s' % settings.VERSION)
|
|
||||||
sys.exit(0)
|
|
||||||
|
|
||||||
settings.HOST = host or settings.HOST
|
|
||||||
settings.PORT = port or settings.PORT
|
|
||||||
settings.USER = user or settings.USER
|
|
||||||
settings.GROUP = group or settings.GROUP
|
|
||||||
settings.PASTE_ID_LENGTH = paste_id_length or settings.PASTE_ID_LENGTH
|
|
||||||
|
|
||||||
try:
|
|
||||||
_, app = get_app(debug, settings_file, compressed_static, settings=settings)
|
|
||||||
except SettingsValidationError as err:
|
|
||||||
print('Configuration error: %s' % err.message, file=sys.stderr)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
thread.start_new_thread(drop_privileges, (settings.USER, settings.GROUP))
|
|
||||||
|
|
||||||
if settings.DEBUG:
|
|
||||||
run(app, host=settings.HOST, port=settings.PORT, reloader=True,
|
|
||||||
server="cherrypy")
|
|
||||||
else:
|
|
||||||
run(app, host=settings.HOST, port=settings.PORT, server="cherrypy")
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
clize.run(runserver)
|
|
||||||
|
Loading…
Reference in New Issue
Block a user