diff --git a/plugins/display/filter_users.py b/plugins/display/filter_users.py
index ddc3a2a..bc81899 100644
--- a/plugins/display/filter_users.py
+++ b/plugins/display/filter_users.py
@@ -53,18 +53,17 @@ class IWLADisplayFilterUsers(IPlugin):
def __init__(self, iwla):
super(IWLADisplayFilterUsers, self).__init__(iwla)
self.API_VERSION = 1
-
- def load(self):
+ self.requires = ['IWLAPostAnalysisFilterUsers']
self.create_filtered_page = self.iwla.getConfValue('create_filtered_page', True)
- return True
-
+
def hook(self):
display = self.iwla.getDisplay()
hits = self.iwla.getValidVisitors()
stats = {}
self.filtered_users = []
- for (key,value) in hits.items():
+ _hits = sorted(hits.items(), key=lambda x: x[1]['last_access'], reverse=True)
+ for (key,value) in _hits:
if value.get('filtered', False):
self.filtered_users.append(value)
@@ -75,30 +74,30 @@ class IWLADisplayFilterUsers(IPlugin):
path = self.iwla.getCurDisplayPath(filename)
page = display.createPage(title, path, self.iwla.getConfValue('css_path', []))
- table = display.createBlock(DisplayHTMLBlockTable, self.iwla._(u'Filtered users'), [self.iwla._(u'Pages'), self.iwla._(u'Last Access')])
- table.setColsCSSClass(['iwla_page', ''])
+ table = display.createBlock(DisplayHTMLBlockTable, self.iwla._(u'Filtered users'), [self.iwla._(u'Pages'), self.iwla._(u'Last Access'), self.iwla._(u'User Agent')])
+ table.setColsCSSClass(['iwla_page', '', ''])
+ row = 0
+ unknown = self.iwla._('Unknown')
for filtered_user in self.filtered_users:
ip = filtered_user['remote_ip']
+ ip_title = ip
if 'dns_name_replaced' in hits[ip].keys():
- ip_title = '%s [%s]' % (hits[ip]['remote_addr'], ip)
- else:
- ip_title = '%s' % (ip)
- table.appendRow([ip_title, ''])
- nb_hits = 0
- nb_pages = 0
+ ip_title = '%s [%s]' % (hits[ip]['remote_addr'], ip)
+ if filtered_user.get('operating_system', 'android') not in ('android', 'ios_iphone'):
+ location = filtered_user.get('geo_location', {})
+ if location:
+ location_str = '(%s/%s)' % (location.get('city', unknown), location.get('countryname', unknown))
+ ip_title = f'{ip_title}
{location_str}'
+ table.appendRow([f'{ip_title}', '', ''])
+ table.setCellCSSClass(row, 0, '')
for r in hits[ip]['requests'][::-1]:
uri = r['extract_request']['extract_uri'].lower()
+ if not self.iwla.isPage(uri): continue
if not self.iwla.hasBeenViewed(r): continue
- if not self.iwla.isPage(uri) or\
- self.iwla.isMultimediaFile(uri):
- nb_hits += 1
- continue
- nb_pages += 1
uri = "%s%s" % (r.get('server_name', ''),
r['extract_request']['extract_uri'])
- table.appendRow([generateHTMLLink(uri), time.asctime(r['time_decoded'])])
- stats[ip] = (nb_pages, nb_hits)
+ table.appendRow([generateHTMLLink(uri), time.asctime(r['time_decoded']), r['http_user_agent']])
page.appendBlock(table)
display.addPage(page)
@@ -111,13 +110,16 @@ class IWLADisplayFilterUsers(IPlugin):
index = self.iwla.getDisplayIndex()
- table = display.createBlock(DisplayHTMLBlockTable, title, [self.iwla._(u'Host'), self.iwla._(u'Last Access'), self.iwla._(u'Pages'), self.iwla._(u'Hits')])
+ table = display.createBlock(DisplayHTMLBlockTable, title, [self.iwla._(u'Host'), self.iwla._(u'Pages'), self.iwla._(u'Hits'), self.iwla._(u'Last Access')])
table.setColsCSSClass(['', '', 'iwla_page', 'iwla_hit'])
- for filtered_user in self.filtered_users:
+ for filtered_user in self.filtered_users[:10]:
ip = filtered_user['remote_ip']
if 'dns_name_replaced' in hits[ip].keys():
ip_title = '%s [%s]' % (hits[ip]['remote_addr'], ip)
else:
ip_title = ip
- table.appendRow([ip_title, time.asctime(hits[ip]['last_access']), stats[ip][0], stats[ip][1]])
+ table.appendRow([ip_title, filtered_user['viewed_pages'][0], filtered_user['viewed_hits'][0], time.asctime(hits[ip]['last_access'])])
+ if len(self.filtered_users) > 10:
+ table.appendRow([self.iwla._(u'Others'), len(self.filtered_users)-10, '', ''])
+ table.setCellCSSClass(table.getNbRows()-1, 0, 'iwla_others')
index.appendBlock(table)