|
1
2
|
#! /usr/bin/env python3
|
|
3
4
5
6
7
8
|
import sys
sys.path.append('modules')
sys.path.append('vars')
sys.path.append('logger')
|
|
9
10
11
12
13
|
import locale
from dialog import Dialog
import glob
import os
import subprocess as sp
|
|
14
|
import tomb
|
|
15
|
import traceback
|
|
16
17
18
|
import logger
from consolelogger import ConsoleLogger
from filelogger import FileLogger
|
|
19
|
from hashlib import sha256
|
|
20
21
22
23
24
25
26
27
28
29
30
|
def getModules():
choiceList = []
modules = []
for filename in glob.glob('./modules/*.py'):
modules.append(os.path.splitext(os.path.basename(filename))[0])
modules.remove('__init__')
for modname in modules:
try:
module = __import__(modname)
|
|
31
|
instance = module.getInstance()
|
|
32
33
34
35
36
37
38
39
40
|
choiceList.append((instance.name,instance.description,False))
del instance
del module
sys.modules.pop(modname)
except Exception as e:
print("Exception raised while importing " + modname)
return choiceList
def prepareModule(moduleName):
|
|
41
42
43
44
45
|
try:
module = __import__(moduleName).getInstance()
module.getVars()
return module
except Exception as e:
|
|
46
47
|
raise
|
|
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
def sha256sum(file):
f = open(file, 'rb')
result = sha256(f.read()).hexdigest()
f.close()
return result
def bagAndTag():
tombPath = tomb.getPath()
hashes = open(tombPath + "hashes.txt",'a+')
for root, dirnames, filenames in os.walk(tombPath):
for dir in dirnames:
for subroot, subdirnames, subfilenames in os.walk(tombPath + dir):
for filename in subfilenames:
hashes.write(sha256sum(subroot + "/" + filename) + " " + subroot + "/" + filename + "\n")
|
|
63
|
hashes.close()
|
|
64
65
66
|
def finish(allSuccessful):
bagAndTag()
|
|
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
msg = ""
if(allSuccessful):
msg = "All modules finished execution"
else:
msg = "Some or all modules failed execution. Please check the logs."
code, tag = d.menu(msg, choices=[("Poweroff", "Shutdown the computer"),
("Reboot", "Reboot the computer"),
("Restart", "Run Gravedigger again")])
if (code == d.OK):
if tag == "Poweroff":
sp.call("poweroff", shell=True)
elif tag == "Reboot":
sp.call("reboot", shell=True)
|
|
82
|
logger.msgLog("Finished excavation of tomb: " + tomb.getPath(),"digger",logger.TYPE_INFO)
|
|
83
84
85
|
exit(0)
def showContinueDialog(d,msg):
|
|
86
87
88
89
90
91
|
code, tag = d.menu(msg + "\n\nDo you want to retry module configuration or continue execution without the module?",
choices=[("retry", "Retry configuration"),
("continue", "Continue without module")])
if code != d.OK:
return "abort"
return tag
|
|
92
93
94
95
96
97
98
99
|
if __name__ == "__main__":
locale.setlocale(locale.LC_ALL, '')
d = Dialog(dialog="dialog",autowidgetsize=True)
d.set_background_title("Gravedigger")
moduleList = getModules()
code,value = d.inputbox("Input computer's name")
|
|
100
|
if code == d.OK:
|
|
101
102
103
|
tomb._MACHINE_NAME= value
logger.logSystems.append(ConsoleLogger())
logger.logSystems.append(FileLogger(tomb.getPath() + "log.txt"))
|
|
104
|
logger.msgLog("Beginning excavation of tomb: " + tomb.getPath(),"digger",logger.TYPE_INFO)
|
|
105
106
107
108
109
110
|
d.set_background_title("Gravedigger - " + value)
code, tags = d.checklist("Select modules to execute",
choices=moduleList + [("all","Execute all modules",False)],
title="Module selection")
if code == d.OK:
runlist = []
|
|
111
|
if "all" in tags:
|
|
112
|
logger.msgLog("Selected modules: " + repr(moduleList), "digger", logger.TYPE_INFO)
|
|
113
|
for module in moduleList:
|
|
114
115
116
117
118
119
120
121
122
123
124
|
while True:
try:
mod = prepareModule(module[0])
runlist.append(mod)
break
except Exception as e:
msg = "Exception raised while preparing module \"" + module[0] + "\": " + str(e)
logger.msgLog(msg, module[0], logger.TYPE_ERROR)
#logger.msgLog(traceback.format_exc(), module[0], logger.TYPE_ERROR)
ans = showContinueDialog(d,msg)
if ans == "abort":
|
|
125
|
finish(False)
|
|
126
|
elif ans == "continue":
|
|
127
|
logger.msgLog("Skipping module " + module[0], "digger", logger.TYPE_INFO)
|
|
128
|
break
|
|
129
|
else:
|
|
130
|
logger.msgLog("Selected modules: " + repr(tags), "digger", logger.TYPE_INFO)
|
|
131
|
for tag in tags:
|
|
132
133
134
135
136
137
138
139
140
141
142
|
while True:
try:
mod = prepareModule(tag)
runlist.append(mod)
break
except Exception as e:
msg = "Exception raised while preparing module \"" + tag + "\": " + str(e)
logger.msgLog(msg,tag,logger.TYPE_ERROR)
#logger.msgLog(traceback.format_exc(), tag logger.TYPE_ERROR)
ans = showContinueDialog(d, msg)
if ans == "abort":
|
|
143
|
finish(False)
|
|
144
145
146
|
elif ans == "continue":
logger.msgLog("Skipping module " + tag, "digger", logger.TYPE_INFO)
break
|
|
147
|
|
|
148
149
|
sp.call('clear', shell=True)
for module in runlist:
|
|
150
|
logger.msgLog("Running " + module.name + "...", "digger", logger.TYPE_INFO)
|
|
151
152
153
|
try:
module.run()
except Exception as e:
|
|
154
155
|
logger.msgLog("Exception raised while running \"" + module.name + "\": " + str(e), module.name, logger.TYPE_ERROR)
#logger.msgLog(traceback.format_exc(), module.name, logger.TYPE_ERROR)
|
|
156
|
|
|
157
|
|
|
158
|
finish(True)
|