forked from r4sas/PBinCLI
move functions to utils, import functions only where they needed, remove bytified json load
This commit is contained in:
parent
487def2b45
commit
1ff6e721c7
@ -1,27 +1,14 @@
|
|||||||
import json, hashlib, ntpath, os, sys, zlib
|
import json, hashlib, os, sys
|
||||||
import pbincli.actions
|
import pbincli.actions
|
||||||
from sjcl import SJCL
|
from sjcl import SJCL
|
||||||
|
|
||||||
from base64 import b64encode, b64decode
|
from base64 import b64encode, b64decode
|
||||||
from mimetypes import guess_type
|
from pbincli.utils import PBinCLIException
|
||||||
from pbincli.utils import PBinCLIException, check_readable, check_writable, json_load_byteified
|
|
||||||
|
|
||||||
|
|
||||||
def path_leaf(path):
|
|
||||||
head, tail = ntpath.split(path)
|
|
||||||
return tail or ntpath.basename(head)
|
|
||||||
|
|
||||||
|
|
||||||
def decompress(s):
|
|
||||||
return zlib.decompress(bytearray(map(ord, b64decode(s.encode('utf-8')).decode('utf-8'))), -zlib.MAX_WBITS)
|
|
||||||
|
|
||||||
def compress(s):
|
|
||||||
co = zlib.compressobj(wbits=-zlib.MAX_WBITS)
|
|
||||||
b = co.compress(s) + co.flush()
|
|
||||||
|
|
||||||
return b64encode(''.join(map(chr, b)).encode('utf-8'))
|
|
||||||
|
|
||||||
def send(args, api_client):
|
def send(args, api_client):
|
||||||
|
from pbincli.utils import check_readable, compress, path_leaf
|
||||||
|
from mimetypes import guess_type
|
||||||
|
|
||||||
if not args.notext:
|
if not args.notext:
|
||||||
if args.text:
|
if args.text:
|
||||||
text = args.text
|
text = args.text
|
||||||
@ -107,6 +94,8 @@ def send(args, api_client):
|
|||||||
|
|
||||||
|
|
||||||
def get(args, api_client):
|
def get(args, api_client):
|
||||||
|
from pbincli.utils import check_writable, decompress
|
||||||
|
|
||||||
pasteid, passphrase = args.pasteinfo.split("#")
|
pasteid, passphrase = args.pasteinfo.split("#")
|
||||||
|
|
||||||
if pasteid and passphrase:
|
if pasteid and passphrase:
|
||||||
|
@ -1,10 +1,15 @@
|
|||||||
import json, os
|
import json, ntpath, os, zlib
|
||||||
|
from base64 import b64encode, b64decode
|
||||||
|
|
||||||
class PBinCLIException(Exception):
|
class PBinCLIException(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def path_leaf(path):
|
||||||
|
head, tail = ntpath.split(path)
|
||||||
|
return tail or ntpath.basename(head)
|
||||||
|
|
||||||
|
|
||||||
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):
|
||||||
@ -17,34 +22,12 @@ def check_writable(f):
|
|||||||
raise PBinCLIException("Path is not writable: {}".format(f))
|
raise PBinCLIException("Path is not writable: {}".format(f))
|
||||||
|
|
||||||
|
|
||||||
# http://stackoverflow.com/a/33571117
|
def decompress(s):
|
||||||
def json_load_byteified(file_handle):
|
return zlib.decompress(bytearray(map(ord, b64decode(s.encode('utf-8')).decode('utf-8'))), -zlib.MAX_WBITS)
|
||||||
return _byteify(
|
|
||||||
json.load(file_handle, object_hook=_byteify),
|
|
||||||
ignore_dicts=True
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def json_loads_byteified(json_text):
|
def compress(s):
|
||||||
return _byteify(
|
co = zlib.compressobj(wbits=-zlib.MAX_WBITS)
|
||||||
json.loads(json_text, object_hook=_byteify),
|
b = co.compress(s) + co.flush()
|
||||||
ignore_dicts=True
|
|
||||||
)
|
|
||||||
|
|
||||||
|
return b64encode(''.join(map(chr, b)).encode('utf-8'))
|
||||||
def _byteify(data, ignore_dicts = False):
|
|
||||||
# if this is a unicode string, return its string representation
|
|
||||||
if isinstance(data, str):
|
|
||||||
return data.encode('utf-8')
|
|
||||||
# if this is a list of values, return list of byteified values
|
|
||||||
if isinstance(data, list):
|
|
||||||
return [ _byteify(item, ignore_dicts=True) for item in data ]
|
|
||||||
# if this is a dictionary, return dictionary of byteified keys and values
|
|
||||||
# but only if we haven't already byteified it
|
|
||||||
if isinstance(data, dict) and not ignore_dicts:
|
|
||||||
return {
|
|
||||||
_byteify(key, ignore_dicts=True): _byteify(value, ignore_dicts=True)
|
|
||||||
for key, value in data.iteritems()
|
|
||||||
}
|
|
||||||
# if it's anything else, return it in its original form
|
|
||||||
return data
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user