mirror of
https://github.com/r4sas/PBinCLI
synced 2025-01-08 22:08:00 +00:00
add latest changes from march'17
This commit is contained in:
parent
af722098f1
commit
7a88bf2efc
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,3 +1,2 @@
|
|||||||
__pycache__
|
|
||||||
*.pyc
|
*.pyc
|
||||||
venv/
|
venv/
|
||||||
|
@ -17,23 +17,23 @@ Edit variables `server`, `proxies` and `useproxy` in `pbincli/settings.py` to yo
|
|||||||
|
|
||||||
Run inside `venv` command:
|
Run inside `venv` command:
|
||||||
|
|
||||||
$ python pbincli.py send -c "Hello!"
|
$ ./cli send -c "Hello!"
|
||||||
|
|
||||||
It will send string `Hello!` to PrivateBin.
|
It will send string `Hello!` to PrivateBin.
|
||||||
|
|
||||||
To send file use `--file` or `-f` with filename. Example:
|
To send file use `--file` or `-f` with filename. Example:
|
||||||
|
|
||||||
$ python pbincli.py send -c "My document" -f info.pdf
|
$ ./cli send -c "My document" -f info.pdf
|
||||||
|
|
||||||
To retrieve paste from server, use `get` command with paste info.
|
To retrieve paste from server, use `get` command with paste info.
|
||||||
|
|
||||||
It must be formated like `pasteID#passphrase`. Example:
|
It must be formated like `pasteID#passphrase`. Example:
|
||||||
|
|
||||||
$ python pbincli.py get 49eeb1326cfa9491#vfeortoVWaYeJlviDdhxQBtj5e0I2kArpynrtu/tnGs=
|
$ ./cli get 49eeb1326cfa9491#vfeortoVWaYeJlviDdhxQBtj5e0I2kArpynrtu/tnGs=
|
||||||
|
|
||||||
More info you can find by typing
|
More info you can find by typing
|
||||||
|
|
||||||
$ python pbincli.py {send,get} -h
|
$ ./cli [-h] {send, get, delete}
|
||||||
|
|
||||||
License
|
License
|
||||||
-------
|
-------
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#! /usr/bin/env python
|
#!/usr/bin/env python2.7
|
||||||
import os, sys, argparse
|
import os, sys, argparse
|
||||||
import pbincli.actions
|
import pbincli.actions
|
||||||
from pbincli.utils import PBinCLIException
|
from pbincli.utils import PBinCLIException
|
||||||
@ -22,6 +22,7 @@ def main():
|
|||||||
send_parser.add_argument("-c", "--comment", help="comment in quotes")
|
send_parser.add_argument("-c", "--comment", help="comment in quotes")
|
||||||
send_parser.add_argument("-p", "--password", help="password for encrypting paste")
|
send_parser.add_argument("-p", "--password", help="password for encrypting paste")
|
||||||
send_parser.add_argument("-d", "--debug", default=False, action="store_true", help="enable debug")
|
send_parser.add_argument("-d", "--debug", default=False, action="store_true", help="enable debug")
|
||||||
|
send_parser.add_argument("--dry", default=False, action="store_true", help="invoke dry run")
|
||||||
send_parser.add_argument("-f", "--file", help="example: image.jpg or full path to file")
|
send_parser.add_argument("-f", "--file", help="example: image.jpg or full path to file")
|
||||||
send_parser.set_defaults(func=pbincli.actions.send)
|
send_parser.set_defaults(func=pbincli.actions.send)
|
||||||
|
|
@ -7,7 +7,7 @@ from pbincli.transports import privatebin
|
|||||||
from pbincli.utils import PBinCLIException, check_readable, check_writable, json_load_byteified
|
from pbincli.utils import PBinCLIException, check_readable, check_writable, json_load_byteified
|
||||||
|
|
||||||
|
|
||||||
""" Initialise settings """
|
# Initialise settings
|
||||||
pbincli.settings.init()
|
pbincli.settings.init()
|
||||||
|
|
||||||
|
|
||||||
@ -25,14 +25,14 @@ def send(args):
|
|||||||
print("Nothing to send!")
|
print("Nothing to send!")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
"""Formatting request"""
|
# Formatting request
|
||||||
request = {'expire':args.expire,'formatter':args.format,'burnafterreading':int(args.burn),'opendiscussion':int(args.discus)}
|
request = {'expire':args.expire,'formatter':args.format,'burnafterreading':int(args.burn),'opendiscussion':int(args.discus)}
|
||||||
|
|
||||||
salt = os.urandom(8)
|
salt = os.urandom(8)
|
||||||
passphrase = b64encode(os.urandom(32))
|
passphrase = b64encode(os.urandom(32))
|
||||||
if args.debug: print("Passphrase:\t{}".format(passphrase))
|
if args.debug: print("Passphrase:\t{}".format(passphrase))
|
||||||
|
|
||||||
"""If we set PASSWORD variable"""
|
# If we set PASSWORD variable
|
||||||
if args.password:
|
if args.password:
|
||||||
digest = hashlib.sha256(args.password.encode("UTF-8")).hexdigest()
|
digest = hashlib.sha256(args.password.encode("UTF-8")).hexdigest()
|
||||||
password = passphrase + digest.encode("UTF-8")
|
password = passphrase + digest.encode("UTF-8")
|
||||||
@ -41,11 +41,11 @@ def send(args):
|
|||||||
|
|
||||||
if args.debug: print("Password:\t{}".format(password))
|
if args.debug: print("Password:\t{}".format(password))
|
||||||
|
|
||||||
"""Encrypting text (comment)"""
|
# Encrypting text (comment)
|
||||||
cipher = pbincli.sjcl_simple.encrypt(password, text, salt)
|
cipher = pbincli.sjcl_simple.encrypt(password, text, salt)
|
||||||
request['data'] = json.dumps(cipher, ensure_ascii=False).replace(' ','')
|
request['data'] = json.dumps(cipher, ensure_ascii=False).replace(' ','')
|
||||||
|
|
||||||
"""If we set FILE variable"""
|
# If we set FILE variable
|
||||||
if args.file:
|
if args.file:
|
||||||
check_readable(args.file)
|
check_readable(args.file)
|
||||||
with open(args.file, "rb") as f:
|
with open(args.file, "rb") as f:
|
||||||
@ -65,6 +65,9 @@ def send(args):
|
|||||||
|
|
||||||
if args.debug: print("Request:\t{}".format(request))
|
if args.debug: print("Request:\t{}".format(request))
|
||||||
|
|
||||||
|
# If we use dry option, exit now
|
||||||
|
if args.dry: sys.exit(0)
|
||||||
|
|
||||||
server = pbincli.settings.server
|
server = pbincli.settings.server
|
||||||
result = privatebin().post(request)
|
result = privatebin().post(request)
|
||||||
|
|
||||||
|
@ -1,15 +1,11 @@
|
|||||||
def init():
|
def init():
|
||||||
global server, proxies, useproxy
|
global server, proxies, useproxy
|
||||||
|
|
||||||
""" Edit that variables """
|
# Edit that variables
|
||||||
server = "http://paste.r4sas.i2p/"
|
server = "http://paste.r4sas.i2p/"
|
||||||
proxies = {'http': 'http://127.0.0.1:4444'}
|
proxies = {'http': 'http://127.0.0.1:4444'}
|
||||||
|
|
||||||
""" True/False """
|
# True/False
|
||||||
useproxy = True
|
useproxy = True
|
||||||
|
|
||||||
""" There is nothing more to do :D """
|
# There is nothing more to do :D
|
||||||
|
|
||||||
"""if you set useproxy to false, we clean proxies variable"""
|
|
||||||
if useproxy == False:
|
|
||||||
proxies = {}
|
|
||||||
|
@ -4,9 +4,12 @@ import pbincli.settings
|
|||||||
class privatebin(object):
|
class privatebin(object):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.server = pbincli.settings.server
|
self.server = pbincli.settings.server
|
||||||
self.proxies = pbincli.settings.proxies
|
|
||||||
self.headers = {'X-Requested-With': 'JSONHttpRequest'}
|
self.headers = {'X-Requested-With': 'JSONHttpRequest'}
|
||||||
|
|
||||||
|
if pbincli.settings.useproxy:
|
||||||
|
self.proxies = pbincli.settings.proxies
|
||||||
|
else:
|
||||||
|
self.proxies = {}
|
||||||
|
|
||||||
def post(self, request):
|
def post(self, request):
|
||||||
r = requests.post(url = self.server, headers = self.headers, proxies = self.proxies, data = request)
|
r = requests.post(url = self.server, headers = self.headers, proxies = self.proxies, data = request)
|
||||||
|
@ -6,18 +6,18 @@ class PBinCLIException(Exception):
|
|||||||
|
|
||||||
|
|
||||||
def check_readable(f):
|
def check_readable(f):
|
||||||
"""Checks if path exists and readable"""
|
# Checks if path exists and readable
|
||||||
if not os.path.exists(f) or not os.access(f, os.R_OK):
|
if not os.path.exists(f) or not os.access(f, os.R_OK):
|
||||||
raise PBinCLIException("Error accessing path: {}".format(f))
|
raise PBinCLIException("Error accessing path: {}".format(f))
|
||||||
|
|
||||||
|
|
||||||
def check_writable(f):
|
def check_writable(f):
|
||||||
"""Checks if path is writable"""
|
# Checks if path is writable
|
||||||
if not os.access(os.path.dirname(f) or ".", os.W_OK):
|
if not os.access(os.path.dirname(f) or ".", os.W_OK):
|
||||||
raise PBinCLIException("Path is not writable: {}".format(f))
|
raise PBinCLIException("Path is not writable: {}".format(f))
|
||||||
|
|
||||||
|
|
||||||
"""http://stackoverflow.com/a/33571117"""
|
# http://stackoverflow.com/a/33571117
|
||||||
def json_load_byteified(file_handle):
|
def json_load_byteified(file_handle):
|
||||||
return _byteify(
|
return _byteify(
|
||||||
json.load(file_handle, object_hook=_byteify),
|
json.load(file_handle, object_hook=_byteify),
|
||||||
|
Loading…
Reference in New Issue
Block a user