1+ from Core .loaders .Stealth .PackagesUI import *
2+ from PyQt4 .QtWebKit import QWebView
3+
4+ """
5+ Description:
6+ This program is a module for wifi-pumpkin.py. Report FIles Logger PDF or HTML
7+
8+ Copyright:
9+ Copyright (C) 2015-2016 Marcos Nesster P0cl4bs Team
10+ This program is free software: you can redistribute it and/or modify
11+ it under the terms of the GNU General Public License as published by
12+ the Free Software Foundation, either version 3 of the License, or
13+ (at your option) any later version.
14+
15+ This program is distributed in the hope that it will be useful,
16+ but WITHOUT ANY WARRANTY; without even the implied warranty of
17+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18+ GNU General Public License for more details.
19+
20+ You should have received a copy of the GNU General Public License
21+ along with this program. If not, see <http://www.gnu.org/licenses/>
22+ """
23+
24+ class frm_ReportLogger (PumpkinModule ):
25+ ''' called report logger in files '''
26+ def __init__ (self ,sessions ,parent = None ):
27+ super (frm_ReportLogger , self ).__init__ (parent )
28+ self .setWindowTitle ('WiFi-Pumpkin - Report Logger' )
29+ self .loadtheme (self .configure .XmlThemeSelected ())
30+ self .setGeometry (0 ,0 ,320 ,400 )
31+ self .Main = QVBoxLayout ()
32+ self .sessions = sessions
33+ self .center ()
34+ self .GUI ()
35+
36+ def addcheckListView_loggerFIles (self ,unchecked ,key ,enable = None ,checked = None ,session = '' ):
37+ # add in listview all logger files
38+ empty = Refactor .exportHtml (unchecked ,sessionID = session )[key ]
39+ for loggerfile in empty :
40+ item = QStandardItem (loggerfile )
41+ check = Qt .Checked if checked == True else Qt .Unchecked
42+ item .setCheckState (check )
43+ item .setEnabled (enable )
44+ item .setCheckable (True )
45+ self .model .appendRow (item )
46+
47+ def get_all_items_Unchecked (self ):
48+ # get all items desabled from row
49+ all_items_row = {}
50+ for index in range (self .model .rowCount ()):
51+ item = self .model .item (index )
52+ if item .isCheckable () and item .checkState () == Qt .Unchecked :
53+ all_items_row [str (item .text ())] = False
54+ return all_items_row
55+
56+ def convertIt (self ,printer ):
57+ # generate file pdf
58+ self .ExportPDF .print_ (printer )
59+ QMessageBox .information (self , 'WiFi Pumpkin Report PDF' , 'file PDF has been generated with success.' )
60+
61+ def exportFilesSystem (self ):
62+ # export HTML or pdf file
63+ all_unchecked = self .get_all_items_Unchecked ()
64+ if not self .checkHTML .isChecked () and not self .checkPDF .isChecked ():
65+ return QMessageBox .warning (self , 'WiFi Pumpkin Options' ,
66+ 'You have to select a <strong>option</strong> file type for export.' )
67+ if len (all_unchecked .keys ()) == 9 :
68+ return QMessageBox .warning (self , 'WiFi Pumpkin empty session' ,
69+ 'logger:ERROR Could not find log files.' )
70+
71+ sessions_activated = ''
72+ apname = self .configure .Settings .get_setting ('accesspoint' ,'APname' )
73+ for key in self .sessions .keys ():
74+ if str (self .CB_Data_Logger .currentText ()) == self .sessions [key ]['started' ]:
75+ contents = Refactor .exportHtml (all_unchecked ,key ,
76+ [self .sessions [key ]['started' ],self .sessions [key ]['stoped' ]],apname )
77+ sessions_activated = key
78+ break
79+ if sessions_activated == '' :
80+ contents = Refactor .exportHtml (all_unchecked ,sessions_activated )
81+
82+ if self .checkHTML .isChecked ():
83+ filename = QFileDialog .getSaveFileNameAndFilter (self ,
84+ 'Save File Logger as HTML' ,'report.html' ,'HTML (*.html)' )
85+ if len (filename [0 ]) != 0 :
86+ with open (str (filename [0 ]),'w' ) as filehtml :
87+ filehtml .write (contents ['HTML' ]),filehtml .close ()
88+ QMessageBox .information (self , 'WiFi Pumpkin Report HTML' , 'file has been saved with success.' )
89+
90+ elif self .checkPDF .isChecked ():
91+ filename = QFileDialog .getSaveFileNameAndFilter (self ,
92+ 'Save File Logger as PDF' ,'report.pdf' ,'PDF (*.pdf)' )
93+ if len (filename [0 ]) != 0 :
94+ self .ExportPDF .setHtml (contents ['HTML' ])
95+ printer = QPrinter ()
96+ printer .setPageSize (QPrinter .A4 )
97+ printer .setOutputFormat (QPrinter .PdfFormat )
98+ printer .setOutputFileName (filename [0 ])
99+ self .convertIt (printer )
100+
101+ @pyqtSlot (QModelIndex )
102+ def combo_clicked (self , session ):
103+ # get activated logger files
104+ self .model .clear ()
105+ sessions_activated = ''
106+ for key in self .sessions .keys ():
107+ if session == self .sessions [key ]['started' ]:
108+ self .labelStart .setText (self .sessions [key ]['started' ])
109+ self .labelStop .setText (self .sessions [key ]['stoped' ])
110+ sessions_activated = key
111+ break
112+ all_unchecked = self .get_all_items_Unchecked ()
113+ self .addcheckListView_loggerFIles (all_unchecked ,'activated_Files' ,enable = True ,
114+ checked = True ,session = sessions_activated )
115+ self .addcheckListView_loggerFIles (all_unchecked ,'empty_files' ,enable = False ,
116+ checked = False ,session = sessions_activated )
117+
118+ def GUI (self ):
119+ self .frm0 = QFormLayout ()
120+ self .model = QStandardItemModel ()
121+ self .viewlogger = QListView ()
122+ self .widget = QWidget ()
123+ self .layout = QVBoxLayout (self .widget )
124+
125+ self .ExportPDF = QWebView ()
126+
127+ # check all files logger empty or round
128+ self .viewlogger .setModel (self .model )
129+ self .layout .addLayout (self .frm0 )
130+
131+ # group file type
132+ self .GroupBoxFile = QGroupBox ()
133+ self .layoutGroupFile = QVBoxLayout ()
134+ self .GroupBoxFile .setLayout (self .layoutGroupFile )
135+ self .GroupBoxFile .setTitle ('Options:' )
136+ self .checkHTML = QRadioButton ('HTML' )
137+ self .checkPDF = QRadioButton ('PDF' )
138+ self .layoutGroupFile .addWidget (self .checkHTML )
139+ self .layoutGroupFile .addWidget (self .checkPDF )
140+
141+ # group informations
142+ self .GroupBoxINFO = QGroupBox ()
143+ self .layoutGroupINFO = QFormLayout ()
144+ self .GroupBoxINFO .setLayout (self .layoutGroupINFO )
145+ self .GroupBoxINFO .setTitle ('Information:' )
146+ self .labelStart = QLabel ()
147+ self .labelStop = QLabel ()
148+ self .layoutGroupINFO .addRow ('started AP at:' ,self .labelStart )
149+ self .layoutGroupINFO .addRow ('stoped AP at:' ,self .labelStop )
150+
151+ # get all session data add combobox
152+ self .CB_Data_Logger = QComboBox (self )
153+ all_sessions = []
154+ for key in self .sessions .keys ():
155+ all_sessions .append (self .sessions [key ]['started' ])
156+ all_sessions .append ('select All logger file...' )
157+ self .CB_Data_Logger .addItems (all_sessions )
158+ self .connect (self .CB_Data_Logger , SIGNAL ('activated(QString)' ), self .combo_clicked )
159+ index = self .CB_Data_Logger .findText (all_sessions [len (all_sessions )- 2 ], Qt .MatchFixedString )
160+ self .CB_Data_Logger .setCurrentIndex (index )
161+ self .combo_clicked (self .CB_Data_Logger .currentText ())
162+
163+ self .btnSave = QPushButton ('Export' )
164+ self .btnSave .clicked .connect (self .exportFilesSystem )
165+
166+ self .frm0 .addRow ('Session:' ,self .CB_Data_Logger )
167+ self .frm0 .addRow (self .GroupBoxINFO )
168+ self .frm0 .addRow (self .viewlogger )
169+ self .frm0 .addRow (self .GroupBoxFile )
170+ self .frm0 .addRow (self .btnSave )
171+
172+ self .Main .addWidget (self .widget )
173+ self .setLayout (self .Main )
0 commit comments