mirror of
https://gitlab2.federez.net/re2o/re2o
synced 2024-11-23 11:53:12 +00:00
Desassigne les ip à l'archivage + assigne une ip à la creation d'une machine
This commit is contained in:
parent
0bbc43066e
commit
a0c4c35fd1
4 changed files with 58 additions and 6 deletions
19
machines/migrations/0012_auto_20160704_0118.py
Normal file
19
machines/migrations/0012_auto_20160704_0118.py
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('machines', '0011_auto_20160704_0105'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='interface',
|
||||||
|
name='dns',
|
||||||
|
field=models.CharField(max_length=255, help_text='Obligatoire et unique', unique=True),
|
||||||
|
),
|
||||||
|
]
|
|
@ -8,9 +8,30 @@ from django.template import Context, RequestContext, loader
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
|
|
||||||
from .models import NewMachineForm, EditMachineForm, EditInterfaceForm, AddInterfaceForm, NewInterfaceForm
|
from .models import NewMachineForm, EditMachineForm, EditInterfaceForm, AddInterfaceForm, NewInterfaceForm
|
||||||
from .models import Machine, Interface
|
from .models import Machine, Interface, IpList
|
||||||
from users.models import User
|
from users.models import User
|
||||||
|
|
||||||
|
def unassign_ip(machine):
|
||||||
|
machine.ipv4 = None
|
||||||
|
machine.save()
|
||||||
|
|
||||||
|
def unassign_ips(user):
|
||||||
|
machines = Interface.objects.filter(machine=Machine.objects.filter(user=user))
|
||||||
|
for machine in machines:
|
||||||
|
unassign_ip(machine)
|
||||||
|
return
|
||||||
|
|
||||||
|
def free_ip():
|
||||||
|
""" Renvoie la liste des ip disponibles """
|
||||||
|
return IpList.objects.filter(interface__isnull=True)
|
||||||
|
|
||||||
|
def assign_ipv4(interface):
|
||||||
|
""" Assigne une ip à l'interface """
|
||||||
|
free_ips = free_ip()
|
||||||
|
if free_ips:
|
||||||
|
interface.ipv4 = free_ips[0]
|
||||||
|
return interface
|
||||||
|
|
||||||
def form(ctx, template, request):
|
def form(ctx, template, request):
|
||||||
c = ctx
|
c = ctx
|
||||||
c.update(csrf(request))
|
c.update(csrf(request))
|
||||||
|
@ -30,6 +51,10 @@ def new_machine(request, userid):
|
||||||
new_machine.save()
|
new_machine.save()
|
||||||
new_interface = interface.save(commit=False)
|
new_interface = interface.save(commit=False)
|
||||||
new_interface.machine = new_machine
|
new_interface.machine = new_machine
|
||||||
|
if free_ip():
|
||||||
|
new_interface = assign_ipv4(new_interface)
|
||||||
|
else:
|
||||||
|
messages.error(request, u"Il n'y a plus d'ip disponibles")
|
||||||
new_interface.save()
|
new_interface.save()
|
||||||
messages.success(request, "La machine a été crée")
|
messages.success(request, "La machine a été crée")
|
||||||
return redirect("/users/")
|
return redirect("/users/")
|
||||||
|
|
|
@ -110,7 +110,6 @@ class StateForm(ModelForm):
|
||||||
model = User
|
model = User
|
||||||
fields = ['state']
|
fields = ['state']
|
||||||
|
|
||||||
|
|
||||||
class SchoolForm(ModelForm):
|
class SchoolForm(ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = School
|
model = School
|
||||||
|
|
|
@ -15,9 +15,15 @@ from machines.models import Machine, Interface
|
||||||
from users.forms import PassForm
|
from users.forms import PassForm
|
||||||
from search.models import SearchForm
|
from search.models import SearchForm
|
||||||
from cotisations.views import is_adherent, end_adhesion
|
from cotisations.views import is_adherent, end_adhesion
|
||||||
|
from machines.views import unassign_ips
|
||||||
|
|
||||||
from re2o.login import makeSecret, hashNT
|
from re2o.login import makeSecret, hashNT
|
||||||
|
|
||||||
|
def archive(user):
|
||||||
|
""" Archive un utilisateur """
|
||||||
|
unassign_ips(user)
|
||||||
|
return
|
||||||
|
|
||||||
def end_ban(user):
|
def end_ban(user):
|
||||||
""" Renvoie la date de fin de ban d'un user, False sinon """
|
""" Renvoie la date de fin de ban d'un user, False sinon """
|
||||||
date_max = Ban.objects.all().filter(user=user).aggregate(Max('date_end'))['date_end__max']
|
date_max = Ban.objects.all().filter(user=user).aggregate(Max('date_end'))['date_end__max']
|
||||||
|
@ -72,12 +78,15 @@ def state(request, userid):
|
||||||
except User.DoesNotExist:
|
except User.DoesNotExist:
|
||||||
messages.error(request, u"Utilisateur inexistant" )
|
messages.error(request, u"Utilisateur inexistant" )
|
||||||
return redirect("/users/")
|
return redirect("/users/")
|
||||||
user = StateForm(request.POST or None, instance=user)
|
state = StateForm(request.POST or None, instance=user)
|
||||||
if user.is_valid():
|
if state.is_valid():
|
||||||
user.save()
|
if state.has_changed():
|
||||||
|
if state.cleaned_data['state'] == User.STATE_ARCHIVED:
|
||||||
|
archive(user)
|
||||||
|
state.save()
|
||||||
messages.success(request, "Etat changé avec succès")
|
messages.success(request, "Etat changé avec succès")
|
||||||
return redirect("/users/")
|
return redirect("/users/")
|
||||||
return form({'userform': user}, 'users/user.html', request)
|
return form({'userform': state}, 'users/user.html', request)
|
||||||
|
|
||||||
def password(request, userid):
|
def password(request, userid):
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Reference in a new issue