|
|
|
@ -1,45 +1,52 @@ |
|
|
|
# App de gestion des users pour re2o |
|
|
|
# Goulven Kermarec, Gabriel Détraz |
|
|
|
# Gplv2 |
|
|
|
from django.shortcuts import render, redirect |
|
|
|
from django.shortcuts import render_to_response, get_object_or_404 |
|
|
|
from django.shortcuts import render_to_response, render, redirect |
|
|
|
from django.core.context_processors import csrf |
|
|
|
from django.template import Context, RequestContext, loader |
|
|
|
from django.template import RequestContext |
|
|
|
from django.contrib import messages |
|
|
|
from django.db.models import Max, ProtectedError |
|
|
|
from django.db import IntegrityError |
|
|
|
from django.utils import timezone |
|
|
|
|
|
|
|
from users.models import User, Right, Ban, DelRightForm, UserForm, InfoForm, PasswordForm, StateForm, RightForm, BanForm, ProfilForm, Whitelist, WhitelistForm, DelSchoolForm, SchoolForm |
|
|
|
from users.models import User, Right, Ban, Whitelist |
|
|
|
from users.models import DelRightForm, BanForm, WhitelistForm, DelSchoolForm |
|
|
|
from users.models import InfoForm, StateForm, RightForm, SchoolForm |
|
|
|
from cotisations.models import Facture |
|
|
|
from machines.models import Machine, Interface |
|
|
|
from users.forms import PassForm |
|
|
|
from search.models import SearchForm |
|
|
|
from users.forms import PassForm |
|
|
|
from cotisations.views import is_adherent, end_adhesion |
|
|
|
from machines.views import unassign_ips, assign_ips |
|
|
|
|
|
|
|
from re2o.login import makeSecret, hashNT |
|
|
|
from re2o.login import hashNT |
|
|
|
|
|
|
|
|
|
|
|
def archive(user): |
|
|
|
""" Archive un utilisateur """ |
|
|
|
unassign_ips(user) |
|
|
|
return |
|
|
|
|
|
|
|
|
|
|
|
def unarchive(user): |
|
|
|
""" Triger actions au desarchivage d'un user """ |
|
|
|
assign_ips(user) |
|
|
|
return |
|
|
|
|
|
|
|
|
|
|
|
def end_ban(user): |
|
|
|
""" 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'] |
|
|
|
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'] |
|
|
|
date_max = Whitelist.objects.all().filter( |
|
|
|
user=user).aggregate(Max('date_end'))['date_end__max'] |
|
|
|
return date_max |
|
|
|
|
|
|
|
|
|
|
|
def is_ban(user): |
|
|
|
""" Renvoie si un user est banni ou non """ |
|
|
|
end = end_ban(user) |
|
|
|
@ -48,7 +55,8 @@ def is_ban(user): |
|
|
|
elif end < timezone.now(): |
|
|
|
return False |
|
|
|
else: |
|
|
|
return True |
|
|
|
return True |
|
|
|
|
|
|
|
|
|
|
|
def is_whitelisted(user): |
|
|
|
""" Renvoie si un user est whitelisté ou non """ |
|
|
|
@ -60,9 +68,12 @@ def is_whitelisted(user): |
|
|
|
else: |
|
|
|
return True |
|
|
|
|
|
|
|
|
|
|
|
def has_access(user): |
|
|
|
""" Renvoie si un utilisateur a accès à internet""" |
|
|
|
return user.state == User.STATE_ACTIVE and not is_ban(user) and ( is_adherent(user) or is_whitelisted(user)) |
|
|
|
""" Renvoie si un utilisateur a accès à internet """ |
|
|
|
return user.state == User.STATE_ACTIVE \ |
|
|
|
and not is_ban(user) and (is_adherent(user) or is_whitelisted(user)) |
|
|
|
|
|
|
|
|
|
|
|
def is_active(interface): |
|
|
|
""" Renvoie si une interface doit avoir accès ou non """ |
|
|
|
@ -70,10 +81,16 @@ def is_active(interface): |
|
|
|
user = machine.user |
|
|
|
return machine.active and has_access(user) |
|
|
|
|
|
|
|
|
|
|
|
def form(ctx, template, request): |
|
|
|
c = ctx |
|
|
|
c.update(csrf(request)) |
|
|
|
return render_to_response(template, c, context_instance=RequestContext(request)) |
|
|
|
return render_to_response( |
|
|
|
template, |
|
|
|
c, |
|
|
|
context_instance=RequestContext(request) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
def new_user(request): |
|
|
|
user = InfoForm(request.POST or None) |
|
|
|
@ -83,11 +100,12 @@ def new_user(request): |
|
|
|
return redirect("/users/") |
|
|
|
return form({'userform': user}, 'users/user.html', request) |
|
|
|
|
|
|
|
|
|
|
|
def edit_info(request, userid): |
|
|
|
try: |
|
|
|
user = User.objects.get(pk=userid) |
|
|
|
except User.DoesNotExist: |
|
|
|
messages.error(request, u"Utilisateur inexistant" ) |
|
|
|
messages.error(request, "Utilisateur inexistant") |
|
|
|
return redirect("/users/") |
|
|
|
user = InfoForm(request.POST or None, instance=user) |
|
|
|
if user.is_valid(): |
|
|
|
@ -96,11 +114,12 @@ def edit_info(request, userid): |
|
|
|
return redirect("/users/") |
|
|
|
return form({'userform': user}, 'users/user.html', request) |
|
|
|
|
|
|
|
|
|
|
|
def state(request, userid): |
|
|
|
try: |
|
|
|
user = User.objects.get(pk=userid) |
|
|
|
except User.DoesNotExist: |
|
|
|
messages.error(request, u"Utilisateur inexistant" ) |
|
|
|
messages.error(request, "Utilisateur inexistant") |
|
|
|
return redirect("/users/") |
|
|
|
state = StateForm(request.POST or None, instance=user) |
|
|
|
if state.is_valid(): |
|
|
|
@ -114,29 +133,31 @@ def state(request, userid): |
|
|
|
return redirect("/users/") |
|
|
|
return form({'userform': state}, 'users/user.html', request) |
|
|
|
|
|
|
|
|
|
|
|
def password(request, userid): |
|
|
|
try: |
|
|
|
user = User.objects.get(pk=userid) |
|
|
|
except User.DoesNotExist: |
|
|
|
messages.error(request, u"Utilisateur inexistant" ) |
|
|
|
messages.error(request, "Utilisateur inexistant") |
|
|
|
return redirect("/users/") |
|
|
|
user_form = PassForm(request.POST or None) |
|
|
|
if user_form.is_valid(): |
|
|
|
if user_form.cleaned_data['passwd1'] != user_form.cleaned_data['passwd2']: |
|
|
|
messages.error(request, u"Les 2 mots de passe différent" ) |
|
|
|
return form({'userform': user_form}, 'users/user.html', request) |
|
|
|
user.pwd_ssha = makeSecret(user_form.cleaned_data['passwd1']) |
|
|
|
user.pwd_ntlm = hashNT(user_form.cleaned_data['passwd1']) |
|
|
|
u_form = PassForm(request.POST or None) |
|
|
|
if u_form.is_valid(): |
|
|
|
if u_form.cleaned_data['passwd1'] != u_form.cleaned_data['passwd2']: |
|
|
|
messages.error(request, "Les 2 mots de passe différent") |
|
|
|
return form({'userform': u_form}, 'users/user.html', request) |
|
|
|
user.set_password(u_form.cleaned_data['passwd1']) |
|
|
|
user.pwd_ntlm = hashNT(u_form.cleaned_data['passwd1']) |
|
|
|
user.save() |
|
|
|
messages.success(request, "Le mot de passe a changé") |
|
|
|
return redirect("/users/") |
|
|
|
return form({'userform': user_form}, 'users/user.html', request) |
|
|
|
return form({'userform': u_form}, 'users/user.html', request) |
|
|
|
|
|
|
|
|
|
|
|
def add_right(request, userid): |
|
|
|
try: |
|
|
|
user = User.objects.get(pk=userid) |
|
|
|
except User.DoesNotExist: |
|
|
|
messages.error(request, u"Utilisateur inexistant" ) |
|
|
|
messages.error(request, "Utilisateur inexistant") |
|
|
|
return redirect("/users/") |
|
|
|
right = RightForm(request.POST or None) |
|
|
|
if right.is_valid(): |
|
|
|
@ -150,6 +171,7 @@ def add_right(request, userid): |
|
|
|
return redirect("/users/") |
|
|
|
return form({'userform': right}, 'users/user.html', request) |
|
|
|
|
|
|
|
|
|
|
|
def del_right(request): |
|
|
|
right = DelRightForm(request.POST or None) |
|
|
|
if right.is_valid(): |
|
|
|
@ -159,11 +181,12 @@ def del_right(request): |
|
|
|
return redirect("/users/") |
|
|
|
return form({'userform': right}, 'users/user.html', request) |
|
|
|
|
|
|
|
|
|
|
|
def add_ban(request, userid): |
|
|
|
try: |
|
|
|
user = User.objects.get(pk=userid) |
|
|
|
except User.DoesNotExist: |
|
|
|
messages.error(request, u"Utilisateur inexistant" ) |
|
|
|
messages.error(request, "Utilisateur inexistant") |
|
|
|
return redirect("/users/") |
|
|
|
ban_instance = Ban(user=user) |
|
|
|
ban = BanForm(request.POST or None, instance=ban_instance) |
|
|
|
@ -172,14 +195,18 @@ def add_ban(request, userid): |
|
|
|
messages.success(request, "Bannissement ajouté") |
|
|
|
return redirect("/users/") |
|
|
|
if is_ban(user): |
|
|
|
messages.error(request, u"Attention, cet utilisateur a deja un bannissement actif" ) |
|
|
|
messages.error( |
|
|
|
request, |
|
|
|
"Attention, cet utilisateur a deja un bannissement actif" |
|
|
|
) |
|
|
|
return form({'userform': ban}, 'users/user.html', request) |
|
|
|
|
|
|
|
|
|
|
|
def edit_ban(request, banid): |
|
|
|
try: |
|
|
|
ban_instance = Ban.objects.get(pk=banid) |
|
|
|
except Ban.DoesNotExist: |
|
|
|
messages.error(request, u"Entrée inexistante" ) |
|
|
|
messages.error(request, "Entrée inexistante") |
|
|
|
return redirect("/users/") |
|
|
|
ban = BanForm(request.POST or None, instance=ban_instance) |
|
|
|
if ban.is_valid(): |
|
|
|
@ -188,11 +215,12 @@ def edit_ban(request, banid): |
|
|
|
return redirect("/users/") |
|
|
|
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" ) |
|
|
|
messages.error(request, "Utilisateur inexistant") |
|
|
|
return redirect("/users/") |
|
|
|
whitelist_instance = Whitelist(user=user) |
|
|
|
whitelist = WhitelistForm(request.POST or None, instance=whitelist_instance) |
|
|
|
@ -201,14 +229,18 @@ def add_whitelist(request, userid): |
|
|
|
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" ) |
|
|
|
messages.error( |
|
|
|
request, |
|
|
|
"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" ) |
|
|
|
messages.error(request, "Entrée inexistante") |
|
|
|
return redirect("/users/") |
|
|
|
whitelist = WhitelistForm(request.POST or None, instance=whitelist_instance) |
|
|
|
if whitelist.is_valid(): |
|
|
|
@ -217,13 +249,15 @@ def edit_whitelist(request, whitelistid): |
|
|
|
return redirect("/users/") |
|
|
|
return form({'userform': whitelist}, 'users/user.html', request) |
|
|
|
|
|
|
|
|
|
|
|
def add_school(request): |
|
|
|
school = SchoolForm(request.POST or None) |
|
|
|
if school.is_valid(): |
|
|
|
school.save() |
|
|
|
messages.success(request, "L'établissement a été ajouté") |
|
|
|
return redirect("/users/") |
|
|
|
return form({'userform': school}, 'users/user.html', request) |
|
|
|
return form({'userform': school}, 'users/user.html', request) |
|
|
|
|
|
|
|
|
|
|
|
def del_school(request): |
|
|
|
school = DelSchoolForm(request.POST or None) |
|
|
|
@ -234,46 +268,73 @@ def del_school(request): |
|
|
|
school_del.delete() |
|
|
|
messages.success(request, "L'établissement a été supprimé") |
|
|
|
except ProtectedError: |
|
|
|
messages.error(request, "L'établissement %s est affecté à au moins un user, vous ne pouvez pas le supprimer" % school_del) |
|
|
|
messages.error( |
|
|
|
request, |
|
|
|
"L'établissement %s est affecté à au moins un user, \ |
|
|
|
vous ne pouvez pas le supprimer" % school_del |
|
|
|
) |
|
|
|
return redirect("/users/") |
|
|
|
return form({'userform': school}, 'users/user.html', request) |
|
|
|
|
|
|
|
|
|
|
|
def index(request): |
|
|
|
users_list = User.objects.order_by('pk') |
|
|
|
connexion = [] |
|
|
|
for user in users_list: |
|
|
|
end = end_adhesion(user) |
|
|
|
access = has_access(user) |
|
|
|
if(end!=None): |
|
|
|
if(end is not None): |
|
|
|
connexion.append([user, access, end]) |
|
|
|
else: |
|
|
|
connexion.append([user, access, "Non adhérent"]) |
|
|
|
return render(request, 'users/index.html', {'users_list': connexion}) |
|
|
|
|
|
|
|
|
|
|
|
def index_ban(request): |
|
|
|
ban_list = Ban.objects.order_by('date_start') |
|
|
|
return render(request, 'users/index_ban.html', {'ban_list':ban_list}) |
|
|
|
return render(request, 'users/index_ban.html', {'ban_list': ban_list}) |
|
|
|
|
|
|
|
|
|
|
|
def index_white(request): |
|
|
|
white_list = Whitelist.objects.order_by('date_start') |
|
|
|
return render(request, 'users/index_whitelist.html', {'white_list':white_list}) |
|
|
|
return render( |
|
|
|
request, |
|
|
|
'users/index_whitelist.html', |
|
|
|
{'white_list': white_list} |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
def profil(request, userid): |
|
|
|
try: |
|
|
|
users = User.objects.get(pk=userid) |
|
|
|
except User.DoesNotExist: |
|
|
|
messages.error(request, u"Utilisateur inexistant" ) |
|
|
|
messages.error(request, "Utilisateur inexistant") |
|
|
|
return redirect("/users/") |
|
|
|
machines = Interface.objects.filter(machine=Machine.objects.filter(user__pseudo = users)) |
|
|
|
factures = Facture.objects.filter(user__pseudo = users) |
|
|
|
bans = Ban.objects.filter(user__pseudo = users) |
|
|
|
whitelists = Whitelist.objects.filter(user__pseudo = users) |
|
|
|
machines = Interface.objects.filter( |
|
|
|
machine=Machine.objects.filter(user__pseudo=users) |
|
|
|
) |
|
|
|
factures = Facture.objects.filter(user__pseudo=users) |
|
|
|
bans = Ban.objects.filter(user__pseudo=users) |
|
|
|
whitelists = Whitelist.objects.filter(user__pseudo=users) |
|
|
|
end_bans = None |
|
|
|
end_whitelists = None |
|
|
|
if(is_ban(users)): |
|
|
|
end_bans=end_ban(users) |
|
|
|
end_bans = end_ban(users) |
|
|
|
if(is_whitelisted(users)): |
|
|
|
end_whitelists=end_whitelist(users) |
|
|
|
end_whitelists = end_whitelist(users) |
|
|
|
list_droits = Right.objects.filter(user=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), 'list_droits': list_droits}) |
|
|
|
|
|
|
|
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), |
|
|
|
'list_droits': list_droits} |
|
|
|
) |
|
|
|
|