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