implement read text from stdin (closes #3)

fix debug output
This commit is contained in:
R4SAS 2018-02-16 11:56:13 +03:00
parent b887f0cc5a
commit 4af4797812
4 changed files with 24 additions and 13 deletions

View File

@ -1,7 +1,7 @@
DWTFYWWI LICENSE DWTFYWWI LICENSE
Version 1, January 2006 Version 1, January 2006
Copyright (C) 2006 Ævar Arnfjörð Bjarmason Copyright (C) 2017-2018 R4SAS <r4sas@i2pmail.org>
Preamble Preamble

View File

@ -17,25 +17,33 @@ Edit variables `server`, `proxies` and `useproxy` in `pbincli/settings.py` to yo
Run inside `venv` command: Run inside `venv` command:
$ ./cli send -c "Hello!" $ ./cli send -c "Hello!"
Or use stdin input to read text for paste:
$ ./cli send - <<EOF
Hello!
This is test paste!
EOF
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:
$ ./cli 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:
$ ./cli get 49eeb1326cfa9491#vfeortoVWaYeJlviDdhxQBtj5e0I2kArpynrtu/tnGs= $ ./cli get 49eeb1326cfa9491#vfeortoVWaYeJlviDdhxQBtj5e0I2kArpynrtu/tnGs=
More info you can find by typing More info you can find by typing
$ ./cli [-h] {send, get, delete} $ ./cli [-h] {send, get, delete}
License License
------- -------
This project is licensed under the DWTFYWWI license, which can be found in the file This project is licensed under the DWTFYWWI license, which can be found in the file
LICENSE in the root of the project source code. [LICENSE](LICENSE) in the root of the project source code.

3
cli
View File

@ -19,11 +19,12 @@ def main():
choices=["5min", "10min", "1hour", "1day", "1week", "1month", "1year", "never"], help="expiration of paste (default: 1day)") choices=["5min", "10min", "1hour", "1day", "1week", "1month", "1year", "never"], help="expiration of paste (default: 1day)")
send_parser.add_argument("-F", "--format", default="plaintext", action="store", send_parser.add_argument("-F", "--format", default="plaintext", action="store",
choices=["plaintext", "syntaxhighlighting", "markdown"], help="format of comment (default: plaintext)") choices=["plaintext", "syntaxhighlighting", "markdown"], help="format of comment (default: plaintext)")
send_parser.add_argument("-c", "--comment", help="comment in quotes") send_parser.add_argument("-c", "--comment", help="comment in quotes. Ignored if used stdin")
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("--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.add_argument("stdin", help="input paste text from stdin", nargs="?", type=argparse.FileType("r"), default=sys.stdin)
send_parser.set_defaults(func=pbincli.actions.send) send_parser.set_defaults(func=pbincli.actions.send)
get_parser = subparsers.add_parser("get", description="Get data from PrivateBin instance", usage=""" get_parser = subparsers.add_parser("get", description="Get data from PrivateBin instance", usage="""

View File

@ -18,7 +18,9 @@ def path_leaf(path):
def send(args): def send(args):
if args.comment: if args.stdin:
text = args.stdin.read()
elif args.comment:
text = args.comment text = args.comment
elif args.file: elif args.file:
text = "Sending a file to you!" text = "Sending a file to you!"
@ -42,7 +44,7 @@ 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 = SJCL().encrypt(text.encode("utf-8"), password, mode='gcm') cipher = SJCL().encrypt(text.encode("UTF-8"), password, mode='gcm')
# TODO: should be implemented in upstream # TODO: should be implemented in upstream
for k in ['salt', 'iv', 'ct']: cipher[k] = cipher[k].decode() for k in ['salt', 'iv', 'ct']: cipher[k] = cipher[k].decode()
@ -78,7 +80,7 @@ def send(args):
server = pbincli.settings.server server = pbincli.settings.server
result = privatebin().post(request) result = privatebin().post(request)
if args.debug: print("Response:\t{}\n".format(result.decode("UTF-8"))) if args.debug: print("Response:\t{}\n".format(result))
try: try:
result = json.loads(result) result = json.loads(result)
@ -115,7 +117,7 @@ def get(args):
print("PBinCLI error: Incorrect request") print("PBinCLI error: Incorrect request")
sys.exit(1) sys.exit(1)
if args.debug: print("Response:\t{}\n".format(result.decode("UTF-8"))) if args.debug: print("Response:\t{}\n".format(result))
try: try:
result = json.loads(result) result = json.loads(result)
@ -163,7 +165,7 @@ def get(args):
print("Burn afrer reading flag found. Deleting paste...") print("Burn afrer reading flag found. Deleting paste...")
result = privatebin().delete(pasteid, 'burnafterreading') result = privatebin().delete(pasteid, 'burnafterreading')
if args.debug: print("Delete response:\t{}\n".format(result.decode("UTF-8"))) if args.debug: print("Delete response:\t{}\n".format(result))
try: try:
result = json.loads(result) result = json.loads(result)
@ -196,7 +198,7 @@ def delete(args):
result = privatebin().delete(pasteid, token) result = privatebin().delete(pasteid, token)
if args.debug: print("Response:\t{}\n".format(result.decode("UTF-8"))) if args.debug: print("Response:\t{}\n".format(result))
try: try:
result = json.loads(result) result = json.loads(result)