summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/archive.py29
-rw-r--r--lib/mat.py11
-rw-r--r--lib/parser.py4
3 files changed, 30 insertions, 14 deletions
diff --git a/lib/archive.py b/lib/archive.py
index aa2a47f..c31fac6 100644
--- a/lib/archive.py
+++ b/lib/archive.py
@@ -13,11 +13,12 @@ class GenericArchiveStripper(parser.Generic_parser):
13 ''' 13 '''
14 Represent a generic archive 14 Represent a generic archive
15 ''' 15 '''
16 def __init__(self, realname, filename, parser, editor, backup): 16 def __init__(self, realname, filename, parser, editor, backup, add2archive):
17 super(GenericArchiveStripper, self).__init__(realname, 17 super(GenericArchiveStripper, self).__init__(realname,
18 filename, parser, editor, backup) 18 filename, parser, editor, backup, add2archive)
19 self.compression = '' 19 self.compression = ''
20 self.folder_list = [] 20 self.folder_list = []
21 self.add2archive = add2archive
21 22
22 def remove_folder(self): 23 def remove_folder(self):
23 [shutil.rmtree(folder) for folder in self.folder_list] 24 [shutil.rmtree(folder) for folder in self.folder_list]
@@ -49,13 +50,18 @@ class ZipStripper(GenericArchiveStripper):
49 zipin.extract(item) 50 zipin.extract(item)
50 if os.path.isfile(item.filename): 51 if os.path.isfile(item.filename):
51 try: 52 try:
52 cfile = mat.create_class_file(item.filename, False) 53 cfile = mat.create_class_file(item.filename, False,
54 self.add2archive)
53 cfile.remove_all() 55 cfile.remove_all()
54 logging.debug('Processing %s from %s' % (item.filename, 56 logging.debug('Processing %s from %s' % (item.filename,
55 self.filename)) 57 self.filename))
58 zipout.write(item.filename)
56 except: 59 except:
57 print('%s\' filefomart is not supported'%item.filename) 60 logging.info('%s\' filefomart is not supported' %
58 zipout.write(item.filename) 61 item.filename)
62 if self.add2archive:
63 zipout.write(item.filename)
64 mat.secure_remove(item.filename)
59 else: 65 else:
60 self.folder_list.insert(0, item.filename) 66 self.folder_list.insert(0, item.filename)
61 logging.info('%s treated' % self.filename) 67 logging.info('%s treated' % self.filename)
@@ -84,11 +90,15 @@ class TarStripper(GenericArchiveStripper):
84 if current_file.type is '0': #is current_file a regular file ? 90 if current_file.type is '0': #is current_file a regular file ?
85 #no backup file 91 #no backup file
86 try: 92 try:
87 cfile = mat.create_class_file(current_file.name, False) 93 cfile = mat.create_class_file(current_file.name, False,
94 self.add2archive)
88 cfile.remove_all() 95 cfile.remove_all()
96 tarout.add(current_file.name, filter=self._remove)
89 except: 97 except:
90 print('%s\' format is not supported'%current_file.name) 98 logging.info('%s\' format is not supported' %
91 tarout.add(current_file.name, filter=self._remove) 99 current_file.name)
100 if self.add2archive:
101 tarout.add(current_file.name, filter=self._remove)
92 mat.secure_remove(current_file.name) 102 mat.secure_remove(current_file.name)
93 else: 103 else:
94 self.folder_list.insert(0, current_file.name) 104 self.folder_list.insert(0, current_file.name)
@@ -123,7 +133,8 @@ class TarStripper(GenericArchiveStripper):
123 tarin.extract(current_file) 133 tarin.extract(current_file)
124 if current_file.type is '0': #is current_file a regular file ? 134 if current_file.type is '0': #is current_file a regular file ?
125 #no backup file 135 #no backup file
126 class_file = mat.create_class_file(current_file.name, False) 136 class_file = mat.create_class_file(current_file.name, False,
137 self.add2archive)
127 if not class_file.is_clean():#if the extracted file is not clean 138 if not class_file.is_clean():#if the extracted file is not clean
128 mat.secure_remove(current_file.name) #remove it 139 mat.secure_remove(current_file.name) #remove it
129 self.remove_folder() #remove all the remaining folders 140 self.remove_folder() #remove all the remaining folders
diff --git a/lib/mat.py b/lib/mat.py
index 1d7f53b..49a84f1 100644
--- a/lib/mat.py
+++ b/lib/mat.py
@@ -52,14 +52,16 @@ def is_secure(filename):
52 52
53 if not(os.path.isfile(filename)): #check if the file exist 53 if not(os.path.isfile(filename)): #check if the file exist
54 logging.error("Error: %s is not a valid file" % filename) 54 logging.error("Error: %s is not a valid file" % filename)
55 return 55 return False
56 56
57def create_class_file(name, backup): 57def create_class_file(name, backup, add2archive):
58 ''' 58 '''
59 return a $FILETYPEStripper() class, 59 return a $FILETYPEStripper() class,
60 corresponding to the filetype of the given file 60 corresponding to the filetype of the given file
61 ''' 61 '''
62 is_secure(name) 62 if is_secure(name):
63 print 'a'
64 return
63 65
64 filename = "" 66 filename = ""
65 realname = name 67 realname = name
@@ -83,4 +85,5 @@ def create_class_file(name, backup):
83 return 85 return
84 if editor.input.__class__ == hachoir_parser.misc.PDFDocument: 86 if editor.input.__class__ == hachoir_parser.misc.PDFDocument:
85 return stripper_class(filename, realname, backup) 87 return stripper_class(filename, realname, backup)
86 return stripper_class(realname, filename, parser, editor, backup) 88 return stripper_class(realname, filename, parser, editor, backup,
89 add2archive)
diff --git a/lib/parser.py b/lib/parser.py
index 2b7b52e..6e6ee34 100644
--- a/lib/parser.py
+++ b/lib/parser.py
@@ -5,16 +5,18 @@
5import hachoir_core.error 5import hachoir_core.error
6import hachoir_parser 6import hachoir_parser
7import hachoir_editor 7import hachoir_editor
8
8import sys 9import sys
9import os 10import os
10import subprocess 11import subprocess
11import mimetypes 12import mimetypes
13
12import mat 14import mat
13 15
14POSTFIX = ".cleaned" 16POSTFIX = ".cleaned"
15 17
16class Generic_parser(object): 18class Generic_parser(object):
17 def __init__(self, realname, filename, parser, editor, backup): 19 def __init__(self, realname, filename, parser, editor, backup, add2archive):
18 self.filename = filename 20 self.filename = filename
19 self.realname = realname 21 self.realname = realname
20 self.shortname = os.path.basename(filename) 22 self.shortname = os.path.basename(filename)