From 511ca4939798a6ae11f455053bb1aaa67fe7aa2f Mon Sep 17 00:00:00 2001 From: Gregory Soutade Date: Tue, 13 Jan 2015 18:57:26 +0100 Subject: [PATCH] Add track users plugin --- plugins/display/track_users.py | 112 +++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 plugins/display/track_users.py diff --git a/plugins/display/track_users.py b/plugins/display/track_users.py new file mode 100644 index 0000000..8a27fa8 --- /dev/null +++ b/plugins/display/track_users.py @@ -0,0 +1,112 @@ +# -*- coding: utf-8 -*- +# +# Copyright Grégory Soutadé 2015 + +# This file is part of iwla + +# iwla 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 3 of the License, or +# (at your option) any later version. +# +# iwla 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 iwla. If not, see . +# + +from iwla import IWLA +from iplugin import IPlugin +from display import * + +import awstats_data + +""" +Display hook + +Track users + +Plugin requirements : + None + +Conf values needed : + tracked_ip + create_tracked_page* + +Output files : + OUTPUT_ROOT/year/month/index.html + OUTPUT_ROOT/year/month/tracked_users.html + +Statistics creation : + None + +Statistics update : + None + +Statistics deletion : + None +""" + +class IWLADisplayTrackUsers(IPlugin): + def __init__(self, iwla): + super(IWLADisplayTrackUsers, self).__init__(iwla) + self.API_VERSION = 1 + self.conf_requires = ['tracked_ip'] + + def load(self): + self.create_tracked_page = self.iwla.getConfValue('create_tracked_page', True) + self.tracked_ip = self.iwla.getConfValue('tracked_ip', []) + + return True + + def hook(self): + display = self.iwla.getDisplay() + hits = self.iwla.getCurrentVisists() + + # All in a page + if self.create_tracked_page: + title = createCurTitle(self.iwla, u'Tracked users') + filename = 'tracked_users.html' + path = self.iwla.getCurDisplayPath(filename) + + page = display.createPage(title, path, self.iwla.getConfValue('css_path', [])) + table = display.createBlock(DisplayHTMLBlockTable, self.iwla._(u'Tracked users'), [self.iwla._(u'Page'), self.iwla._(u'Last Access')]) + for ip in self.tracked_ip: + if not ip in hits.keys(): continue + if 'dns_name_replaced' in hits[ip].keys(): + ip_title = '%s [%s]' % (ip, hits[ip][remote_addr]) + else: + ip_title = '%s' % (ip) + table.appendRow([ip_title, '']) + for r in hits[ip]['requests'][::-1]: + uri = r['extract_request']['extract_uri'].lower() + if not self.iwla.isPage(uri) or\ + self.iwla.isMultimediaFile(uri) or\ + not self.iwla.hasBeenViewed(r): + continue + + uri = "%s%s" % (r.get('server_name', ''), + r['extract_request']['extract_uri']) + table.appendRow([generateHTMLLink(uri), time.asctime(r['time_decoded'])]) + page.appendBlock(table) + + display.addPage(page) + + # Last access in index + title = self.iwla._(u'Tracked users') + if self.create_tracked_page: + link = '%s' % (filename, self.iwla._(u'Details')) + title = '%s - %s' % (title, link) + + index = self.iwla.getDisplayIndex() + + table = display.createBlock(DisplayHTMLBlockTable, title, [self.iwla._(u'IP'), self.iwla._(u'Last Access')]) + for ip in self.tracked_ip: + if not ip in hits.keys(): continue + if 'dns_name_replaced' in hits[ip].keys(): + ip = '%s [%s]' % (ip, hits[ip][remote_addr]) + table.appendRow([ip, time.asctime(hits[ip]['last_access'])]) + index.appendBlock(table)