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.
84 lines
2.3 KiB
84 lines
2.3 KiB
#!/usr/bin/env python |
|
|
|
import crochet |
|
import glob |
|
import pappyproxy |
|
|
|
import zipfile |
|
import tarfile |
|
|
|
try: |
|
import bz2 |
|
except ImportError: |
|
bz2 = None |
|
print "BZ2 not installed on your system" |
|
|
|
from base64 import b64encode, b64decode |
|
from os import getcwd, sep, path, urandom |
|
|
|
|
|
class Compress(object): |
|
def __init__(self, sessconfig): |
|
self.config = sessconfig |
|
self.zip_archive = sessconfig.archive |
|
self.bz2_archive = sessconfig.archive |
|
|
|
def compress_project(self): |
|
if bz2: |
|
self.tar_project() |
|
else: |
|
self.zip_project() |
|
|
|
def decompress_project(self): |
|
if bz2: |
|
self.untar_project() |
|
else: |
|
self.unzip_project() |
|
|
|
def zip_project(self): |
|
""" |
|
Zip project files |
|
|
|
Using append mode (mode='a') will create a zip archive |
|
if none exists in the project. |
|
""" |
|
try: |
|
zf = zipfile.ZipFile(self.zip_archive, mode="a") |
|
zf.write(self.config.crypt_dir) |
|
zf.close() |
|
except zipfile.LargeZipFile as e: |
|
raise PappyException("Project zipfile too large. Error: ", e) |
|
|
|
def unzip_project(self): |
|
""" |
|
Extract project files from decrypted zip archive. |
|
Initially checks the zip archive's magic number and |
|
attempts to extract pappy.json to validate integrity |
|
of the zipfile. |
|
""" |
|
if not zipfile.is_zipfile(self.zip_archive): |
|
raise PappyException("Project archive corrupted.") |
|
|
|
zf = zipfile.ZipFile(self.zip_archive) |
|
|
|
try: |
|
zf.extract("config.json") |
|
except zipfile.BadZipfile as e: |
|
raise PappyException("Zip archive corrupted. Error: ", e) |
|
|
|
zf.extractall() |
|
|
|
def tar_project(self): |
|
archive = tarfile.open(self.bz2_archive, 'w:bz2') |
|
|
|
archive.add(self.config.crypt_dir) |
|
archive.close() |
|
|
|
def untar_project(self): |
|
if tarfile.is_tarfile(self.bz2_archive): |
|
# Raise exception if there is a failure |
|
try: |
|
with tarfile.open(self.bz2_archive, "r:bz2") as archive: |
|
archive.extractall() |
|
except tarfile.ExtractError as e: |
|
raise PappyException("Tar archive corrupted. Error: ", e)
|
|
|