forked from r4sas/PBinCLI
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.3 KiB
45 lines
1.3 KiB
import json, ntpath, os, zlib |
|
from base64 import b64encode, b64decode |
|
|
|
class PBinCLIException(Exception): |
|
pass |
|
|
|
|
|
def path_leaf(path): |
|
head, tail = ntpath.split(path) |
|
return tail or ntpath.basename(head) |
|
|
|
|
|
def check_readable(f): |
|
# 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 |
|
if not os.access(os.path.dirname(f) or ".", os.W_OK): |
|
raise PBinCLIException("Path is not writable: {}".format(f)) |
|
|
|
|
|
def decompress(s, ver = 1): |
|
if ver == 2: |
|
return zlib.decompress(s, -zlib.MAX_WBITS) |
|
else: |
|
return zlib.decompress(bytearray(map(ord, b64decode(s.encode('utf-8')).decode('utf-8'))), -zlib.MAX_WBITS) |
|
|
|
|
|
def compress(s, ver = 1): |
|
if ver == 2: |
|
# using compressobj as compress doesn't let us specify wbits |
|
# needed to get the raw stream without headers |
|
co = zlib.compressobj(wbits=-zlib.MAX_WBITS) |
|
return co.compress(s) + co.flush() |
|
else: |
|
co = zlib.compressobj(wbits=-zlib.MAX_WBITS) |
|
b = co.compress(s) + co.flush() |
|
return b64encode(''.join(map(chr, b)).encode('utf-8')) |
|
|
|
|
|
def json_encode(s): |
|
return json.dumps(s, separators=(',',':')).encode()
|
|
|