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
|
||||
venv/
|
||||
|
@ -17,23 +17,23 @@ Edit variables `server`, `proxies` and `useproxy` in `pbincli/settings.py` to yo
|
||||
|
||||
Run inside `venv` command:
|
||||
|
||||
$ python pbincli.py send -c "Hello!"
|
||||
$ ./cli send -c "Hello!"
|
||||
|
||||
It will send string `Hello!` to PrivateBin.
|
||||
|
||||
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.
|
||||
|
||||
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
|
||||
|
||||
$ python pbincli.py {send,get} -h
|
||||
$ ./cli [-h] {send, get, delete}
|
||||
|
||||
License
|
||||
-------
|
||||
|
@ -1,4 +1,4 @@
|
||||
#! /usr/bin/env python
|
||||
#!/usr/bin/env python2.7
|
||||
import os, sys, argparse
|
||||
import pbincli.actions
|
||||
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("-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("--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.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
|
||||
|
||||
|
||||
""" Initialise settings """
|
||||
# Initialise settings
|
||||
pbincli.settings.init()
|
||||
|
||||
|
||||
@ -25,14 +25,14 @@ def send(args):
|
||||
print("Nothing to send!")
|
||||
sys.exit(1)
|
||||
|
||||
"""Formatting request"""
|
||||
# Formatting request
|
||||
request = {'expire':args.expire,'formatter':args.format,'burnafterreading':int(args.burn),'opendiscussion':int(args.discus)}
|
||||
|
||||
salt = os.urandom(8)
|
||||
passphrase = b64encode(os.urandom(32))
|
||||
if args.debug: print("Passphrase:\t{}".format(passphrase))
|
||||
|
||||
"""If we set PASSWORD variable"""
|
||||
# If we set PASSWORD variable
|
||||
if args.password:
|
||||
digest = hashlib.sha256(args.password.encode("UTF-8")).hexdigest()
|
||||
password = passphrase + digest.encode("UTF-8")
|
||||
@ -41,11 +41,11 @@ def send(args):
|
||||
|
||||
if args.debug: print("Password:\t{}".format(password))
|
||||
|
||||
"""Encrypting text (comment)"""
|
||||
# Encrypting text (comment)
|
||||
cipher = pbincli.sjcl_simple.encrypt(password, text, salt)
|
||||
request['data'] = json.dumps(cipher, ensure_ascii=False).replace(' ','')
|
||||
|
||||
"""If we set FILE variable"""
|
||||
# If we set FILE variable
|
||||
if args.file:
|
||||
check_readable(args.file)
|
||||
with open(args.file, "rb") as f:
|
||||
@ -65,6 +65,9 @@ def send(args):
|
||||
|
||||
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
|
||||
result = privatebin().post(request)
|
||||
|
||||
|
@ -1,15 +1,11 @@
|
||||
def init():
|
||||
global server, proxies, useproxy
|
||||
|
||||
""" Edit that variables """
|
||||
# Edit that variables
|
||||
server = "http://paste.r4sas.i2p/"
|
||||
proxies = {'http': 'http://127.0.0.1:4444'}
|
||||
|
||||
""" True/False """
|
||||
# True/False
|
||||
useproxy = True
|
||||
|
||||
""" There is nothing more to do :D """
|
||||
|
||||
"""if you set useproxy to false, we clean proxies variable"""
|
||||
if useproxy == False:
|
||||
proxies = {}
|
||||
# There is nothing more to do :D
|
||||
|
@ -4,9 +4,12 @@ import pbincli.settings
|
||||
class privatebin(object):
|
||||
def __init__(self):
|
||||
self.server = pbincli.settings.server
|
||||
self.proxies = pbincli.settings.proxies
|
||||
self.headers = {'X-Requested-With': 'JSONHttpRequest'}
|
||||
|
||||
if pbincli.settings.useproxy:
|
||||
self.proxies = pbincli.settings.proxies
|
||||
else:
|
||||
self.proxies = {}
|
||||
|
||||
def post(self, 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):
|
||||
"""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):
|
||||
raise PBinCLIException("Error accessing path: {}".format(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):
|
||||
raise PBinCLIException("Path is not writable: {}".format(f))
|
||||
|
||||
|
||||
"""http://stackoverflow.com/a/33571117"""
|
||||
# http://stackoverflow.com/a/33571117
|
||||
def json_load_byteified(file_handle):
|
||||
return _byteify(
|
||||
json.load(file_handle, object_hook=_byteify),
|
||||
|
Loading…
Reference in New Issue
Block a user