8
0
Fork 0
mirror of https://gitlab2.federez.net/re2o/re2o synced 2024-11-30 08:32:26 +00:00

Ajoute une table whitelist

This commit is contained in:
Gabriel Detraz 2016-07-04 20:04:11 +02:00
parent 781d550263
commit a0a2d5a6b5
7 changed files with 153 additions and 15 deletions

View file

@ -1,6 +1,6 @@
from django.contrib import admin from django.contrib import admin
from .models import User, School, Right, ListRight, Ban from .models import User, School, Right, ListRight, Ban, Whitelist
class UserAdmin(admin.ModelAdmin): class UserAdmin(admin.ModelAdmin):
list_display = ('name','surname','pseudo','room','email', 'school', 'state') list_display = ('name','surname','pseudo','room','email', 'school', 'state')
@ -17,8 +17,12 @@ class RightAdmin(admin.ModelAdmin):
class BanAdmin(admin.ModelAdmin): class BanAdmin(admin.ModelAdmin):
list_display = ('user', 'raison', 'date_start', 'date_end') list_display = ('user', 'raison', 'date_start', 'date_end')
class WhitelistAdmin(admin.ModelAdmin):
list_display = ('user', 'raison', 'date_start', 'date_end')
admin.site.register(User, UserAdmin) admin.site.register(User, UserAdmin)
admin.site.register(School, SchoolAdmin) admin.site.register(School, SchoolAdmin)
admin.site.register(Right, RightAdmin) admin.site.register(Right, RightAdmin)
admin.site.register(ListRight, ListRightAdmin) admin.site.register(ListRight, ListRightAdmin)
admin.site.register(Ban, BanAdmin) admin.site.register(Ban, BanAdmin)
admin.site.register(Whitelist, WhitelistAdmin)

View file

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('users', '0014_auto_20160704_1548'),
]
operations = [
migrations.CreateModel(
name='Whitelist',
fields=[
('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)),
('raison', models.CharField(max_length=255)),
('date_start', models.DateTimeField(auto_now_add=True)),
('date_end', models.DateTimeField(help_text='%m/%d/%y %H:%M:%S')),
('user', models.ForeignKey(to='users.User', on_delete=django.db.models.deletion.PROTECT)),
],
),
]

View file

@ -71,6 +71,15 @@ class Ban(models.Model):
def __str__(self): def __str__(self):
return str(self.user) + ' ' + str(self.raison) return str(self.user) + ' ' + str(self.raison)
class Whitelist(models.Model):
user = models.ForeignKey('User', on_delete=models.PROTECT)
raison = models.CharField(max_length=255)
date_start = models.DateTimeField(auto_now_add=True)
date_end = models.DateTimeField(help_text='%m/%d/%y %H:%M:%S')
def __str__(self):
return str(self.user) + ' ' + str(self.raison)
class UserForm(ModelForm): class UserForm(ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(InfoForm, self).__init__(*args, **kwargs) super(InfoForm, self).__init__(*args, **kwargs)
@ -151,5 +160,20 @@ class BanForm(ModelForm):
raise forms.ValidationError("Triple buse, la date de fin ne peut pas être avant maintenant... Re2o ne voyage pas dans le temps") raise forms.ValidationError("Triple buse, la date de fin ne peut pas être avant maintenant... Re2o ne voyage pas dans le temps")
return date_end return date_end
class WhitelistForm(ModelForm):
def __init__(self, *args, **kwargs):
super(WhitelistForm, self).__init__(*args, **kwargs)
self.fields['date_end'].label = 'Date de fin'
class Meta:
model = Whitelist
exclude = ['user']
def clean_date_end(self):
date_end = self.cleaned_data['date_end']
if date_end < timezone.now():
raise forms.ValidationError("Triple buse, la date de fin ne peut pas être avant maintenant... Re2o ne voyage pas dans le temps")
return date_end
class ProfilForm(Form): class ProfilForm(Form):
user =forms.CharField(label ='Ok', max_length=100) user =forms.CharField(label ='Ok', max_length=100)

View file

@ -0,0 +1,21 @@
<table class="table table-striped">
<thead>
<tr>
<th>Utilisateur</th>
<th>Raison</th>
<th>Date de début</th>
<th>Date de fin</th>
<th></th>
</tr>
</thead>
{% for whitelist in white_list %}
<tr>
<td>{{ whitelist.user }}</td>
<td>{{ whitelist.raison }}</td>
<td>{{ whitelist.date_start }}</td>
<td>{{ whitelist.date_end }}</td>
<td><a class="btn btn-primary btn-sm" role="button" href="{% url 'users:edit-whitelist' whitelist.id %}"><i class="glyphicon glyphicon-grain"></i> Editer</a></td>
</tr>
{% endfor %}
</table>

View file

@ -42,20 +42,19 @@
{% else %} {% else %}
<td><font color="red">Non adhérent</font></td> <td><font color="red">Non adhérent</font></td>
{% endif %} {% endif %}
<th>Accès gracieux</th>
{% if end_whitelist != None %}
<td><font color="green">{{ end_whitelist }}</font></td>
{% else %}
<td><font color="orange">Aucun</font></td>
{% endif %}
<tr>
<th>Bannissement</th> <th>Bannissement</th>
{% if end_ban != None %} {% if end_ban != None %}
<td><font color="red">{{ end_ban }}</font></td> <td><font color="red">{{ end_ban }}</font></td>
{% else %} {% else %}
<td><font color="green">Non banni</font></td> <td><font color="green">Non banni</font></td>
{% endif %} {% endif %}
</tr>
<tr>
<th>Connexion</th>
{% if actif == True %}
<td><font color="green">Active</font></td>
{% else %}
<td><font color="red">Désactivée</font></td>
{% endif %}
<th>Statut</th> <th>Statut</th>
{% if user.state == 0 %} {% if user.state == 0 %}
<td><font color="green">Actif</font></td> <td><font color="green">Actif</font></td>
@ -64,6 +63,14 @@
{% else %} {% else %}
<td><font color="orange">Archivé</font></td> <td><font color="orange">Archivé</font></td>
{% endif %} {% endif %}
</tr>
<tr>
<th>Connexion</th>
{% if actif == True %}
<td><font color="green">Active</font></td>
{% else %}
<td><font color="red">Désactivée</font></td>
{% endif %}
</table> </table>
<h2>Machines :</h2> <h2>Machines :</h2>
<h4><a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:new-machine' user.id %}"><i class="glyphicon glyphicon-phone"></i> Ajouter une machine</a></h4> <h4><a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:new-machine' user.id %}"><i class="glyphicon glyphicon-phone"></i> Ajouter une machine</a></h4>
@ -86,6 +93,13 @@
{% else %} {% else %}
<p>Aucun bannissement</p> <p>Aucun bannissement</p>
{% endif %} {% endif %}
<h2>Accès à titre gracieux :</h2>
<h4><a class="btn btn-primary btn-sm" role="button" href="{% url 'users:add-whitelist' user.id %}"><i class="glyphicon glyphicon-pushpin"></i> Accorder un accès à titre gracieux</a></h4>
{% if white_list %}
{% include "users/aff_whitelists.html" with white_list=white_list %}
{% else %}
<p>Aucun accès gracieux</p>
{% endif %}
<br /> <br />
<br /> <br />
<br /> <br />

View file

@ -9,6 +9,8 @@ urlpatterns = [
url(r'^password/(?P<userid>[0-9]+)$', views.password, name='password'), url(r'^password/(?P<userid>[0-9]+)$', views.password, name='password'),
url(r'^add_ban/(?P<userid>[0-9]+)$', views.add_ban, name='add-ban'), url(r'^add_ban/(?P<userid>[0-9]+)$', views.add_ban, name='add-ban'),
url(r'^edit_ban/(?P<banid>[0-9]+)$', views.edit_ban, name='edit-ban'), url(r'^edit_ban/(?P<banid>[0-9]+)$', views.edit_ban, name='edit-ban'),
url(r'^add_whitelist/(?P<userid>[0-9]+)$', views.add_whitelist, name='add-whitelist'),
url(r'^edit_whitelist/(?P<whitelistid>[0-9]+)$', views.edit_whitelist, name='edit-whitelist'),
url(r'^add_right/$', views.add_right, name='add-right'), url(r'^add_right/$', views.add_right, name='add-right'),
url(r'^del_right/$', views.del_right, name='del-right'), url(r'^del_right/$', views.del_right, name='del-right'),
url(r'^profil/$', views.profil, name='profil'), url(r'^profil/$', views.profil, name='profil'),

View file

@ -9,7 +9,7 @@ from django.contrib import messages
from django.db.models import Max from django.db.models import Max
from django.utils import timezone from django.utils import timezone
from users.models import User, Right, Ban, DelRightForm, UserForm, InfoForm, PasswordForm, StateForm, RightForm, BanForm, ProfilForm from users.models import User, Right, Ban, DelRightForm, UserForm, InfoForm, PasswordForm, StateForm, RightForm, BanForm, ProfilForm, Whitelist, WhitelistForm
from cotisations.models import Facture from cotisations.models import Facture
from machines.models import Machine, Interface from machines.models import Machine, Interface
from users.forms import PassForm from users.forms import PassForm
@ -34,6 +34,11 @@ def end_ban(user):
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']
return date_max return date_max
def end_whitelist(user):
""" Renvoie la date de fin de ban d'un user, False sinon """
date_max = Whitelist.objects.all().filter(user=user).aggregate(Max('date_end'))['date_end__max']
return date_max
def is_ban(user): def is_ban(user):
""" Renvoie si un user est banni ou non """ """ Renvoie si un user est banni ou non """
end = end_ban(user) end = end_ban(user)
@ -44,9 +49,19 @@ def is_ban(user):
else: else:
return True return True
def is_whitelisted(user):
""" Renvoie si un user est whitelisté ou non """
end = end_whitelist(user)
if not end:
return False
elif end < timezone.now():
return False
else:
return True
def has_access(user): def has_access(user):
""" Renvoie si un utilisateur a accès à internet""" """ Renvoie si un utilisateur a accès à internet"""
if user.state == User.STATE_ACTIVE and not is_ban(user) and is_adherent(user): if user.state == User.STATE_ACTIVE and not is_ban(user) and ( is_adherent(user) or is_whitelisted(user)):
return True return True
else: else:
return False return False
@ -149,7 +164,7 @@ def add_ban(request, userid):
def edit_ban(request, banid): def edit_ban(request, banid):
try: try:
ban_instance = Ban.objects.get(pk=banid) ban_instance = Ban.objects.get(pk=banid)
except User.DoesNotExist: except Ban.DoesNotExist:
messages.error(request, u"Entrée inexistante" ) messages.error(request, u"Entrée inexistante" )
return redirect("/users/") return redirect("/users/")
ban = BanForm(request.POST or None, instance=ban_instance) ban = BanForm(request.POST or None, instance=ban_instance)
@ -159,6 +174,35 @@ def edit_ban(request, banid):
return redirect("/users/") return redirect("/users/")
return form({'userform': ban}, 'users/user.html', request) return form({'userform': ban}, 'users/user.html', request)
def add_whitelist(request, userid):
try:
user = User.objects.get(pk=userid)
except User.DoesNotExist:
messages.error(request, u"Utilisateur inexistant" )
return redirect("/users/")
whitelist_instance = Whitelist(user=user)
whitelist = WhitelistForm(request.POST or None, instance=whitelist_instance)
if whitelist.is_valid():
whitelist.save()
messages.success(request, "Accès à titre gracieux accordé")
return redirect("/users/")
if is_whitelisted(user):
messages.error(request, u"Attention, cet utilisateur a deja un accès gracieux actif" )
return form({'userform': whitelist}, 'users/user.html', request)
def edit_whitelist(request, whitelistid):
try:
whitelist_instance = Whitelist.objects.get(pk=whitelistid)
except Whitelist.DoesNotExist:
messages.error(request, u"Entrée inexistante" )
return redirect("/users/")
whitelist = WhitelistForm(request.POST or None, instance=whitelist_instance)
if whitelist.is_valid():
whitelist.save()
messages.success(request, "Whitelist modifiée")
return redirect("/users/")
return form({'userform': whitelist}, 'users/user.html', request)
def index(request): def index(request):
users_list = User.objects.order_by('pk') users_list = User.objects.order_by('pk')
connexion = [] connexion = []
@ -175,10 +219,14 @@ def profil(request):
machines = Interface.objects.filter(machine=Machine.objects.filter(user__pseudo = users)) machines = Interface.objects.filter(machine=Machine.objects.filter(user__pseudo = users))
factures = Facture.objects.filter(user__pseudo = users) factures = Facture.objects.filter(user__pseudo = users)
bans = Ban.objects.filter(user__pseudo = users) bans = Ban.objects.filter(user__pseudo = users)
end = None whitelists = Whitelist.objects.filter(user__pseudo = users)
end_bans = None
end_whitelists = None
if(is_ban(users)): if(is_ban(users)):
end=end_ban(users) end_bans=end_ban(users)
return render(request, 'users/profil.html', {'user': users, 'machine_list' :machines, 'facture_list':factures, 'ban_list':bans, 'end_ban':end, 'end_adhesion':end_adhesion(users), 'actif':has_access(users)}) if(is_whitelisted(users)):
end_whitelists=end_whitelist(users)
return render(request, 'users/profil.html', {'user': users, 'machine_list' :machines, 'facture_list':factures, 'ban_list':bans, 'white_list':whitelists,'end_ban':end_bans,'end_whitelist':end_whitelists, 'end_adhesion':end_adhesion(users), 'actif':has_access(users)})
return redirect("/users/") return redirect("/users/")
return redirect("/users/") return redirect("/users/")