2020-06-16 05:26:58 +00:00
|
|
|
from django.conf import settings
|
2020-07-23 10:16:39 +00:00
|
|
|
from django.contrib import messages
|
|
|
|
from django.contrib.auth import update_session_auth_hash
|
|
|
|
from django.contrib.auth.forms import AdminPasswordChangeForm
|
2020-05-27 12:24:06 +00:00
|
|
|
from django.contrib.auth.models import Group, User
|
|
|
|
from django.core.paginator import Paginator
|
|
|
|
from django.shortcuts import get_object_or_404, redirect, render
|
|
|
|
from django.utils.translation import ugettext_lazy as _
|
|
|
|
|
2020-06-16 05:26:58 +00:00
|
|
|
from accounts.models import UserAttributes, UserInstance, Instance
|
2020-06-04 12:22:55 +00:00
|
|
|
from appsettings.models import AppSettings
|
2020-05-27 12:24:06 +00:00
|
|
|
from logs.models import Logs
|
|
|
|
|
|
|
|
from . import forms
|
|
|
|
from .decorators import superuser_only
|
|
|
|
|
|
|
|
|
|
|
|
@superuser_only
|
|
|
|
def group_list(request):
|
|
|
|
groups = Group.objects.all()
|
|
|
|
return render(
|
|
|
|
request,
|
|
|
|
'admin/group_list.html',
|
|
|
|
{
|
|
|
|
'groups': groups,
|
|
|
|
},
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
@superuser_only
|
|
|
|
def group_create(request):
|
|
|
|
form = forms.GroupForm(request.POST or None)
|
|
|
|
if form.is_valid():
|
|
|
|
form.save()
|
|
|
|
return redirect('admin:group_list')
|
2020-05-29 09:47:13 +00:00
|
|
|
|
2020-05-27 12:24:06 +00:00
|
|
|
return render(
|
|
|
|
request,
|
2020-06-16 12:04:37 +00:00
|
|
|
'common/form.html',
|
2020-05-27 12:24:06 +00:00
|
|
|
{
|
|
|
|
'form': form,
|
|
|
|
'title': _('Create Group'),
|
|
|
|
},
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
@superuser_only
|
|
|
|
def group_update(request, pk):
|
|
|
|
group = get_object_or_404(Group, pk=pk)
|
|
|
|
form = forms.GroupForm(request.POST or None, instance=group)
|
|
|
|
if form.is_valid():
|
|
|
|
form.save()
|
|
|
|
return redirect('admin:group_list')
|
|
|
|
|
|
|
|
return render(
|
|
|
|
request,
|
2020-06-16 12:04:37 +00:00
|
|
|
'common/form.html',
|
2020-05-27 12:24:06 +00:00
|
|
|
{
|
|
|
|
'form': form,
|
|
|
|
'title': _('Update Group'),
|
|
|
|
},
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
@superuser_only
|
|
|
|
def group_delete(request, pk):
|
|
|
|
group = get_object_or_404(Group, pk=pk)
|
|
|
|
if request.method == 'POST':
|
|
|
|
group.delete()
|
|
|
|
return redirect('admin:group_list')
|
|
|
|
|
|
|
|
return render(
|
|
|
|
request,
|
2020-06-15 10:30:27 +00:00
|
|
|
'common/confirm_delete.html',
|
2020-05-27 12:24:06 +00:00
|
|
|
{'object': group},
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
@superuser_only
|
|
|
|
def user_list(request):
|
|
|
|
users = User.objects.all()
|
|
|
|
return render(
|
|
|
|
request,
|
|
|
|
'admin/user_list.html',
|
|
|
|
{
|
|
|
|
'users': users,
|
|
|
|
'title': _('Users'),
|
|
|
|
},
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
@superuser_only
|
|
|
|
def user_create(request):
|
|
|
|
user_form = forms.UserCreateForm(request.POST or None)
|
|
|
|
attributes_form = forms.UserAttributesForm(request.POST or None)
|
|
|
|
if user_form.is_valid() and attributes_form.is_valid():
|
|
|
|
user = user_form.save()
|
|
|
|
password = user_form.cleaned_data['password']
|
|
|
|
user.set_password(password)
|
|
|
|
user.save()
|
|
|
|
attributes = attributes_form.save(commit=False)
|
|
|
|
attributes.user = user
|
|
|
|
attributes.save()
|
2020-06-16 05:26:58 +00:00
|
|
|
add_default_instances(user)
|
2020-05-27 12:24:06 +00:00
|
|
|
return redirect('admin:user_list')
|
|
|
|
|
|
|
|
return render(
|
|
|
|
request,
|
|
|
|
'admin/user_form.html',
|
|
|
|
{
|
|
|
|
'user_form': user_form,
|
|
|
|
'attributes_form': attributes_form,
|
|
|
|
'title': _('Create User')
|
|
|
|
},
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
@superuser_only
|
|
|
|
def user_update(request, pk):
|
|
|
|
user = get_object_or_404(User, pk=pk)
|
|
|
|
attributes = UserAttributes.objects.get(user=user)
|
|
|
|
user_form = forms.UserForm(request.POST or None, instance=user)
|
|
|
|
attributes_form = forms.UserAttributesForm(request.POST or None, instance=attributes)
|
|
|
|
if user_form.is_valid() and attributes_form.is_valid():
|
|
|
|
user_form.save()
|
|
|
|
attributes_form.save()
|
|
|
|
return redirect('admin:user_list')
|
|
|
|
|
|
|
|
return render(
|
|
|
|
request,
|
|
|
|
'admin/user_form.html',
|
|
|
|
{
|
|
|
|
'user_form': user_form,
|
|
|
|
'attributes_form': attributes_form,
|
|
|
|
'title': _('Update User')
|
|
|
|
},
|
|
|
|
)
|
|
|
|
|
2020-07-23 10:16:39 +00:00
|
|
|
@superuser_only
|
|
|
|
def user_update_password(request, pk):
|
|
|
|
user = get_object_or_404(User, pk=pk)
|
|
|
|
if request.method == 'POST':
|
|
|
|
form = AdminPasswordChangeForm(user, request.POST)
|
|
|
|
if form.is_valid():
|
|
|
|
user = form.save()
|
|
|
|
update_session_auth_hash(request, user) # Important!
|
|
|
|
messages.success(request, _('User password changed: {}'.format(user.username)))
|
|
|
|
return redirect('admin:user_list')
|
|
|
|
else:
|
|
|
|
messages.error(request, _('Wrong Data Provided'))
|
|
|
|
else:
|
|
|
|
form = AdminPasswordChangeForm(user)
|
|
|
|
|
|
|
|
return render(
|
|
|
|
request,
|
|
|
|
'accounts/change_password_form.html',
|
|
|
|
{
|
|
|
|
'form': form,
|
|
|
|
'user': user.username
|
|
|
|
}
|
|
|
|
)
|
2020-05-27 12:24:06 +00:00
|
|
|
|
|
|
|
@superuser_only
|
|
|
|
def user_delete(request, pk):
|
|
|
|
user = get_object_or_404(User, pk=pk)
|
|
|
|
if request.method == 'POST':
|
|
|
|
user.delete()
|
|
|
|
return redirect('admin:user_list')
|
|
|
|
|
|
|
|
return render(
|
|
|
|
request,
|
2020-06-15 10:30:27 +00:00
|
|
|
'common/confirm_delete.html',
|
2020-05-27 12:24:06 +00:00
|
|
|
{'object': user},
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
@superuser_only
|
|
|
|
def user_block(request, pk):
|
|
|
|
user: User = get_object_or_404(User, pk=pk)
|
|
|
|
user.is_active = False
|
|
|
|
user.save()
|
|
|
|
return redirect('admin:user_list')
|
|
|
|
|
|
|
|
|
|
|
|
@superuser_only
|
|
|
|
def user_unblock(request, pk):
|
|
|
|
user: User = get_object_or_404(User, pk=pk)
|
|
|
|
user.is_active = True
|
|
|
|
user.save()
|
|
|
|
return redirect('admin:user_list')
|
|
|
|
|
|
|
|
|
|
|
|
@superuser_only
|
|
|
|
def logs(request):
|
|
|
|
l = Logs.objects.order_by('-date')
|
2020-06-04 11:35:34 +00:00
|
|
|
paginator = Paginator(l, int(AppSettings.objects.get(key="LOGS_PER_PAGE").value))
|
2020-05-27 12:24:06 +00:00
|
|
|
page = request.GET.get('page', 1)
|
|
|
|
logs = paginator.page(page)
|
|
|
|
return render(request, 'admin/logs.html', {'logs': logs})
|
2020-06-16 05:26:58 +00:00
|
|
|
|
|
|
|
|
|
|
|
def add_default_instances(user):
|
|
|
|
"""
|
|
|
|
Adds instances listed in NEW_USER_DEFAULT_INSTANCES to user
|
|
|
|
"""
|
|
|
|
existing_instances = UserInstance.objects.filter(user=user)
|
|
|
|
if not existing_instances:
|
|
|
|
for instance_name in settings.NEW_USER_DEFAULT_INSTANCES:
|
|
|
|
instance = Instance.objects.get(name=instance_name)
|
|
|
|
user_instance = UserInstance(user=user, instance=instance)
|
|
|
|
user_instance.save()
|