diff --git a/freeradius_utils/auth.py b/freeradius_utils/auth.py index b25fa003..aafa0a50 100644 --- a/freeradius_utils/auth.py +++ b/freeradius_utils/auth.py @@ -35,20 +35,16 @@ https://github.com/FreeRADIUS/freeradius-server/blob/master/src/modules/rlm_pyth Inspiré du travail de Daniel Stan au Crans """ -import logging -import netaddr -import radiusd # Module magique freeradius (radiusd.py is dummy) -import binascii -import hashlib import os import sys +import logging +import radiusd # Module magique freeradius (radiusd.py is dummy) + from django.core.wsgi import get_wsgi_application - -import argparse - from django.db.models import Q + from machines.models import Interface, IpList, Nas, Domain -from topologie.models import Room, Port, Switch +from topologie.models import Port, Switch from users.models import User from preferences.models import OptionalTopologie @@ -109,7 +105,8 @@ def radius_event(fun): tuples en entrée en un dictionnaire.""" def new_f(auth_data): - if type(auth_data) == dict: + """ The function transforming the tuples as dict """ + if isinstance(auth_data, dict): data = auth_data else: data = dict() @@ -188,6 +185,9 @@ def authorize(data): @radius_event def post_auth(data): + """ Function called after the user is authenticated + """ + nas = data.get('NAS-IP-Address', data.get('NAS-Identifier', None)) nas_instance = find_nas_from_request(nas) # Toutes les reuquètes non proxifiées @@ -220,7 +220,7 @@ def post_auth(data): .filter(stack_member_id=id_stack_member) .prefetch_related( 'interface_set__domain__extension' - ) + ) .first()) # On récupère le numéro du port sur l'output de freeradius. # La ligne suivante fonctionne pour cisco, HP et Juniper @@ -229,7 +229,7 @@ def post_auth(data): sw_name, room, reason, vlan_id = out log_message = '(fil) %s -> %s [%s%s]' % ( - sw_name + u":" + port + u"/" + unicode(room), + sw_name + u":" + port + u"/" + str(room), mac, vlan_id, (reason and u': ' + reason).encode('utf-8') @@ -251,6 +251,7 @@ def post_auth(data): return radiusd.RLM_MODULE_OK +# TODO : remove this function @radius_event def dummy_fun(_): """Do nothing, successfully. (C'est pour avoir un truc à mettre)""" @@ -259,11 +260,12 @@ def dummy_fun(_): def detach(_=None): """Appelé lors du déchargement du module (enfin, normalement)""" - print "*** goodbye from auth.py ***" + print("*** goodbye from auth.py ***") return radiusd.RLM_MODULE_OK def find_nas_from_request(nas_id): + """ Get the nas object from its ID """ nas = (Interface.objects .filter( Q(domain=Domain.objects.filter(name=nas_id)) | @@ -443,7 +445,7 @@ def decide_vlan_and_register_switch(nas_machine, nas_type, port_number, return (sw_name, room, u'Erreur dans le register mac %s' % ( - reason + unicode(mac_address) + reason + str(mac_address) ), VLAN_NOK) else: diff --git a/logs/__init__.py b/logs/__init__.py index df6e4256..20338670 100644 --- a/logs/__init__.py +++ b/logs/__init__.py @@ -20,5 +20,8 @@ # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +"""logs +The app in charge of the stats and logs of what's happening in re2o +""" from .acl import * diff --git a/logs/admin.py b/logs/admin.py deleted file mode 100644 index bcdc4f1d..00000000 --- a/logs/admin.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- mode: python; coding: utf-8 -*- -# Re2o est un logiciel d'administration développé initiallement au rezometz. Il -# se veut agnostique au réseau considéré, de manière à être installable en -# quelques clics. -# -# Copyright © 2017 Gabriel Détraz -# Copyright © 2017 Goulven Kermarec -# Copyright © 2017 Augustin Lemesle -# -# This program 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 2 of the License, or -# (at your option) any later version. -# -# This program 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 this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -from __future__ import unicode_literals - -from django.contrib import admin - -# Register your models here. diff --git a/logs/models.py b/logs/models.py deleted file mode 100644 index 934704ba..00000000 --- a/logs/models.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- mode: python; coding: utf-8 -*- -# Re2o est un logiciel d'administration développé initiallement au rezometz. Il -# se veut agnostique au réseau considéré, de manière à être installable en -# quelques clics. -# -# Copyright © 2017 Gabriel Détraz -# Copyright © 2017 Goulven Kermarec -# Copyright © 2017 Augustin Lemesle -# -# This program 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 2 of the License, or -# (at your option) any later version. -# -# This program 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 this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -from __future__ import unicode_literals - -from django.db import models - -# Create your models here. diff --git a/logs/templatetags/logs_extra.py b/logs/templatetags/logs_extra.py index e67d8df2..97f60ec8 100644 --- a/logs/templatetags/logs_extra.py +++ b/logs/templatetags/logs_extra.py @@ -20,6 +20,9 @@ # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +"""logs.templatetags.logs_extra +A templatetag to get the class name for a given object +""" from django import template @@ -28,4 +31,5 @@ register = template.Library() @register.filter def classname(obj): + """ Returns the object class name """ return obj.__class__.__name__ diff --git a/logs/tests.py b/logs/tests.py index 21fa6d24..65679fa3 100644 --- a/logs/tests.py +++ b/logs/tests.py @@ -19,7 +19,10 @@ # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +"""logs.tests +The tests for the Logs module. +""" -from django.test import TestCase +# from django.test import TestCase # Create your tests here. diff --git a/logs/views.py b/logs/views.py index 8763faa6..afb0a118 100644 --- a/logs/views.py +++ b/logs/views.py @@ -46,8 +46,6 @@ from django.db.models import Count, Max from reversion.models import Revision from reversion.models import Version, ContentType -from time import time - from users.models import ( User, ServiceUser, @@ -109,15 +107,6 @@ from re2o.acl import ( from re2o.utils import all_active_assigned_interfaces_count from re2o.utils import all_active_interfaces_count, SortTable -STATS_DICT = { - 0: ["Tout", 36], - 1: ["1 mois", 1], - 2: ["2 mois", 2], - 3: ["6 mois", 6], - 4: ["1 an", 12], - 5: ["2 an", 24], -} - @login_required @can_view_app('logs') @@ -418,12 +407,6 @@ def stats_users(request): nombre de machines par user, d'etablissements par user, de moyens de paiements par user, de banque par user, de bannissement par user, etc""" - onglet = request.GET.get('onglet') - try: - _search_field = STATS_DICT[onglet] - except KeyError: - _search_field = STATS_DICT[0] - onglet = 0 stats = { 'Utilisateur': { 'Machines': User.objects.annotate( @@ -458,11 +441,7 @@ def stats_users(request): ).order_by('-num')[:10], }, } - return render(request, 'logs/stats_users.html', { - 'stats_list': stats, - 'stats_dict': STATS_DICT, - 'active_field': onglet - }) + return render(request, 'logs/stats_users.html', {'stats_list': stats}) @login_required @@ -485,7 +464,6 @@ def stats_actions(request): @can_view_app('users') def stats_droits(request): """Affiche la liste des droits et les users ayant chaque droit""" - depart = time() stats_list = {} for droit in ListRight.objects.all().select_related('group_ptr'):