# -*- coding: UTF-8 -*-
"""
module vinreport.py
-----------------------------------------------------------------------------
Vinetto : a forensics tool to examine Thumbs.db files
Copyright (C) 2005, 2006 by Michel Roukine
This file is part of Vinetto.
Vinetto is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as published
by the Free Software Foundation; either version 2 of the License, or (at
your option) any later version.
Vinetto is distributed in the hope that it will be
useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License along
with the vinetto package; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-----------------------------------------------------------------------------
"""
__revision__ = "$Revision: 47 $"
__version__ = "0.02"
__author__ = 'Michel Roukine'
HtHeader = []
HtPicRow = []
HtOrphans = []
HtFooter = []
IMGTAG = "
"
from time import time, ctime
from os.path import dirname, basename, abspath, getmtime
from vinutils import getCatEntry
class Report:
""" Vinetto report SuperClass. """
def __init__ (self, target, outputdir, verstr):
""" Initialize a new Report instance. """
self.tDBfname = basename(target)
self.tDBdirname = abspath(dirname(target))
self.tDBmtime = getmtime(target)
self.outputdir = outputdir
self.verstr = verstr
class HtRep(Report):
""" Html vinetto elementary mode report Class. """
def __init__ (self, tDBfname, outputdir, charset, verstr):
""" Initialize a new HtRep instance. """
Report.__init__(self, tDBfname, outputdir, verstr)
self.rownumber = 0
separatorID = 0
for ligne in open("/usr/share/vinetto/HtRepTemplate.html",
"r").readlines():
if ligne.find("__CHARSET__") > 0:
ligne = ligne.replace("__CHARSET__", charset)
if ligne.find("__ITS__") >= 0:
separatorID += 1
continue
if separatorID == 0:
HtHeader.append(ligne)
elif separatorID == 1:
HtPicRow.append(ligne)
elif separatorID == 2:
HtOrphans.append(ligne)
elif separatorID == 3:
HtFooter.append(ligne)
self.TNidList = []
self.TNtsList = []
self.TNnameList = []
def SetFileSection (self, FileSize, md5):
""" Initialize data of the report file section. """
self.FileSize = FileSize
self.md5 = md5
def SetREtst (self, REtst):
""" Initialize data of the report file section. """
self.REtst = REtst
def headwrite (self):
""" Writes report header. """
self.repfile = open(self.outputdir + "index.html", "w")
for ligne in HtHeader:
ligne = ligne.replace("__DATEREPORT__", "Report date : " + ctime(time()))
ligne = ligne.replace("__TDBDIRNAME__", self.tDBdirname)
ligne = ligne.replace("__TDBFNAME__", self.tDBfname)
ligne = ligne.replace("__TDBMTIME__", ctime(self.tDBmtime))
ligne = ligne.replace("__FILESIZE__", str(self.FileSize))
ligne = ligne.replace("__MD5__", self.md5)
ligne = ligne.replace("__ROOTENTRYTST__", \
"Root Entry modify timestamp : " + self.REtst)
self.repfile.write(ligne)
def close(self, statstring):
""" Terminate processing HtRep instance. """
for ligne in HtFooter:
ligne = ligne.replace("__TYPEXTRACT__", statstring)
ligne = ligne.replace("__VVERSION__", "Vinetto " + self.verstr)
self.repfile.write(ligne)
self.repfile.close()
def rowflush(self):
""" Process a report line. """
self.rownumber += 1
for ligne in HtPicRow:
ligne = ligne.replace("__ROWNUMBER__", str(self.rownumber))
for j in range(len(self.tnId)):
ligne = ligne.replace("__TNfilled__" + str(j), "1")
buff = IMGTAG.replace("__TNFNAME__", self.tnFname[j])
buff = buff.replace("__TNNAME__", self.tnName[j])
ligne = ligne.replace("__IMGTAG__" + str(j), buff)
ligne = ligne.replace("__TNID__" + str(j), self.tnId[j])
for j in range(len(self.tnId),5):
ligne = ligne.replace("__TNfilled__" + str(j), "0")
ligne = ligne.replace("__IMGTAG__" + str(j), " ")
ligne = ligne.replace("__TNID__" + str(j), " ")
self.repfile.write(ligne)
self.repfile.write("
")
for i in range(len(self.tnId)):
if self.tnName[i] != "":
self.repfile.write("" + self.tnId[i] + " -- " + \
self.tnTs[i].replace(" ", " ") + " -- " + \
self.tnName[i] + " |