Browse Source

add latest changes from march'17

pull/4/head
R4SAS 7 years ago
parent
commit
7a88bf2efc
  1. 1
      .gitignore
  2. 8
      README.md
  3. 3
      cli
  4. 13
      pbincli/actions.py
  5. 10
      pbincli/settings.py
  6. 5
      pbincli/transports.py
  7. 6
      pbincli/utils.py

1
.gitignore vendored

@ -1,3 +1,2 @@
__pycache__
*.pyc *.pyc
venv/ venv/

8
README.md

@ -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
------- -------

3
pbincli.py → cli

@ -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)

13
pbincli/actions.py

@ -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)

10
pbincli/settings.py

@ -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 = {}

5
pbincli/transports.py

@ -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
pbincli/utils.py

@ -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…
Cancel
Save