mirror of
https://gitlab2.federez.net/re2o/re2o
synced 2024-11-27 07:02:26 +00:00
Adapte auth.py au nouveau système de switchs + optimisations forms
This commit is contained in:
parent
3ce73a7a46
commit
fc7f985392
3 changed files with 34 additions and 20 deletions
|
@ -192,19 +192,21 @@ def post_auth(data):
|
|||
|
||||
mac = data.get('Calling-Station-Id', None)
|
||||
|
||||
# Switch et bornes héritent de machine et peuvent avoir plusieurs interfaces filles
|
||||
nas_machine = nas_instance.machine
|
||||
# Si il s'agit d'un switch
|
||||
if hasattr(nas_instance, 'switch'):
|
||||
if hasattr(nas_machine, 'switch'):
|
||||
port = data.get('NAS-Port-Id', data.get('NAS-Port', None))
|
||||
#Pour les infrastructures possédant des switchs Juniper :
|
||||
#On vérifie si le switch fait partie d'un stack Juniper
|
||||
instance_stack = nas_instance.switch.stack
|
||||
instance_stack = nas_machine.switch.stack
|
||||
if instance_stack:
|
||||
# Si c'est le cas, on resélectionne le bon switch dans la stack
|
||||
id_stack_member = port.split("-")[1].split('/')[0]
|
||||
nas_instance = Switch.objects.filter(stack=instance_stack).filter(stack_member_id=id_stack_member).select_related('domain__extension').first()
|
||||
nas_machine = Switch.objects.filter(stack=instance_stack).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
|
||||
port = port.split(".")[0].split('/')[-1][-2:]
|
||||
out = decide_vlan_and_register_switch(nas_instance, nas_type, port, mac)
|
||||
out = decide_vlan_and_register_switch(nas_machine, nas_type, port, mac)
|
||||
sw_name, room, reason, vlan_id = out
|
||||
|
||||
log_message = '(fil) %s -> %s [%s%s]' % \
|
||||
|
@ -271,7 +273,7 @@ def check_user_machine_and_register(nas_type, username, mac_address):
|
|||
return (False, u"Machine inconnue", '')
|
||||
|
||||
|
||||
def decide_vlan_and_register_switch(nas, nas_type, port_number, mac_address):
|
||||
def decide_vlan_and_register_switch(nas_machine, nas_type, port_number, mac_address):
|
||||
"""Fonction de placement vlan pour un switch en radius filaire auth par mac.
|
||||
Plusieurs modes :
|
||||
- nas inconnu, port inconnu : on place sur le vlan par defaut VLAN_OK
|
||||
|
@ -296,12 +298,12 @@ def decide_vlan_and_register_switch(nas, nas_type, port_number, mac_address):
|
|||
# Get port from switch and port number
|
||||
extra_log = ""
|
||||
# Si le NAS est inconnu, on place sur le vlan defaut
|
||||
if not nas:
|
||||
if not nas_machine:
|
||||
return ('?', u'Chambre inconnue', u'Nas inconnu', VLAN_OK)
|
||||
|
||||
sw_name = str(nas)
|
||||
sw_name = str(nas_machine)
|
||||
|
||||
port = Port.objects.filter(switch=Switch.objects.filter(interface_ptr=nas), port=port_number).first()
|
||||
port = Port.objects.filter(switch=Switch.objects.filter(machine_ptr=nas_machine), port=port_number).first()
|
||||
#Si le port est inconnu, on place sur le vlan defaut
|
||||
if not port:
|
||||
return (sw_name, "Chambre inconnue", u'Port inconnu', VLAN_OK)
|
||||
|
|
|
@ -40,6 +40,7 @@ from machines.forms import (
|
|||
)
|
||||
from django import forms
|
||||
from django.forms import ModelForm, Form
|
||||
from django.db.models import Prefetch
|
||||
from .models import (
|
||||
Port,
|
||||
Switch,
|
||||
|
@ -82,9 +83,10 @@ class EditPortForm(ModelForm):
|
|||
self.fields['machine_interface'].queryset = Interface.objects.all()\
|
||||
.select_related('domain__extension')
|
||||
self.fields['related'].queryset = Port.objects.all()\
|
||||
.select_related('switch')\
|
||||
.prefetch_related('switch__interface_set__domain__extension')\
|
||||
.order_by('switch', 'port')
|
||||
.prefetch_related(Prefetch(
|
||||
'switch__interface_set',
|
||||
queryset=Interface.objects.select_related('ipv4__ip_type__extension').select_related('domain__extension')
|
||||
))
|
||||
|
||||
|
||||
class AddPortForm(ModelForm):
|
||||
|
@ -100,9 +102,10 @@ class AddPortForm(ModelForm):
|
|||
self.fields['machine_interface'].queryset = Interface.objects.all()\
|
||||
.select_related('domain__extension')
|
||||
self.fields['related'].queryset = Port.objects.all()\
|
||||
.select_related('switch')\
|
||||
.prefetch_related('switch__interface_set__domain__extension')\
|
||||
.order_by('switch', 'port')
|
||||
.prefetch_related(Prefetch(
|
||||
'switch__interface_set',
|
||||
queryset=Interface.objects.select_related('ipv4__ip_type__extension').select_related('domain__extension')
|
||||
))
|
||||
|
||||
|
||||
class StackForm(ModelForm):
|
||||
|
|
|
@ -41,7 +41,7 @@ from django.contrib import messages
|
|||
from django.contrib.auth.decorators import login_required, permission_required
|
||||
from django.db import IntegrityError
|
||||
from django.db import transaction
|
||||
from django.db.models import ProtectedError
|
||||
from django.db.models import ProtectedError, Prefetch
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
|
||||
from reversion import revisions as reversion
|
||||
|
@ -84,6 +84,7 @@ from machines.forms import (
|
|||
AddInterfaceForm
|
||||
)
|
||||
from machines.views import generate_ipv4_mbf_param
|
||||
from machines.models import Interface
|
||||
from preferences.models import AssoOption, GeneralOption
|
||||
|
||||
|
||||
|
@ -92,9 +93,10 @@ from preferences.models import AssoOption, GeneralOption
|
|||
def index(request):
|
||||
""" Vue d'affichage de tous les swicthes"""
|
||||
switch_list = Switch.objects\
|
||||
.prefetch_related('interface_set__domain__extension')\
|
||||
.prefetch_related('interface_set__ipv4__ip_type')\
|
||||
.prefetch_related('interface_set__type__ip_type__extension')\
|
||||
.prefetch_related(Prefetch(
|
||||
'interface_set',
|
||||
queryset=Interface.objects.select_related('ipv4__ip_type__extension').select_related('domain__extension')
|
||||
))\
|
||||
.select_related('stack')
|
||||
switch_list = SortTable.sort(
|
||||
switch_list,
|
||||
|
@ -128,7 +130,10 @@ def index_port(request, switch, switch_id):
|
|||
.select_related('machine_interface__domain__extension')\
|
||||
.select_related('machine_interface__machine__user')\
|
||||
.select_related('related__switch')\
|
||||
.prefetch_related('related__switch__interface_set__domain__extension')\
|
||||
.prefetch_related(Prefetch(
|
||||
'related__switch__interface_set',
|
||||
queryset=Interface.objects.select_related('domain__extension')
|
||||
))\
|
||||
.select_related('switch')
|
||||
port_list = SortTable.sort(
|
||||
port_list,
|
||||
|
@ -174,7 +179,11 @@ def index_room(request):
|
|||
@can_view_all(AccessPoint)
|
||||
def index_ap(request):
|
||||
""" Affichage de l'ensemble des bornes"""
|
||||
ap_list = AccessPoint.objects
|
||||
ap_list = AccessPoint.objects\
|
||||
.prefetch_related(Prefetch(
|
||||
'interface_set',
|
||||
queryset=Interface.objects.select_related('ipv4__ip_type__extension').select_related('domain__extension')
|
||||
))
|
||||
ap_list = SortTable.sort(
|
||||
ap_list,
|
||||
request.GET.get('col'),
|
||||
|
|
Loading…
Reference in a new issue