From c0fc5a01314ac36abe87cbc6c3611e48365ed312 Mon Sep 17 00:00:00 2001 From: Gregory Soutade Date: Fri, 4 Nov 2022 20:04:08 +0100 Subject: [PATCH] Add user agent in filter users display and limit filtered users to 10 in index --- plugins/display/filter_users.py | 48 +++++++++++++++++---------------- 1 file changed, 25 insertions(+), 23 deletions(-) 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)